Webhacking.kr 13번 문제 풀이


13번 클릭!!



아래와 같은 화면을 볼 수 있다


SQL INJECTION 이라 나오고


HINT가 있다


SELECT flag FROM prob13password


테이블 명과 컬럼명을 알려준거같다



먼저 소스 보기를 해봤다



no 라는 값과 password 라는 값으로 전달 시킬 수 있게 되어있다


일단 no라는 값을 통해 SQL Injection을 테스트해보았다


0을 입력했더니 아무 변화가 없었다




이번엔 1을 입력해보았다



결과가 1이 나왔다



이번엔 2 값을 입력해 보았다



result 가 0이 나왔다



2이상의 값을 입력해도 0이 나왔다


no의 값이 참일 때만 1이 나온다고 생각하고


Blind SQL Injection 체크하였다


no=2 or 1 를 입력하여 체크해보았다


(스페이스바는 %0A로 우회하였다)



아래와 같이 참이라는 결과가 나왔다



이 결과를 통해 flag 칼럼에 있는 값을 알아내면 될 거 같다


하지만 여러가지 필터링이 걸려있기 때문에


어떤 것들이 필터링 되어있는지 확인하고 막혀있을 때는 그걸 우회하는


다른 쿼리문을 짜야한다


웹 해킹에 쓰이는 DB 쿼리의 사용을 많이 알아두면 좋을거 같다


일단 union, limit는 필터링 되어있었다


저번 문제 때 사용한 파이썬(Python) 코드를 수정하여 답을 알아내 보려했지만


잘 안됐다


이유를 보니 flag 칼럼의 값이 1개가 아니라 여러개였다


그래서 Count를 사용해서 칼럼의 갯수를 알아보고


각각의 값의 길이를 알아내려 했지만


limit를 막아놨다


limit를 대신할 것을 찾아야하는데


flag의 값이 2개이기 때문에


min과 max를 이용하면 될 거 같다



Flag 칼럼의 값 갯수 알아본 결과:



그 중 min 값의 길이



max 값의 길이



알아낸 값 min



알아낸 값 max



아래 칸에 입력하고 Auth를 누르면


13번 문제는 클리어 된다



필터링 우회하는게 정말 어렵당


이 문제는 그나마 금방 찾아냈는뎅


쿼리가 잘 되어있나 확인하기가 애매모 하다 ㅠㅠ


쿼리에 대한 좀 더 완벽하게 사용할 수 있을 때 까지 연습해야겠다..


그리고 문제에 사용한 Python 코드를 공유..한당


허접하지만...


저번에 쓰던거 수정해서 썻다ㅋㅋ


Wargame13.zip


필요하신분 받아서 참고만..