SMALL
[문제]
[풀이]
view-source를 통해 코드를 확인하면 php코드에서 문제 풀이를 위한 조건을 확인할 수 있다.
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Chellenge 39</title>
</head>
<body>
<?php
$db = dbconnect();
if($_POST['id']){
$_POST['id'] = str_replace("\\","",$_POST['id']);
$_POST['id'] = str_replace("'","''",$_POST['id']);
$_POST['id'] = substr($_POST['id'],0,15);
$result = mysqli_fetch_array(mysqli_query($db,"select 1 from member where length(id)<14 and id='{$_POST['id']}"));
if($result[0] == 1){
solve(39);
}
}
?>
<form method=post action=index.php>
<input type=text name=id maxlength=15 size=30>
<input type=submit>
</form>
<a href=?view_source=1>view-source</a>
</body>
</html>
$_POST['id'] = str_replace("\\","",$_POST['id']);
-> 입력 값 중에 \\가 있으면 없앰
$_POST['id'] = str_replace("'","''",$_POST['id']);
-> 입력 값 중에 '가 있으면 ''으로 치환
$_POST['id'] = substr($_POST['id'],0,15);
-> 입력 값을 15바이트만 입력 받음
$result = mysqli_fetch_array(mysqli_query($db,"select 1 from member where length(id)<14 and id='{$_POST['id']}"));
-> id = '{$_POST['id']} 부분을 살펴보면 싱글쿼터로 닫아줘야 하는데, 짝이 맞지 않는 것을 볼 수 있다.
if($result[0] == 1){
solve(39);
문제를 풀기 위해서는 무조건 싱글쿼터가 들어가야 한다.
해결 방안은?
-> 15바이트만큼 길이를 잘라 14바이트만 인식하므로 admin 뒤에 공백으로 채운 뒤 마지막 바이트를 '로 입력하면 ''로 치환되더라도 짤리게 될 것!
LIST
'Wargame > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Old-19 (0) | 2021.08.12 |
---|---|
[Webhacking.kr] Old-54 (0) | 2021.08.11 |
[Webhacking.kr] Old 26 (0) | 2021.08.04 |
[Webhacking.kr] Old 18 (0) | 2021.07.28 |
[Webhacking.kr] Old 17 (0) | 2021.07.28 |