일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- distinct()
- AES
- filter()
- proc contents
- select()
- arrange()
- mutate()
- sample_n()
- samp;e_frac()
- 대칭형 알고리즘
- summarize()
- groupe_by()
- dplyr
- Today
- Total
Gae Ko's Blog
los : skeleton 본문
[코드분석]
<?php
include "./config.php";
login_chk();
dbconnect();
↑DB와 연결을 위한 코드
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
↑preg_match를 통한 필터링
$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
↑쿼리 실행
$result = @mysql_fetch_array(mysql_query($query));
if($result['id'] == 'admin') solve("skeleton");
↑문제의 포인트
[내 풀이]
이번 문제는 지난 문제와 비교해보면 새롭게 추가된 코드는 없이 비슷한 형식에 쿼리문에 and 1=0 이 추가되었다.
코드를 보니 preg_match를 통해 입력값에 포함된 문자열 prob 와 _ 와 . 와 ( 와 ) 을 필터링하고
pw값을 GET방식으로 입력받고 id='admin'일 때 문제가 해결된다고 한다.
처음에 생각한 방법은 쿼리문에 보이는 id='guest'어쩌고 부터 1=0까지는 모두 false니까 뒤에 or id='admin'을 넣으면 되지 않을까 해서 아래처럼 해보았다.
하지만 이것은 애초에 url을 통해 pw값을 입력값을 받는다는 기초 생각 자체를 깜빡한 실수였다.
그래서 다시 생각한 방법은 id='guest' and pw='' 로 만들어 false되게 하고 or id='admin'이라고 추가하고 그 뒤에 나올 1=0을 주석처리로 무시한다.
SUCCESS !!
'웹해킹 > [los] Lord of SQL' 카테고리의 다른 글
los : darkknight (0) | 2017.08.17 |
---|---|
los : golem (0) | 2017.08.17 |
los : vampire (0) | 2017.08.17 |
los : troll (0) | 2017.08.16 |
los : orge (0) | 2017.08.12 |