val
변수의 값이 SQL 쿼리에 들어가는데, 쿼리의 결과로 나오는 $data[0]
의 값이 2이면 된다. 즉 lv
가 2가 되도록 쿼리를 구성해야 한다. 2
, -
, +
, from
, _
, =
, 공백 문자, *
, /
는 필터링된다.
처음에 시도한 것은 나머지 연산이다. val
에 5%4
를 넣으면 결과가 1이 되어 Access_Denied가 뜨는데, 5%3
을 넣으면 query error가 뜬다. 다음으로는 select
를 이용해봤는데, val
에 select(5%4)
를 넣으면 결과가 1이 되어 Access_Denied가 뜨는데, select(5%3)
을 넣으면 마찬가지로 query error가 뜬다. 그 뜻은 DB에 lv
가 2인 데이터가 존재하지 않는다는 것이기 때문에, select 2
의 형식으로 직접 lv
가 2가 되도록 해주어야 한다.
val
에 0)union(select(5%3)
을 넣으면 $rand
가 1일 때 전체 쿼리는 select lv from chall7 where lv=(0)union(select(5%3))
이 되어, 결과로 2가 나온다. $rand
가 1일 때만 쿼리가 정상적으로 실행되기 때문에 여러 번 시도하다 보면 문제가 풀린다.
728x90