본문 바로가기
category/웹해킹(webhacking.kr)

웹해킹(webhacking.kr) - 7번

by 자운대고라니 2020. 11. 14.
반응형

안녕하세요??

자운대 고라니입니다.

오늘은 wargame.kr old-7번 문제를 풀어보겠습니다.


문제를 보면 auth라는 버튼과 view-source라는 링크가 보인다.

일단 auth라는 버튼을 클릭해보았다.

"접근이 금지됐다"라고 나와있다.

view-source를 확인해보자.

중요한 코드 부분을 캡처했다.

간단하게 요약하자면 "lv=2"라는 값을 넣어야 문제가 풀릴 것인데, preg_match로 인해서 2라는 값을

$go변수에 직접적으로 넣지는 못한다.

 

val=2를 넣었을 때

 

이는 우회하는 여러 가지 방법이 있는데, 나는 % 연산을 활용하겠다.

% 는 나머지 값을 구하는 연산이다.

 

$go 변수 5%3이라는 값을 넣으면 preg_match로 필터링이 되지 않고, 우회할 수 있다.

그리고 쿼리문에서는 연산이 되므로 lv=(2)가 될 것이기 때문이다.

그렇다면 url에 val=5%3이라는 값을 넣어보자.

당연히 정답이 나올 줄 알았다.

하지만

query error라고 나왔다.

이는 테이블에 lv=2라는 값이 존재하지 않다는 뜻이다.

 

이를 해결하기 위해서는 union을 활용해보자.

union은 서로 다른 테이블을 합치는 기능을 가지고 있다.

이를 통해서 기존 테이블에 존재하지 않는 값을 val에 넣을 수 있게 된다.

 

위의 값을 쿼리문에 그대로 넣어 본다면,

lv=(3)union(select(5%3)($rand==1일때)

lv = 3 && lv = 2라는 값이 들어가는데,

lv = 3이라는 값은 query error가 뜨므로

lv=2라는 값만 들어가게 된다.

그리고 $rand==1일때만 위의 쿼리문이 적용되므로, 계속 새로고침을 해야 답이 나온다.

 

반응형

댓글