Webhacking Wrietup 46번 문제입니다.
사이트에 접속하면 SQL 인젝션이라고 친절하게 알려줍니다.
아래의 소스코드가 있으니 들어가 보겠습니다.
봐야할 부분만 캡쳐해봤습니다.
해석하면 add슬래시 라는 함수가 우리가 입력할 값 lv에 (' , ")같은 쿼터를 없애고
공백, / , * , %를 아예 지워버리는 것을 확인 할 수있습니다.
또한 아래 필터링으로는 select, 0x, limit, cash를 막아놓았습니다.
먼저 lv값을 1이 자동입력되어 있어 입력해보니
lv=4 까지는 값이 존재하는 것을 확인 할 수 있었습니다.
그러나 우리가 찾아야 하는 값은 id=admin 인 경우인데
여기서 where 조건문을 추가하는 경우를 이용해 and나 or을 사용해야합니다.
즉 구문을 정리하면
"select id,cash from chall46 where lv=$_GET[lv]"
"select id,cash from chall46 where lv=$_GET[lv] or id='admin'"
2번째 줄처럼 id값을 추가해 id=admin인 경우로 인젝션 하는 것입니다.
그러나 공백은 이전에 말한대로 막혀있으니
위 사진을 토대로 +를 사용하기로 했습니다.
값이 존재하지 않는 False를 출력할 수 있는 lv=6
공백 부분을 +로 연결하면
아래와 같이 정리가 가능합니다.
lv=6+or+id='admin'
여기서 문제는 add슬래시가 ' ' 를 없애기에
싱글쿼터 또한 없애야 합니다.
해서 처음에는 16진수를 생각했으나 필터링에 0x가 걸려있어 실패...
찾아보니 char(97,100,109,105,110) 형태도 가능하더라구요
아래와 같이 정리해서 삽입을 시도해봤습니다.
lv=6+or+id=char(97,100,109,105,110)
그런데...네 안됩니다...
아마도 예상이지만 + 가 어떠한 다른것으로 치환되면서
우회가 안되는 것으로 예상이 됩니다.
결국 다시 공백우회를 키워드로 검색하다보니
다른 방식을 찾았습니다.
괄호를 활용한 방식이더라구요
+대신 ( )를 사용해서 작성해보면
아래처럼 작성이 가능해집니다.
lv=(6)or(id=char(97,100,109,105,110))
이것을 삽입해보면
문제가 해결되었습니다!!
'Wargame(Web) > Webhacking.kr Writeup' 카테고리의 다른 글
Webhacking Writeup 20번 문제 (0) | 2022.08.13 |
---|---|
Webhacking Writeup 49번 문제 (0) | 2022.08.13 |
Webhacking Writeup 54번 문제 (0) | 2022.08.12 |
Webhacking Writeup 58번 문제 (0) | 2022.08.12 |
Webhacking Writeup 5번 문제 (0) | 2022.08.12 |