일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- groupe_by()
- sample_n()
- mutate()
- summarize()
- AES
- 대칭형 알고리즘
- dplyr
- samp;e_frac()
- filter()
- distinct()
- arrange()
- proc contents
- select()
- Today
- Total
Gae Ko's Blog
los : goblin 본문
힌트를 보지 않도록 노력해보기로 하였다.
[코드분석]
<?php
include "./config.php";
login_chk();
dbconnect();
↑DB를 연결하기위한 코드
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~");
↑preg_match를 통해 입력값에 대해 싱글쿼터(') 더블쿼터(") 백쿼터(`)를 필터링
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
↑실행쿼리
$result = @mysql_fetch_array(mysql_query($query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("goblin");
↑문제의 포인트
하지만 $query = "select id from prob_goblin where id='guest' and no={$_GET[no]}" 를 보면 id값의 guest는 변경할 수 없으므로 id='guest'라는 조건이 무조건 거짓이 되고 새로운 조건을 완성시켜줘야한다.
where id='guest' and no=2
여기에 or id='admin' 을 덧붙여주면 id='guest' and no=2 이 거짓이 되고 id='admin'은 참이 되므로 solve될 수 있다.
(논리연산자의 연산순서에 따라 맨처음에 and가 나왔으므로 and기준 앞뒤 조건이 하나라도 거짓이면 통째로 거짓이 되어서, 뒤에 이어지는 조건을 보거나 뒤에 이어지는 논리 연산자가 없다면 결과가 거짓이 됨. 그런데 id='guest' 인데 guest의 no는 1이므로 and로 묶인 조건의 결과는 거짓이 된다.)
그런데 preg_match로 싱글쿼터를 필터링하므로 앞의 문제처럼 대놓고 싱글쿼터를 사용해 id값을 넣어줄 수 없다.
싱글쿼터없이 문자열을 입력하는 법은 구글링해서 찾아보니
싱글쿼터가 막혀서 문자열을 집어 넣을 수 없을 때는 0x, 0b를 사용해서 2진법, 16진법을 치환함으로써 대신할 수 있다고한다.
만약 id='ad' 를 싱글쿼터없이 나타내기 위해서는 id=0x6164 처럼 나타낼 수 있다.
(a의 아스키코드는 0x61 그리고 d의 아스키코드는 0x64)
위 방법을 이용해서 id='admin'을 표현하면 id=0x61646d696e 이다.
URL에서는
SUCCESS!!!
[p.s]
처음부터 바로 성공한건 아니고 민지언니의 도움을 받아 논리연산자의 and 와 or 의 논리 연산 순서를 배우고
처음엔
이것처럼 no값에 아무거나 들어가면 되는 줄 알았는데
guset의 no값이 1이라서 저러면 and로 묶인 조건이 참이 되서 or 뒤에 있는 조건을 무시해버린다.
그래서 결과는 당연히 fail 되었다. ㅠㅠ
그래서 no 값은 1이 아닌 숫자를 넣으면 된다 !
그리고 이 방법이 맞을 꺼라고는 예상을 못하고 틀려도 그냥 해보겠다는 마인드로 시도해본건데
GOBLIN Clear! 라고 떠서 너무 신났다 !!! ㅎ.ㅎ 헤헤
'웹해킹 > [los] Lord of SQL' 카테고리의 다른 글
los : darkelf (0) | 2017.08.12 |
---|---|
los : wolfman (0) | 2017.08.12 |
los : orc (0) | 2017.08.12 |
los : cobolt (0) | 2017.08.09 |
los : gremlin (0) | 2017.08.09 |