반응형


문제를 보자.


pw 파라미터를 GET방식으로 받고 그 값의 길이가 6이 넘어가면 안된다.

그 값을 통해 처리한 쿼리의 결과 id값이 존재하면 문제가 풀리는데 특이점은 id!='admin'이 있다는 점이다.


pw가 괄호로 막혀있기 때문에 가장 간단하다고 생각한 것은 ')||1# 이다.


하지만 No Hack ~_~ 이 떠버린다 ㅠㅠ

이유를 찾아보니 주석처리를 막아두었다. #과 -를 막았다

주석을 이용하지 말라는 의미이다.

즉, 잘 이어보라는 의미인데... 흠


결국 힌트를 받았다.

Mysql 의 auto type cast를 이용하라고 한다.


간단하게 설명하자면 string의 column값을 Int형과 비교하게 하면 string은 항상 0이 return되어 =0을 하게되면 결과가 모두 뜬다는 것이다.



첫번째는 string column인 col1과 0을 비교할 경우 col1은 0이 출력되어 0=0이 되어 모든 컬럼이 출력된다.


이를 문제에 대입시킬 경우 (')=0을 할 경우 모두 0이 되어 모든 컬럼이 출력되는 것이다.


그렇다면 필요한 글자 수는 ')=0 이렇게 최소 4개이고 그 뒤에 주석으로 2개를 사용하면 된다.


mysql에서 사용할 수 있는 주석에 #과 --를 제외하고 사용할 수 있는 주석이 있을까?


;%00 을 이용해서 할 수 있다!

;을 이용할 경우 쿼리의 나머지부분은 다음 쿼리로 실행시키려하기 때문에 %00을 통해 문장이 끝났다는 것을 알려주면 된다.


이를 통해 클리어!


pw=')=0;%00



** 참고

 - Mssql 의 경우 auto type cast가 되지 않아 error based sql injection이 편하다 (다른 형태로 비교하려고 하면 쿼리결과를 error에 출력시켜주기 때문)

 - 하지만 mysqql 의 경우 auto type cast때문에 error에 쿼리 결과가 뜨지 않는다. 따라서 다른 방식을 이용해야한다!!


select * from (select name_const(version(),1),name_const(version(),1))a

select * from table where 1=1 and ExtractValue(1,concat(0x01,version()))

select * from table where 1=1 and UpdateXML(1,concat(0x01,version()),1)

select * from table where (@:=1)or@ group by concat(@@version,@:=!@)having@||min(0)

출처: http://itstarter.tistory.com/394

반응형

'Solve Problem > LOS' 카테고리의 다른 글

[LOS] 20번 문제  (0) 2018.02.14
[LOS] 19번 문제  (0) 2018.02.11
[LOS] 17번 문제  (0) 2018.02.08
[LOS] 16번 문제  (0) 2018.02.08
[LOS] 15번 문제  (0) 2018.02.08
블로그 이미지

rootable

,