딩굴댕굴

[webhacking.kr] Challenge 18 - SQL Injection (limit)

by jennysgap

BOX


[webhacking.kr] Challenge 18 - SQL Injection (limit)



이번엔 SQL injection 문제다.




소스코드를 살펴보면 space(공백), /, \(, \), \t, |, &, union, select, from, 0x 값들을 입력하면 exit()에 의해 실행이 종료된다.

그리고 mysql 함수를 사용하여 id='guest'이고 입력받은 $_GET[no] 값과 일치하는 id를 검색하여 $q 변수에 저장하는 것을 알 수 있다.



테이블을 예상해보면 1을 입력했을 때 hi guest 결과가 나오는 걸 보니

no=1 guest

no=2 admin 

이라는 것으로 추측해볼 수 있다.


select id from challenge18_table where id='guest' and no=$_GET[no]

일단 쿼리문에서 id값이 guest라고 적혀있으니 이것을 먼저 무효화 시켜줄 필요가 있다.

$_GET[no] 에 0 or no=2 를 넣어보자

id가 guest고 no=0 인 id를 찾거나 no=2 인 id를 찾으라는 의미가 된다.

왜냐하면 sql 연산은 and>or 순이기 때문이다.


단, eregi에 의해 space[공백]가 있으면 실행을 종료하기 때문에 이를 우회해줄 필요가 있다.

공백을 우회하는 방법은 /를 이용한 주석이나 \n, \t 등이 있다.

그런데 \n 을 직접 폼에 입력하여 전송하면 \따로 n따로 url인코딩이 된다.

그래서 \n을 url 인코딩한 값인 %0A를 직접 입력해주면 공격에 성공할 수 있다.


limit, union, substr 같은 쿼리는 해킹에 자주 사용되므로 사용밥법을 잘 익혀두자

limit: 결과의 갯수를 제한하는 쿼리문이다.

limit 시작할 번호, 반환할 결과 수

ex) limit 1,1 -> 1번째 번호부터 시작해서 1개만 결과 출력


limit를 사용하여 공격하는 방법

0 or 1 limit 1, 1

0%0Aor%0A1%0Alimit%0A1,1






반응형

블로그의 정보

jennysgap

jennysgap

활동하기