본문 바로가기
개인 공부/WEB

[웹해킹] LOS 3 - (Goblin)

by 아메리카노와떡볶이 2021. 5. 29.
728x90
Lord of sql injection - goblin 풀이

los의 세번째 문제 풀이입니다. 세번째 문제부터는 조금 주목해야할 점이 있습니다.

preg_match에서 추가적으로 필터링 되는 문자가 ' 와 " 가 추가되었기때문에 이전 1,2번에서 사용하던 풀이가 막히게 된 것입니다.

문제 접근

먼저 문제상황을 살펴보면

1. id= 'guest'로 지정되어있기때문에, no 조건에 대해 쿼리문을 적절히 삽입해서 admin을 얻어와야한다. 

2. no에 대한 조건을 false로 주고, id= admin 에 대한 조건을 참으로 만들어서 admin을 select한다.

3. 'admin' id를 얻어와서 solve() 를 동작시킨다

+ 필터링 문자가 추가되었기때문에 이것을 우회할 수 있는 방안이 필요하다.

<?php 
  
include "./config.php"
  
login_chk(); 
  
$db 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 = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(
$result['id']) echo "<h2>Hello {$result[id]}</h2>"
  if(
$result['id'] == 'admin'solve("goblin");
  
highlight_file(__FILE__); 
?>

 

풀이

필터링으로 인해 싱글쿼터 ' 를 사용하지 못하게 되었습니다. 이것을 우회할 수 있는 방법은 char()를 이용하는것 입니다.

admin을 아스키코드로 인코딩하면 97 100 109 105 110으로 나타낼 수 있습니다.

따라서 'admin' ==> char(97,100,109,105,110)으로 표현될 수 있습니다. 우회하는 방법을 찾았으므로 매우 문제가 간단해집니다.

문제상황에서 파악했듯이, 앞의 조건부를 무력화 시키고 id=admin 을 true로 주면 admin 계정이 select됩니다.

where id='guest' and no=??? or id=char(97,100,109,105,110)

이때 주의해야할점은 guest 계정의 no가 1이기때문에 no 값으로 1이 아닌 다른 숫자를 줘야합니다.

 

 

결과

728x90

'개인 공부 > WEB' 카테고리의 다른 글

[웹해킹] LOS 6 - (Darkelf)  (0) 2021.05.30
[웹해킹] LOS 4 - (Orc)  (0) 2021.05.30
[웹해킹] LOS 2 - (Cobolt)  (0) 2021.05.29
[웹해킹] LOS 1 - (Gremlin)  (0) 2021.05.29
[웹해킹] 1주차 리뷰  (0) 2021.05.10

댓글