Webhacking.kr 7번 문제 풀이를 해보자



7번 문제를 클릭하면 아래와 같은 화면이 나온다


URL을 보면 val=1 라는 값이 전달되고 있다


일단 auth를 눌러보자



Access_Denied! 라는 창이 뜬다



그럼 일단 소스보기를 해보자



admin mod는 var 값이 2라는 사실과


index.phps 를 볼 수 있다는 걸 알 수 있다


우선 var 값을 2로 해보자


아래와 같이 Access Denied! 라고 나온다



index.phps로 이동해보자


그럼 아래와 같이 힌트가 존재한다


db에는 val=2가 존재 하지 않는다는 사실과


union을 이용하라는 힌트가 있고



go 에 val의 값을 저장한다


go 값이 없으면 val를 1로 한다


그리고 go 값을 ck에 저장하고


*,/ 의 값을 지운다


그리고 --나 2, substring 등을 사용하지 못하도록 필터링하였다


그리고 스페이스바도 사용하지 못하도록 되어있다


rand 값에는 1에서 5사이의 값을 랜덤?하게 저장하고


경우에 따라 쿼리를 날리게 되어있다



rand의 값에 따라서 go를 감싸고 있는 가로의 차이가 나게 된다


그렇게 나온 쿼리 결과가 result에 저장하고


mysql_fetch_array를 통해 data 라는 곳에 결과가 저장된다


그 data[0] 값이 2가 나오면 문제가 풀리는거 같다




이제 val 값에 union을 사용해보자


var=1 값 뒤에 union select 2 를 추가할 건데


위에서 보면 필터링되어있기 때문에


우회해야한다


우선 rand 값이 1일 경우로 시도해 보겠다


var=1) union SELECT (2



2의 값이 있기 때문에 Access Denied!라고 나온다


그래서 2를 필터링을 피해 3-1로 변경해 보았다



cannot use space라고 나온다


이제 스페이스바를 우회해야한다


URL 인코딩을 이용하여 스페이스바를 우회해보자


' ' 를 '%0A' 로 바꾸었다

(URL 인코딩 표를 참조하자)


var=1)%0Aunion%0Aselect%0A(3-1


var=1 일 경우



var=2 일 경우



이제 다 우회한거 같은데 왜 안되나 생각해보니


처음 val=1 과 val=2 값을 제외한 값을 넣어보니 된다


var=0 일 경우



이렇게 7번 문제도 클리어~!