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으로 들어가게 된다.
새롭게 만든 튜플을 이용해서 로그인을 하면 문제가 풀리게 된다.
'Wargame > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr old 61번 문제 풀이 (0) | 2021.05.14 |
---|---|
Webhacking.kr old 47번 문제 풀이 (0) | 2021.05.08 |
Webhacking.kr old 23번 문제 풀이 (0) | 2021.05.03 |
Webhakcing.kr old 20번 문제 풀이 (0) | 2021.05.02 |
Webhacking.kr old 1번 문제 풀이 (0) | 2021.05.01 |