3번
코드 //<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~");
$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");
highlight_file(__FILE__);
?>
id 가 출력이 되는데 그 조건은 where id가 guest고 no가 입력받은 $_GET 숫자여야한다
코드를 보면 검색해서 한줄씩 가지고 올수있는데
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}";
$result = @mysql_fetch_array(mysql_query($query));
만약 no가 admin인 숫자를 맞춰서 admin으로 접속하면 문제가 풀린다
우선 풀이가 생각이 안나서 no값을 1~100번까지 대입했는데..
헛수고였다ㅠ _ㅠ
sql 쿼리의 특징을 보니 select쿼리 끝에 항상 참인 결과가 들어가면 그 테이블안에있는 모든 칼럼이 출력되는걸 보고
모든 칼럼을 출력을 했다
여기서 이제 생각할건 그 모든 칼럼중에 admin 을 어떻게 출력할거인가 였는데
생각보다 쉽게 풀렸다 order by 1로 한개만 출력할수도 있었고 limit를 사용하여 한개만 출력할수 있었다
답은
https://los.eagle-jump.org/goblin_5559aacf2617d21ebb6efe907b7dded8.php?no=2 or 1=1 order by 1
'WARGAME > LOS' 카테고리의 다른 글
[LOS] 6번 문제-darkelf (0) | 2017.12.09 |
---|---|
[LOS] 5번 문제-wolfman (0) | 2017.12.09 |
[LOS] 4번 문제-orc (0) | 2017.12.09 |
[LOS] 2번 문제-cobolt (0) | 2017.12.08 |
[LOS] 1번 문제-gremlin (0) | 2017.12.08 |