webhacking/sql, sql injection

rubiya.kr 15번.

qkqhxla1 2014. 9. 6. 14:41

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


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


내가모르는 like의 새로운 기능이 있는줄 알고 못풀다가 adm1nkyj 님의 도움을 받아서 클리어....


결과가 admin이면 클리어. 결과를 union으로 만들거나 admin 내부의 값이 나와야 되는데...


'가 막혀있어서 union은 쓸수 없다. like의 와일드카드문자인 %를 입력해보면 hello guest가 뜨고,


다른건 없다. admin이라는 문자열을 만드는게 아니라면 테이블에 admin관련 pw가 있다고 생각해볼


수 있다.


ex)


mysql> select * from prob;

+-------+-------+

| id          |      pw    |

+-------+-------+

| admin    | 1234      |

| guest     | guest     |

+-------+-------+

2 rows in set (0.00 sec)


mysql>


요런식. admin이 검색되게 하려면 like검색시 admin의 pw를 포함되도록 하면 됨.


like의 _는 한글자 대체 와일드카드이고, %는 여러 글자 대체 와일드카드.




여러 글자 와일드카드.


와일드카드는 앞뒤로 써도 적용되므로


단순히 admin이 검색되게 하려면 admin의 pw중에 한 글자만 알아도 된다.


예로 admin의 pw가 'abcde'라고 하면 pw like '%a%'처럼 a가 포함되어있으면 출력하라는 식으로


쿼리 구성 가능. 한글자 한글자 돌리다보면 '%d%'째에 admin이 출력된다.


http://rubiya.kr/sqli/prob15.php?pw=%d%


query : select id from prob15 where pw like '%d%'

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

rubiya.kr 19번.  (0) 2014.09.10
mysql hex()함수에 관해서  (0) 2014.09.06
webhacking.kr 13번.  (2) 2014.09.04
rubiya.kr 20번.  (0) 2014.09.04
mysql max,min함수  (0) 2014.08.31