[Lord of SQLInjection]vampire write up

zzsla·2023년 6월 11일
0

문제 정보

없다.

문제

문제에 들어가면 위에 query와 sql명령문이 적혀있고 아래 코드가 나와 있다.

분석

get으로 요청받은 id에 '가 들어가면 No Hack ~_~이라고 나오면서 프로그램이 죽는다. 그리고 get으로 요청받은 idstrtolower을 한 뒤에 저장하고, idadmin을 빈 아무것도 없는 것으로 바꾼다.
strtolower는 대문자를 소문자로 바꾸는 함수이다.
이 부분들이 바로 필터링 부분이다.

  if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
  $_GET[id] = strtolower($_GET[id]);
  $_GET[id] = str_replace("admin","",$_GET[id]);

그 다음 query가 나오는데 sql 명령문이다.
sql 명령문은 id를 찾는데 prob_vampire이라는 테이블에 있어야 하고, id가 get으로 요청된 id값이어야 한다.

  $query = "select id from prob_vampire where id='{$_GET[id]}'";

그리고 id값이 admin이면 문제가 풀린다.

  if($result['id'] == 'admin') solve("vampire"); 

취약점

id값에 admin이 들어가면 문제가 풀리지만, idadmin을 넣을 수 없다. 그리고 Admin을 이용해서 우회하는 것도 strtolower 때문에 불가능하다. 하지만 다른 우회 방법을 이용하면 문제를 풀 수 있다.

익스플로잇

idadmin 대신에 admadminin을 넣는다. 그러면 필터링에 의해 admin이 지워지면서 admin이 남는다.(admadminin) 그렇기 때문에 문제가 풀린다.
/?id=admadminin

익스플로잇을 넣었을 때 실행될 sql query

select id from prob_vampire where id='admin'
profile
[README]newbi security hacker :p

0개의 댓글