[Lord of SQLInjection]troll write up

zzsla·2023년 6월 11일
0
post-custom-banner

문제 정보

없다.

문제

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

분석

get으로 요청받은 id값에 ', admin이 들어가면 프로그램이 죽는다. 즉 저 값들이 필터링되어 있다.

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

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

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

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

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

취약점

id값에 admin이 들어가면 문제가 풀리지만, idadmin을 넣을 수 없다. 그래서admin을 대신하면서 필터링을 우회할 값을 넣으면 문제를 풀 수 있다. (preg_match("/admin/", $_GET[id]))를 보면 i가 없는 것을 볼 수 있다. 즉 필터링부분은 대소문자를 구분한다.

익스플로잇

id값에 admin 대신 Admin을 넣는다. 필터링부분은 대소문자를 구분하지만 sql에서는 대소문자를 구분하지 않기 때문에 필터링을 우회할 수 있다.
그렇기 때문에 문제가 풀린다.
/?id=Admin

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

select id from prob_troll where id='Admin'
profile
[README]newbi security hacker :p
post-custom-banner

0개의 댓글