모의해킹/Wargame
[Lord of SQL Injection] vampire 9번 문제
klus!
2022. 12. 7. 08:22
0.vampire
1. 전체 코드
2. 주요 코드 분석
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]}'";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("vampire");
- Preg_match를 통해 ', '대소문자 필터링이 됩니다.
- $_GET[id]를 통해 들어온 id는 strtolowe함수를 통해 전달받은 id는 소문자로 치환됩니다.
- admin은 str_replace함수를 통해 문자열이 삭제됩니다.
하지만, str_replace함수를 사용하긴 했지만 문자열 안에 문자열을 넣는다면 replace 되는 문자는 공백으로 바뀌게 됩니다.
그럼 해당 문자열을 중간에 끼워 넣는다면 어떻게 될까요?
예) adadminmin이런식으로 작성하여 문제를 풀어보도록 하겠습니다.
3. str_replace함수
함수를 사용할 때에는 제대로 사용하는 것이 중요하다는 점입니다.
str_replace을 사용할 때에는 대체자를 명시하여 공백이 없게 하는 것이 중요하다는 점입니다.
예를 들어 str_replace("admin","exit!",params)와 같이 작성하여 대체를 하는 것입니다.