네 안녕하세요. Godhaword 입니다.
맨날 주말만 되면 평일날에 힘들게 일했으니까 주말은 푹 쉬어야지 하고 아무것도 안하기가 일상이였습니다.
그런데 그것도 몇 달간만 힐링되고 좀 더 지나니까 무기력해지더라구요. 그래서 블로그 글 다시 써보기도 하고, CTF 문제 풀어보기도 하고, 웹린이 분들 개인적으로 웹 알려드리기도 하니까 무기력증은 좀 나아진 것 같습니다.
이 글을 읽는 분들도 혹시나 번아웃이 온다고 느끼거나 무기력증에 걸린 것 같으신 분들은 쉬는 날에 쉬는 것 말고도 무언가를 해보시기 바랍니다. (나가서 돌아다니는 건 죽어도 못하겠더라구요;; 집돌이)
문제 보겠습니다.
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_dragon where id='guest'# 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>";
if($result['id'] == 'admin') solve("dragon");
highlight_file(__FILE__);
?>
문제는 간단한 SQLI 문제 같아보입니다.
주석역할을 하는 #이 id='guest' 쪽에 붙어서 저희가 guest id 에서 admin id로 바꾸는 것은 조금 힘들어보입니다.
하지만 생각을 조금 바꾸면 아주 쉬운 문제로 바뀝니다.
이 글은 테스트 입니다1#이 글은 테스트 입니다2
이 글은 테스트 입니다3
위 테스트 글을 보시면 1번 뒤에 주석이 있으나 개행 한 번으로 2번은 필터링 되고, 3번 글은 필터링이 되지 않는 모습을 볼 수 있습니다. 이 점을 이용하여 쿼리를 작성한다면
바로 문제가 풀리는 것을 보실 수 있습니다.
중간에 gh는 id='admin' 이 되기 전 모든 값을 거짓(0) 값으로 만들기위해 대충 쓴 pw 값입니다.
개행이라는 Key Point를 빨리 알아내는 것이 중요한 문제였습니다.
- 이 문제로 알 수 있는 것
- 개행은 %0a, \n 이다
- 주석은 해당 주석 뒤로 한 줄만 주석처리가 가능하다 - Key Point
%0a
'web_security > Lord Of SQL' 카테고리의 다른 글
[LOS : Lord Of SQL Injection] 22번 Dark_eyes 문제 풀이 (0) | 2022.06.24 |
---|---|
[LOS : Lord Of SQL Injection] 21번 Iron_golem 문제 풀이 (2) | 2022.06.22 |
[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] 17번 zombie_assassin 문제 풀이 (0) | 2022.06.12 |