write-up/webhacking.kr

13번

범고래_1 2016. 7. 16. 22:21



우선 필터링 목록이 빡쎄다

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