R136A1
[webhacking.kr] Challenge old-39 :: SI 본문
폼 확인해보면 input 태그의 name이 id → $_POST['id'] 로 전달됨
<?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);
}
}
?>
id가 있으면 \를 없애고, '를 ''으로 교체하고 길이 16까지만 자른다.(인덱스는 15)
select 1 from member where length(id)<14 and id='{$_POST['id']}
묘하게 끝맺음이 제대로 안되어 있는 건 내 기분탓인가? => 의도된 것. 닫혀있었으면 못풀었다.
아무튼 쿼리의 결과값 $result[0] 이 1이면 풀린다.
이런 비슷한 류의 문제가 있었던 것 같은데,
현재 ' 를 두 개의 ' 로 교체하고 있고 그 후에 15개만 자르는 거니까
①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭' 를 전달하면
①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭'' 가 되고
①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭' 결과적으로는 다시 이렇게 된다.
id값에 15글자를 맞춰서 쿼리를 짜라는 뜻이다.
근데 $result[0] == 1 이 무슨 뜻인지...보면 select 1 이라고 되어있으므로
일단 값만 있으면 뽑아낸다는 것이므로, 조건을 만족시키는 게 하나라도 있으면 클리어다.
admin은 무조건 있겠지 라는 게싱으로... 풀면 된다고 한다. (이정도 게싱은 기본으로 치는 것 같다)
select 1 from member where length(id)<14 and id='admin '
admin(5) + 공백(9) + 작은따옴표(1)
'WEB SECURITY > SQL Injection' 카테고리의 다른 글
SQL Injection 필터링 우회 (0) | 2022.11.13 |
---|---|
[webhacking.kr] Challenge old-18 :: SI (0) | 2022.02.23 |
[webhacking.kr] Challenge old-61 :: SI (칼럼과 as) (0) | 2022.02.23 |
[webhacking.kr] Challenge old-59 :: SI (0) | 2022.02.23 |
¶[LOS] 23. hell_fire :: Blind, Time (0) | 2022.02.05 |
Comments