티스토리 뷰
18번은 SQL INJECTION 관련 문제인 것같다.
문제 페이지엔 index.phps 페이지로 들어갈 수 있게 해놨는데 들어가보면
no를 get으로 입력받아야 소스가 실행되고,
eregi를 이용해 no를 입력 받았을 때, 공백,|/|\(|\)|\t|\||&|union|select|from|0x 이런 값들이 있으면
exit에 의해 no hack이 뜨며 함수가 실행되지 않고 종료된다.
그 다음 mysql 함수로 id = guest이고 입력받은 no값과 일치하는 id를 검색하여 q라는 변수에 저장한다.
아무거나 넣어보다가 1을 넣어봤는데
url에 no=1이 뜨고 hi guest가 뜨는걸 보아 no=1의 id는 guest이다.
mysql table에 admin과 guest밖에 없다면 no=2는 admin이 아닐까 추측해본다.
$q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]")); 에서
조건이 id가 guest이므로 admin을 뽑아내려면 저 조건을 무효화 시켜야한다.
$q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=0 or no=2")); 으로 바꿔주면
id가 guest이고 no값이 0인 id를 찾거나, no=2인 id를 찾아야 한다는 뜻이다.
sql 연산 순서는 and > no 이기 때문에 (id='guest' and no=0) or no =2
공백이 들어가면 함수가 종료되기 때문에 공백을 우회해야 하는데
\는 eregi에 의해 막히기 때문에 \n를 같이 인코딩한 값인 %0a를 써야한다.
주소창에 no=2 or no=2 인 no=2%0aor%0ano=2 를 넣어보면
hi admin! 이 뜨며 문제가 풀린다.
'Web_Hacking > Webhacking.kr' 카테고리의 다른 글
[Web_Hacking] Webhacking.kr 8 (0) | 2017.03.27 |
---|---|
[Web_Hacking] Webhacking.kr 3 (0) | 2017.03.22 |
[Web_Hacking] Webhacking.kr 44 (0) | 2017.03.15 |
[Web_Hacking] Webhacking.kr 32 (0) | 2017.03.11 |
[Web_Hacking] Webhacking.kr 48 (0) | 2017.03.11 |
- Total
- Today
- Yesterday
- C
- java
- 명령어
- 0xdeadbeef
- webhacking.kr
- ubuntu
- wargame
- 자바
- MySQL
- 1번
- 웹해킹
- cobolt
- my-pass
- Lord of SQL Injection
- lob
- c언어
- BOF
- 워게임
- lord of sqlinjection
- WebHacking
- 설치
- attackme
- pwnable
- Python
- pwnable.kr
- ftz
- wargame.kr
- Los
- 파이썬
- 우분투
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |