klaus

[Lord of SQL Injection] vampire 9번 문제 본문

모의해킹/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)와 같이 작성하여 대체를 하는 것입니다.

Comments