네 안녕하세요. Godhaword 입니다.
뭐 일 쌓아놓고 다른거 못하는 편이라.. 막 무자비하게 어려운 문제가 나오지 않는 한 쭉쭉 글을 쓸 것 같습니다.
짧은 글은 귀찮아서 짧게 쓰는게 아니라 진짜 설명할께 없는 기본기 관련 문제인점 알려드립니다.
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
$_GET[id] = strtolower($_GET[id]);
$_GET[id] = str_replace("admin","",$_GET[id]);
$query = "select id from prob_vampire where id='{$_GET[id]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("vampire");
highlight_file(__FILE__);
?>
일단 함수부터 살펴봅시다.
$_GET[id] = strtolower($_GET[id]);
$_GET[id] = str_replace("admin","",$_GET[id]);
사실 이 함수에서 strtolower()를 통해 GET 파라미터로 받은 id 값이 모두 소문자로 변하게 됩니다.
그 이후 replace하는거라 사실상 ireplace 한다고 볼 수도 있습니다.
하지만 제가 str_replace를 저런 방식으로 하는건 매우 큰 보안에 취약하다고 했었는데요.
https://godhaword.tistory.com/472
https://godhaword.tistory.com/473
필터링 및 우회 기법에 자세하게 적혀있는 내용 입니다.
- 이 문제로 알 수 있는 점
- 저렇게 replace 쓸꺼면 걍 쓰지 말자.
- strtolower 함수는 단어를 소문자로 바꾼다. - Key Point
adadminmin
replace를 쓸꺼면 replace("admin","nono",params) 와 같이 대체자를 명시해주자
'web_security > Lord Of SQL' 카테고리의 다른 글
[LOS : Lord Of SQL Injection] 11번 Golem 문제 풀이 (0) | 2022.06.04 |
---|---|
[LOS : Lord Of SQL Injection] 10번 Skeleton 문제 풀이 (0) | 2022.06.04 |
[LOS : Lord Of SQL Injection] 8번 Troll 문제 풀이 (0) | 2022.06.04 |
[LOS : Lord Of SQL Injection] 7번 orge 문제 풀이 (0) | 2022.06.04 |
[LOS : Lord Of SQL Injection] 6번 Darkelf 문제 풀이 (0) | 2022.06.04 |