336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
문제 이름 : skeleton
소스코드
1
2
3
4
5
6
7
8
9
10
11 |
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$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");
highlight_file(__FILE__);
?> |
cs |
위문제의 클리어조건은 id를 admin으로 인식시키면된다.
이문제에 필터링되는건 아무것도없으니 간단하게
'를 닫고 쿼리에 id='admin' 이라는것을 추가해줘서 클리어 해주면 될거같지만 오산이다.
위방법처럼 하게되면 쿼리는 이런식이될것이다
select id from prob_skeleton where id='guest' and pw='' or id='admin' and 1=0
마지막에 and 1=0 이 문제인것이다
and는 양쪽값 모두가 참이어야지만 결과가 참이이된다.
하지만 위 쿼리를 보게되면 마지막에 and 1=0 은 무조건 0 이고
무엇을 넣어도 쿼리는 거짓일수밖에없다.
어떻게 하면될까 생각하다가 뒷부분으로 주석처리 시키면 어떨까라는 생각이 들게되었다.
mysql중에 # 이라는 주석은 #에 오는 모든것은 주석처리가되버린다.
이걸 이용해서 풀어보면된다.