7번 문제 페이지 소스 화면, 주석으로 "admin mode : val=2" 라고 적혀있다.
물론 그냥 URL 부분에 "val=2" 입력하면 안된다.
index.phps 페이지에서 소스 분석을 진행한다.
URL 에서 "get" 파라미터로 받은 값을 $go 변수에 저장한다. (입력 받지 않으면 자동으로 1 세팅)
$go 변수 값을 다시 $ck 변수에 저장한다.
$ck 변수 값에서 '*', '/' 문자가 발견되면 '' 으로 치환한다.
$ck 변수 값에서 "--", "2", "50", "\+", "substring", "from" 등의 문자열이 발견되면 오류가 발생한다.
$ck 변수 값에서 공백(%20)이 발견되면 오류가 발생한다.
1 ~ 5 사이 임의의 값을 $rand 변수에 저장한다.
$rand 변수 값에 따라 실행되는 쿼리가 달라지는데 일반적인 부분은 동일하지만 쿼리 내에서
"where" 조건문에서 사용되는 괄호의 개수가 달라진다.
$data 변수에 쿼리 결과를 저장한다.
$data 변수 값에 저장되는 쿼리 결과 중 data[0] == lv 컬럼 값이 존재하지 않거나,
값이 1 / 2가 아니면 오류가 발생한다.
그리고 lv 컬럼 값이 1 이면 제일 처음에 보았던 초기 페이지를 보여주고,
컬럼 값이 2 이면 문제는 클리어 된다.
* 지금까지 알아낸 것을 정리하면 다음과 같다.
- 필터링에서 공백과 '2'가 걸린다.
- lv 값이 '2' 일 때만 문제가 클리어 된다.
- rand 변수에 따라 쿼리에서 사용되는 괄호가 달라진다.
각 조건을 조금씩 우회하면서 URL val 파라미터 값을 입력하면 된다.
페이로드 : val=-1)%0aunion%0aselect%0a5-3%23
알아보기 쉽게 URL 디코딩을 하면 다음과 같다.
val=-1) union select 5-3#
val=-1 // 일단 -1 값을 주어 아무런 결과값이 나타나지 않게 함
) // 괄호를 한개 닫았기 때문에 rand 값이1일 때 문제가 클리어 됨
union // 앞에서 -1를 입력했기 때문에 아무런 값이 반환되지 않아 오류가 발생함
따라서 union 뒤에 입력할 쿼리의 결과값과 합쳐야 함
5-3 // 필터링에서 '2'가 걸리기 때문에 산술 연사을 이용하여 '2' 값을 만듬
# // 주석을 입력해서 쿼리 뒤쪽의 괄호를 무시해 버림
* 다시 한번 말하지만 괄호를 한개 닫았기 때문에 rand 값이 1일 때만 문제가 클리어 된다.
rand 부분 때문에 문제가 한번에 클리어 되지 않을 수 있기 때문에 몇번 새로고침 해주면 된다.
'Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 9번 (0) | 2015.08.15 |
---|---|
Webhacking.kr 8번 (1) | 2015.08.15 |
Webhacking.kr 6번 (0) | 2015.08.15 |
Webhacking.kr 5번 (0) | 2015.08.15 |
Webhacking.kr 4번 (0) | 2015.08.15 |