역시 view-source 먼저 보기 ㅎㅅㅎ
코드를 해석해보면, $_POST['lid']와 $_POST['lphone']을 입력받고 이 값들을 select문의 id,phone칼럼의 값으로 쓴다.
이 때, $result['lv']이 admin이면 문제가 해결된다.
$_POST['id']와 $_POST['phone']도 입력을 받는데, $_POST['phone']의 길이는 20을 넘으면 안된다.
$_POST['id']에는 admin이 포함되면 안되고, $_POST['phone']에는 admin, 0x, hex, char, ascii, ord, select가 포함되면 안된다. ( Access Denied 출력 )
$_POST['id']와 $_POST['phone']은 insert문의 value에 삽입된다.
먼저 ID와 PHONE에 값을 입력하고 제출을 누르면, JOIN에 입력한 값들이 $_POST['id'], $_POST['phone']라는 것을 알 수 있다.
( LOGIN에 입력한 ID와 PHONE값이 $_POST['lid']와 $_POST['lphone']값이 된다. )
id를 hong로 입력하고 JOIN한 후, LOGIN했더니 lv : guest라고 떴다.
insert into chall59 values('{$_POST['id']}',{$_POST['phone']},'guest')이 insert into chall59 values('hong',1234,'guest')로 실행된 것이다.
이를 통해 values의 세번째 'guest'값이 lv라는 것을 알 수 있다.
우리는 lv의 값을 admin으로 변경해야하기 때문에 insert문을 insert into chall59 values('{$_POST['id']}',{$_POST['phone']},'admin')으로 바꿔줘야 한다.
그 전에, ' 가 먹히는지 확인해보기 위해 ID=a, PHONE=1,1) -- 를 입력해보았다. ( addslashes함수 때문에 )
그리고 ID=a, PHONE=1을 입력하고 LOGIN했더니 lv가 1로 출력되었다.
이를 통해 '로 우회가능하다는 것을 알게되었고, lv를 admin으로 만들기 위해서는 1,1) -- 대신 1,admin) -- 을 입력하면 될것같지만!! 우린 admin을 입력할 수 없다. ¯ࡇ¯
그러므로 나는 reverse함수를 이용해 문제를 풀었다.
ID=nimda, PHONE=1, reverse(id)) -- 로 입력한 후,
ID=nimda, PHONE=1 로 로그인하면
문제 해결 ㅎㅅㅎ ~~!~!!
'WEB > webhacking.kr (old)' 카테고리의 다른 글
webhacking.kr 4번 (0) | 2020.02.23 |
---|---|
webhacking.kr 61번 (0) | 2020.02.19 |
webhacking.kr 58번 (0) | 2020.02.18 |
webhacking.kr 56번 (0) | 2020.02.17 |
webhacking.kr 54번 (0) | 2020.02.16 |