[los.eagle-jump]Lord Of Sql Injection gremlin - 3번
Posted by bonggang | 2020. 6. 1. 17:26
문제
https://los.eagle-jump.org/goblin_5559aacf2617d21ebb6efe907b7dded8.php
문제 해설
0. 소스 코드 확인
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~");
$query = "select id from prob_goblin where id='guest' 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>";
if($result['id'] == 'admin') solve("goblin");
highlight_file(__FILE__);
?>
이전 1, 2번와 비교하면 그래도 만이 심화됐다.
소스코드에서 [', "]를 필터링한다. 즉, 작은따옴표랑 큰따옴표를 쓸 수 없다.
그리고 쿼리문에 id가 이미 명시되어있다.
1. geust no 찾기
먼저 id가 admin일 때 문제가 해결되기 때문에 이미 작성된 쿼리문에서 [id='guest' and no=] 부분을 거짓으로 만든 후 id를 다시 입력할 수 있도록 해야한다.
이를 위해 먼저 guest의 no를 찾아보겠다.
1을 넣으니 Hello guest가 나왔다. geust의 no는 1이다. 즉, no는 1이 아닌 다른 값을 넣어줘야한다.
2. 쿼리문 작성
no = 0 or id='admin'
하지만 작은따옴표가 필터링되기때문에 다른 방법을 찾아야한다.
-> admin이라는 것은 문자열이기때문에, 16진수로 변환시켜주면 작은따옴표로 감싸줄 필요가 없게된다.
참고: https://l0rq2.tistory.com/17?category=716038
즉, no=0 or id=0x61646D696E으로 작성해주면 된다.
정답: https://los.eagle-jump.org/goblin_5559aacf2617d21ebb6efe907b7dded8.php?no=0%20or%20id=0x61646D696E
결과
'Security > Web' 카테고리의 다른 글
[Webhacking.kr] Challenge(old)- old24 (0) | 2020.06.04 |
---|---|
[los.eagle-jump]Lord Of Sql Injection gremlin - 2번 (0) | 2020.06.01 |
[los.eagle-jump]Lord Of Sql Injection gremlin - 1번 (0) | 2020.06.01 |
[Webhacking.kr] Challenge(old)- old26 (0) | 2020.06.01 |
[Webhacking.kr] Challenge(old)- old18 (0) | 2020.06.01 |
[Webhacking.kr] Challenge(old)- old-14 (0) | 2020.05.31 |
[Webhacking.kr] Challenge(old)- old-01 (0) | 2020.05.31 |
파일 업로드 공격 (0) | 2020.04.25 |