본문 바로가기

wargame/los.eagle-jump.org

darknight

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

문제 이름 : darknight

 

소스코드

<?php 
  include "./config.php"; 
  login_chk(); 
  dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); 
  if(preg_match('/\'/i', $_GET[pw])) exit("HeHe"); 
  if(preg_match('/\'|substr|ascii|=/i', $_GET[no])) exit("HeHe"); 
  $query = "select id from prob_darkknight where id='guest' and pw='{$_GET[pw]}' and no={$_GET[no]}"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysql_fetch_array(mysql_query($query)); 
  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 
   
  $_GET[pw] = addslashes($_GET[pw]); 
  $query = "select pw from prob_darkknight where id='admin' and pw='{$_GET[pw]}'"; 
  $result = @mysql_fetch_array(mysql_query($query)); 
  if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("darkknight"); 
  highlight_file(__FILE__); 
?>

 

 

클리어 조건을 보면 admin의 pw을 알아내는거니 블라인드 인젝션인거같다.

 

먼저 필터링 된것부터 살펴보자

pw값으로는 ('),(\),

no값으로는 substr,ascii,=  등이 필터링되었다.

 

일단 pw값에서 쿼리를 조작하는건 불가능하다 ' ' 로 감싸져있고 여기서 조작하려면 '로 닫아줘서 새로운 쿼리를 추가해줘야 하는데

 

'작은따움표가 필터링되있어서 pw에서는할수가없다.

 

그러므로 쿼리조작은 no값에서 해줘야한다.

 

no를 보게되면 블라인드 인젝션에서 사용되는 substr,ascii 등과같은 함수들이 필터링되었다

 

또 값을 대입하지못하게 = 까지 필터링해버렸다.

 

이문제는 이전 골렘(golem) 문제와 같은유형이다.

 

골렘문제에서 사용했던대로 풀어주면 쉽게가능하다.

 

 

'wargame > los.eagle-jump.org' 카테고리의 다른 글

golem  (0) 2017.07.05
skeleton  (0) 2017.07.05
vampire  (0) 2017.07.05
troll  (0) 2017.07.05
orge  (0) 2017.07.03