2번 COBOLT
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
// id, pw 필터링
$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
// prob_coblot 테이블에서 id가 $_GET[id]이고 pw가 $_GET[pw]를 복호화한 값인 record의 id값을 select하는 쿼리 작성
echo "<hr>query : <strong>{$query}</strong><hr><br>"; // 쿼리 출력
$result = @mysql_fetch_array(mysql_query($query)); // 쿼리 실행하여 배열 형태로 $result에 저장
if($result['id'] == 'admin') solve("cobolt"); // $result['id']가 admin이면 문제 해결!
elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>";
// $result['id']가 admin이 아니지만 존재할 때 $result['id']를 포함한 특정 문구 출력
highlight_file(__FILE__);
?>
1번 문제와 유사하다. url에 id가 admin이고 그 외 조건을 만족하게 값을 입력했다.
띄어쓰기가 되지 않아서 실패했다.
띄어쓰기를 하고 다시 시도했다. 안 됐다.
생각해보니 조건이 id가 admin이거나 TRUE이므로 즉 조건은 TRUE이다. 이 말은 모든 id가 $result에 저장될 수 있으므로 문제 해결이 되지 않을 수 있다.
id를 제외한 나머지를 주석으로 처리하고 id가 admin일 때를 조건으로 작성하였더니 성공하였다.
(이 때 주석인 #를 입력할 때 url encoding된 %23으로 입력해야 한다)
'wargame > LOS' 카테고리의 다른 글
[LOS]6번 DARKELF (0) | 2019.07.21 |
---|---|
[LOS]5번 WOLFMAN (0) | 2019.07.12 |
[LOS]4번 ORC (0) | 2019.07.11 |
[LOS]3번 GOBLIN (0) | 2019.07.09 |
[LOS]1번 GREMLIN (0) | 2019.07.09 |