Tyojong
[LOS] succubus 본문
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/\'/',$_GET[id])) exit("HeHe");
if(preg_match('/\'/',$_GET[pw])) exit("HeHe");
$query = "select id from prob_succubus 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("succubus");
highlight_file(__FILE__);
?>
문제 목표
if($result['id']) solve("succubus");
id를 출력하면 문제가 해결된다.
if(preg_match('/\'/',$_GET[id])) exit("HeHe");
if(preg_match('/\'/',$_GET[pw])) exit("HeHe");
id와 pw로 입력된 작은 따옴표는 필터링된다.
문제 해결
sql injection을 하기 위해서는 따옴표를 활용해 기존 비교 구문을 탈출시켜야 하지만 필터링 되기 때문에 다른 방법을 이용해야 한다.
sql에서 '가 문자열로 처리되기 위해서는 \'를 작성하면 되는데
select id from prob_succubus where id='\' and pw=' or 1=1-- '
id에 \를 입력하게 되면 id를 감싸고 있던 따옴표가 문자열 처리되면서 pw= 까지 문자열로 처리된다. 이후 pw파라미터에 참 구문을 넣고 뒤쪽에 있던 '는 주석으로 삭제 시켜주면 따옴표 없이 구문을 참으로 만들 수 있다.
'web > LOS' 카테고리의 다른 글
[LOS] zombie_assassin (0) | 2025.08.14 |
---|---|
[LOS] assassin (0) | 2025.08.12 |
[LOS] giant (0) | 2025.08.11 |
[LOS] bugbear (0) | 2025.08.09 |
[LOS] darkknight (0) | 2025.08.08 |