문제 19번 - xavis
query : select id from prob_xavis where id='admin' and pw=''
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/regex|like/i', $_GET[pw])) exit("HeHe");
$query = "select id from prob_xavis where id='admin' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_xavis where id='admin' and pw='{$_GET[pw]}'";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("xavis");
highlight_file(__FILE__);
?>
일단 다른 문제들과 마찬가지로 php 코드가 주어져있다.
먼저 필터링 함수를 확인해보면 pw를 받는 변수에서 prob와 _ , . ,() , regex, like를 필터링 하고 추가로 i를 통해 대소문자를 구분하지 않는 것을 확인할 수 있다.
<?php
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/regex|like/i', $_GET[pw])) exit("HeHe");
?>
clear 조건을 확인하기 위해 조건문 코드를 확인해보니 pw를 찾아야 한다는 것을 확인해볼 수 있다. pw의 크기를 먼저 찾고 pw를 찾는 파이썬 코드를 제작해야겠다.
<?php
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_xavis where id='admin' and pw='{$_GET[pw]}'";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("xavis");
highlight_file(__FILE__);
?>
아래 코드에서 쿼리문이 참이되면 hello admin이 출력되는 것을 통해 pw의 길이를 먼저 찾아냈다.
<?php
$query = "select id from prob_xavis where id='admin' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
?>
pw의 크기가 12라는 것을 알아냈다.
pw의 크기를 알아내었는데 파이썬 코드로 알아낼 수가 없어서 다른 자료들을 찾아보다 신박한 방법을 알아냈다.
select @a:=pw WHERE id=’admin’ 라는 쿼리를 이용하면 id가 admin인 pw를 @a를 통해 불러올 수 있다는 것을 알게되었다. 이후에 union select @a를 하면 id인 admin 대신에 pw가 나타난다.
pw=' or (select @a:=pw WHERE id='admin') union select @a%23 을 입력한다.
pw가 우왕굳이라는 것을 알아냈으니 pw=우왕굳을 입력한다.
solve
https://los.rubiya.kr/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php?pw=%EC%9A%B0%EC%99%95%EA%B5%B3
'write-up > LOS write-up' 카테고리의 다른 글
LOS (Lord of SQL injection) 문제 21번 iron_golem write-up (0) | 2021.07.12 |
---|---|
LOS (Lord of SQL injection) 문제 20번 dragon write-up (0) | 2021.07.10 |
LOS (Lord of SQL injection) 문제 18번 nightmare write-up (0) | 2021.07.10 |
LOS (Lord of SQL injection) 문제 17번 zombie_assassin write-up (0) | 2021.07.10 |
LOS (Lord of SQL injection) 문제 16번 succubus write-up (0) | 2021.07.10 |