[webhacking.kr] Challenge 18 - SQL Injection (limit)
by jennysgap[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
'BOX' 카테고리의 다른 글
[webhacking.kr] Challenge 23 - XSS (0) | 2019.06.20 |
---|---|
[webhacking.kr] Challenge 20 - Javascript (0) | 2019.06.20 |
[webhacking.kr] Challenge 17 - Javascript (0) | 2019.06.20 |
[webhacking.kr] Challenge 16 - Javascript (0) | 2019.06.20 |
[webhacking.kr] Challenge 15 - Javascript (0) | 2019.06.20 |
블로그의 정보
jennysgap
jennysgap