Gae Ko's Blog

los:zombie_assassin 본문

웹해킹 /[los] Lord of SQL

los:zombie_assassin

Gae Ko 2017. 9. 3. 03:18


[코드분석]


<?php 
  
include "./config.php"
  
login_chk(); 
  
dbconnect(); 

↑DB와의 연결


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

↑preg를 통한 필터링


  if(@ereg("'",$_GET[id])) exit("HeHe"); 
  if(@
ereg("'",$_GET[pw])) exit("HeHe"); 

↑ereg를 통한 필터링


  $query "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>";

↑쿼리실행


  $result = @mysql_fetch_array(mysql_query($query)); 
  if(
$result['id']) solve("zombie_assassin");

↑문제의 포인트



[내풀이]


코드를 보니 preg함수를 이용해 입력받은 id와 pw에서 \\\와 prob와 _ 와 . 그리고 괄호를 필터링하고

ereg함수를 통해서는 입력받은 id와 pw에서 싱글쿼터를 필터링하고있다.

그리고 쿼리에서 where뒤의 조건에 맞는 id를 가져오도록하는데 이 때 id값이 무엇이든지간에 가져오기만 하면 문제가 풀린다고 한다.


실행한 쿼리문을 보면 입력받은 id값과 그 id에 해당하는 pw를 입력해야지만 조건이 true가 되어 해당 id를 가져온다.

과연 정말 id에 맞는 pw를 찾아서 값을 입력하는 것일까...??? (떄앵!!)


우연히 구글링하다가 힌트를 보고말았다 ㅎㅎ

ereg함수가 싱글쿼터를 필터링하지만 널바이트로 우회가 가능하다고 한다. 

(이 함수는 널바이트전까지 확인하기 때문)


ereg함수의 취약점 

1) 대소문자 구분하지 않음

2) 싱글쿼터 필터링시에 우회가능 


id값만 존재하면 되니까 where뒤에 조건이 무조건 참이 되도록 해준다.

싱글쿼터로 id값을 받는 거에 대해 닫고 or 1# 를 추가해준다. ( 1은 참을 의미)



SUCCESS!



[p.s]

트롤 문제 

'웹해킹 > [los] Lord of SQL' 카테고리의 다른 글

los:nightmare  (0) 2017.09.03
los:succubus  (0) 2017.09.03
los : assassin  (0) 2017.08.26
los : giant  (0) 2017.08.17
los : bugbear  (0) 2017.08.17