소스코드를 간단히 요약하면
1. 우리가 입력하는 값은 'no'라는 이름으로 index.php에 GET 방식으로 넘겨진다.
2. 입력 시 공백 / ( ) | & select from 0x 문자열은 모두 걸러진다.
3. 우리가 입력하면 select id from chall18 where id='guest' and no=$_GET[no] 이 문장에 들어가게 된다.
1을 입력하니 hi guest 문자열이 뜬다.
우리는 admin의 no는 2라는 것을 알고 있다.
따라서 우리는 id가 admin이고 no=2일 때의 result가 나오게 하면 된다.
SQL 인젝션 공격으로 문제를 해결해보겠다.
where id='guest' and no=입력값
where 절에서 true와 false의 경우로 생각해보자.
TRUE and TRUE -> TRUE
TRUE and FALSE -> FALSE
TRUE or FALSE -> TRUE
(TRUE and FALSE) or TRUE -> TRUE
그러면 우리는 FALSE가 되게 하는 값을 입력해주고 or 로 TRUE 문을 연결해주면 되겠다.
입력 : 0 or no=2
하지만 이 문제에선 입력할 때 GET 방식으로 요청을 처리하고, 공백을 필터링 해주고 있으므로
URL 창에 입력 & 공백 자리는 URL 인코딩 방식으로 적어준다.
:: 공백 문자 필터링 우회 시 %09를 사용한다.
'WEB > WEB Hacking' 카테고리의 다른 글
[Webhacking.kr] Challenge(old) 20번 풀이 (0) | 2021.05.23 |
---|---|
[Webhacking.kr] Challenge(old) 19번 풀이 (0) | 2021.05.23 |
[Webhacking.kr] Challenge(old) 17번 풀이 (0) | 2021.05.23 |
[Webhacking.kr] Challenge(old) 16번 풀이 (0) | 2021.05.23 |
[Webhacking.kr] Challenge(old) 13번 풀이 (0) | 2021.05.23 |