네 안녕하세요. Godhaword 입니다.
이번에 기회 잡아서 글 쓰느라 한 번에 los 관련 글 쓰는데 하루에 15개 밖에 글을 업로드 못하더라구요.
일단 코드는 다 작성해 놓고 천천히 쓰는 중입니다. 15번 부터 글은 아마 예약 글로 천천히 풀 예정입니다.
<?php
include "./config.php";
login_chk();
$db = dbconnect();
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) solve("zombie_assassin");
highlight_file(__FILE__);
?>
코드가 기네요. 어림도 없지 바로 admin'# 때려박기
admin'# 이 거꾸로 #'minda로 표현되고, '는 \'이 반대로 출력되며 '\로 출력되는 것을 볼 수 있습니다.
위에서 사용되는 strrev 함수가 입력받은 id, pw 값을 반대로 출력해주고 있습니다. (String Reverse 인 듯)
그리고 addslashes 함수가 ' 앞에 \(역슬래시) 를 추가하여 '를 문자로 입력받게 도와줍니다.
흠.. 이 전에 assassin 문제가 \를 이용해서 싱글쿼터를 문자형으로 우회하여 넘어가는 느낌이였는데, assassin_zombie 는 오히려 그걸 역으로 이용해서 풀기 까다롭게 해주네요.
하지만 위 쿼리를 보시면 id='#'\minda 로 표현되며 그냥 간단하게 휴먼 코딩으로 정리를 조금 더 해서 쿼리를 날려보겠습니다.
바로 풀리네요.
일단 null byte를 보내 \0 을 보내어 역슬래시를 뒤로 보냅니다.
그러면 뒤로간 역슬래시가 싱글 쿼터를 문자형으로 받아주고, pw 값에 저희가 원하는 쿼리를 날릴 수 있게 해줍니다.
그 뒤부터는 저희가 쉽게 assassin 풀던대로 넘어가면 됩니다.
null byte 빼고 다른 특수기호들은 슬래시가 안박혀서 나오더라구요
- 이 문제로 알 수 있는 것
- 문제 이름이 비슷하면 해결 방법 또한 비슷하다
- 전에 한 번 썼던 기법이 다시 사용될 때가 많다
- 백슬래시로 싱글쿼터가 문자형이 된다는 것을 알아두자 - Key Point
%00은 Null byte 이며 \0 을 뜻한다
'web_security > Lord Of SQL' 카테고리의 다른 글
[LOS : Lord Of SQL Injection] 19번 Xavis 문제 풀이 (0) | 2022.06.18 |
---|---|
[LOS : Lord Of SQL Injection] 18번 Nightmare 문제 풀이 (0) | 2022.06.15 |
[LOS : Lord Of SQL Injection] 16번 Succubus 문제 풀이 (0) | 2022.06.09 |
[LOS : Lord Of SQL Injection] 15번 Assassin 문제 풀이 (0) | 2022.06.06 |
[LOS : Lord Of SQL Injection] 14번 Giant 문제 풀이 (0) | 2022.06.05 |