LOS 30~36번
30, 31번은 CTF에서만 나올 것 같은 quine 문제였고, 32번도 완전 CTF 느낌..
33 ~ 36번은 WAF 관련 우회 문제였다.
30번 ouroboros
1
2
3
4
5
6
7
8
9
10
11
12
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|rollup|join|@/i', $_GET['pw'])) exit("No Hack ~_~");
$query = "select pw from prob_ouroboros where pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['pw']) echo "<h2>Pw : {$result[pw]}</h2>";
if(($result['pw']) && ($result['pw'] === $_GET['pw'])) solve("ouroboros");
highlight_file(__FILE__);
?>
늘 먹던 blind sql이라 뭐가 다른가 싶었는데
pw가 안 나온다.
필터링에 걸린 것도 아니고 뭘까 하고 검색을 해보니까 quine 문제라고 한다.
테이블에 pw가 없기 때문에 추출할 수가 없고, 대신 union select를 통해서 result[‘pw’]를 조작 가능하다.
그 다음 이제 get[‘pw’]와 result[‘pw’]를 같게 하면 된다.
우라보로스를 찾아보니까 자신의 꼬리를 먹는 뱀이 나오는데 그래서 quine 문제로 선택이 된 듯 하다
quine은 프로그래밍에서 자기 자신의 소스 코드를 출력하는 프로그램으로, 지금처럼 입력한 값을 그대로 출력하는 것이다.
ACDC CTF였나 자체 제작 언어로 quine 만드는 문제를 한 번 풀어본 적이 있지만 그렇게 재밌지는 않았다.
그러니까.. 소스 코드는 그대로 긁어 왔다. 리얼 월드에서 일어날 것 같지도 않고, SQL quine 생성기가 있다는 것만 알고 넘어가자.
31번 zombie
1
2
3
4
5
6
7
8
9
10
11
12
<?php
include "./config.php";
login_chk();
$db = dbconnect("zombie");
if(preg_match('/rollup|join|ace|@/i', $_GET['pw'])) exit("No Hack ~_~");
$query = "select pw from prob_zombie where pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['pw']) echo "<h2>Pw : {$result[pw]}</h2>";
if(($result['pw']) && ($result['pw'] === $_GET['pw'])) solve("zombie");
highlight_file(__FILE__);
?>
필터링이 바뀐 똑같은 quine 문제이다.