Wargame/Webhacking.kr

Webhacking.kr old 59번 문제 풀이

esyeonge 2021. 5. 7. 00:33

view-source를 눌러서 소스 코드를 보자.

 

코드를 보면

1) phone이 20글자를 넘어가면 Acess Denied 출력

2) id에 admin/i가 입력되면 Access Denied 출력

3) phone에서 각종 문자열을 필터링하는 것을 볼 수 있다.

 

각각 칸의 name값은 위와 같다.

 

select id,lv from chall59 where id='{$_POST['lid']}' and phone='{$_POST['lphone']}'

위의 SQL 문에서 id 값이 0이 아니고 lv이 admin이면 문제가 풀리게 된다.

그럼 우리는 lv에 admin 값이 들어간 튜플을 JOIN으로 생성하면 된다.

 

insert into chall59 values('{$_POST['id']}',{$_POST['phone']},'guest')

insert문을 보면 lv 값에는 자동으로 'guest' 값이 들어가도록 되어 있다.

우리는 이 값에 'admin'을 넣어야 하니까 --을 통해 'guest' 값을 무효화 해주자.

이때 문제는 admin이라는 단어가 필터링 된다는 것이다.

이걸 해결하기 위해서는 reverse()를 이용하여 nimda 라는 문자열을 admin으로 만들어주는 방법을 사용하면 된다.

 

즉, id = nimda, phone에 1, reverse(id))--를 넣으면

Database에는 id=nimda, phone=1, lv=admin으로 들어가게 된다.

 

새롭게 만든 튜플을 이용해서 로그인을 하면 문제가 풀리게 된다.