네 안녕하세요. Godhaword 입니다.
제 기억으로는 이 뒤로는 다 필터링 관련 문제였던거 같은데요.
바로바로 풀어보겠습니다.
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_assassin where pw like '{$_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("assassin");
highlight_file(__FILE__);
?>
pw로 입력받고 id가 admin이기만 하면 되는 간단한 문제네요.
그냥 ' or id='admin'# 하면 안되나?
아.. 싱글 쿼터에 필터링이 있었네요.
싱글쿼터가 필터링되어 있는데 전에 풀던 문제처럼 no 같은 숫자형 파라미터가 없기에 어쩌라는건지 다시 생각해보아야합니다.
저희는 여기에서 와일드카드라는 개념을 알아두면 좋습니다.
like 를 쓴다면 %(와일드카드)를 쓸 수 있는데요.
저희가 어딘가에 값을 입력할 때, 중간 무슨 값은 알겠는데 자세한 정보를 모를 때 평소에는 *를 입력하여 값을 찾곤 합니다. 이 문제에선 * 역할로 %를 쓰면 됩니다.
추가적으로 _(언더바) 는 한 글자를 뜻합니다.
예를 들어 이렇게 % 와일드카드 하나만 쓰게 된다면 일단 맞는 말이 됩니다.
하지만 저희가 알아야 하는 부분은 admin의 pw 값이기 때문에 좀 더 찾아봅시다.
이런식으로 _ 를 통하여 pw 길이가 8글자인 것은 알았는데요.
근데 풀다보니까 꼭 이렇게 귀찮게 풀어야하나 라는 생각이 들었습니다.
저희는 비밀번호 전부를 알던 비밀번호 반만 알던 와일드카드라는 기능을 사용하여 더 빨리 풀수 있으면 해당 방법을 사용하여 넘어가면 더 이득입니다.
그러므로 각자리 단어를 하나하나 찾는 것 보단 위와 같은 방식으로 와일드카드를 이용하여 넘어갈 수 있는 부분은 다 넘어가 핵심만 찾는 코드로 짜보았습니다.
저는 보여드릴려고 이렇게 짰으나 실제로 문제푸는 입장에선 찾자마자 break 잡아서 __2% 만 넘겨도 문제푸는데는 지장이 없습니다.
다른 풀이는 모르겠으나 이 방법대로 하는게 가장 빨라보입니다.
와일드카드 사용하는 문제인 것만 알면 글자수 체크할 필요도 없이 위와 같은 코드를 구하면 3자리 안에 flag를 구할 수 있습니다.
- 이 문제로 알 수 있는 것
- 와일드카드라는 정의를 몰랐다면 푸는데 꽤 오랜 시간이 걸릴 것이며 난이도도 높은 문제로 다가왔을 수도 있습니다.
- 하지만 와일드카드라는 내용을 알았더라면 3글자 brute force 안에 답이 나오는 쉬운 문제였습니다.
- 그렇다고 pw 값을 하나하나 다 구해서 푸는 풀이 또한 틀린 풀이는 아니며 모든 풀이는 flag를 구하는데에 목적이 있다는 부분을 다시 생각해보는 문제였습니다.
- 실무에서 위와 같은 상황이 온다면 계정을 탈취하여 그 해당 권한을 사용하고자 하면 그 땐 저와 같은 대략 유추하여 사용하시는게 더 빠르다는 부분 알려드립니다.
- 지금까지 기본기, 스킬 위주의 문제였다면 이 문제는 센스가 있다면 더 빨리 풀 수 있는 그런 문제였다 생각합니다. - Key Point
각 단어 하나하나는 _
대략 뭉텅이는 %
위 와일드카드를 대응하여 대략 데이터를 조회할 수 있다
'web_security > Lord Of SQL' 카테고리의 다른 글
[LOS : Lord Of SQL Injection] 17번 zombie_assassin 문제 풀이 (0) | 2022.06.12 |
---|---|
[LOS : Lord Of SQL Injection] 16번 Succubus 문제 풀이 (0) | 2022.06.09 |
[LOS : Lord Of SQL Injection] 14번 Giant 문제 풀이 (0) | 2022.06.05 |
[LOS : Lord Of SQL Injection] 13번 Bugbear 문제 풀이 (0) | 2022.06.04 |
[LOS : Lord Of SQL Injection] 12번 Darknight 문제 풀이 (0) | 2022.06.04 |