일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- filter()
- groupe_by()
- distinct()
- arrange()
- AES
- sample_n()
- dplyr
- mutate()
- 대칭형 알고리즘
- proc contents
- summarize()
- select()
- samp;e_frac()
- Today
- Total
Gae Ko's Blog
los:nightmare 본문
[코드분석]
<?php
include "./config.php";
login_chk();
dbconnect();
↑DB와 연결
if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~");
↑preg함수를 통한 필터링
if(strlen($_GET[pw])>6) exit("No Hack ~_~");
↑strlen함수를 통해 길이제한
$query = "select id from prob_nightmare where pw=('{$_GET[pw]}') and id!='admin'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
↑쿼리 실행
$result = @mysql_fetch_array(mysql_query($query));
if($result['id']) solve("nightmare");
↑문제의 포인트
[내풀이]
코드를 보니 (수상한 부분)
- -와 # 필터링
- 입력값 pw의 길이 ≤ 6 이여야함
- 실행쿼리를 보니 pw=('입력값') // 처음보는 방식.
- id != 'admin'
내 생각
- id!='admin' 부분을 주석처리해줘야함
- 주석을 우회하는 방법
--공백 또는 /**/ 또는 ;%00 으로 대체 가능
- ')로 닫아야하는 '와 ) 가 필요하고 주석 하나 필요하면 총 3개문자는 필수로 들어가야함
즉 최대 6개 문자중에서 저 3개 문자를 제외한 3개의 문자로 pw의 조건 부분을 true로 만들어줘야함
pw=('') or 1# 하고 싶지만 길이 제한때문에 안된다 ㅠㅠ
고민고민 .... 구글링... 해보았지만 결국 알아내지 못하고 힌트를 보았다 ㅠㅠ
힌트1. 문자열과 숫자의 비교해보기
힌트2. 거짓 = 거짓 의 결과는 true
데이터 형식은 암시적으로 또는 명시적으로 변환할 수 있다.
SQL Sever는 데이터 형식을 자동으로 변환하는데 조건절 데이터 타입이 다르면 우선순위가 있는 쪽으로 형변환이 내부적으로 발생하는 것을 말한다.
예를 들면 string과 int를 서로 비교하는 경우 비교되기 전에 string이 암시적으로 int형으로 변환된다고한다. 이때 문자는 숫자0으로 변환된다.
명시적 변환은 cast 또는 convert 함수를 사용한다.
( http://www.mysqlkorea.com/sub.html?mcode=manual&scode=01&m_no=21699&cat1=12&cat2=351&cat3=362&lang=k )
bbbbbbbbbbbbbbbbbbbbbbbbbbbbb
[p.s]
고민1. 실행쿼리를 보니 pw=('입력값') // 생각해보니 mysql에서 (와 )를 이용해서 공백을 대체한다고 배웠는데 그런 이유로 저기서의 (와 )는 공백으로 보아도 되는게 맞나요???!!
답변1. 그렇다라기보다는 공격을 막기위해 그냥 괄호로 묶은 용도로 생각하면됨.
고민2.
위 쿼리문처럼 공백인 id값이 존재하지 않으므로 id='' 은 false가 되는 것처럼
pw=('')의 결과도 false이고 false=false는 true가 되므로 pw=('')=0 의 결과는 true가 된다고 생각했지만
민지언니가 그런 수식은
'웹해킹 > [los] Lord of SQL' 카테고리의 다른 글
los:xavis (0) | 2017.09.03 |
---|---|
los:succubus (0) | 2017.09.03 |
los:zombie_assassin (0) | 2017.09.03 |
los : assassin (0) | 2017.08.26 |
los : giant (0) | 2017.08.17 |