profile image

L o a d i n g . . .

article thumbnail image
Published 2021. 5. 4. 00:00

sql injection 문제

 

문제 화면 접속

 

source code

소스는 다음과 같다.

 

$go 변수에 $_GET[‘val’] 파라미터 저장

$go 변수에 2, -, +, from, _, =, \s, *, \ 등의 문자열 존재 Access Denied! 발생

$rand 변수에 rand 함수를 적용한 1~5의 랜덤 값 선언

$rand 변수에 입력된 값에 따라 조건문 실행 

$data mysqli_fetch_array($result) 문으로 데이터 저장

$data[0] == 1 경우 Access_Denied! 출력

$data[0] == 2 경우 Hello admin 출력 Solve(7) 수행

$data [0] 2 값을 저장해야 Solve(7) 수행

 

 

 

UNION을 이용해 앞의 쿼리문을 거짓으로 만들고 뒤의 쿼리문을 참으로 만들어서 풀 것이다.

where절 뒤 없는 데이터를 삽입하고 union문에 원하는 데이터 입력 시 해당 데이터를 출력하는 DB 쿼리를 확인할 수 있다. (union은 합집합으로 두개의 select 구문의 경우를 포함)

 

이때 띄어쓰기가 안된다. 정규표현식이 공백(\s)을 막고 있으므로 괄호를 사용해야 할 듯하다.

 

Val 값에 2를 삽입하려 했으나 필터링이 되서 안된다.

(정규표현식이 사칙연산과 2를 막고 있으므로 2를 직접적으로 입력하지 못함.)

 

"select lv from chall7 where lv=(0)union(select(8%3)" or die("nice try!");

다음과 같이 공격코드를 작성함.

 

rand 경우의 수가 5이기 때문에 몇 번 실행하다보면 된다!

 

 

성공!

 

'Wargame > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] 10번  (0) 2021.05.04
[Webhacking.kr] 8번  (0) 2021.05.04
[Webhacking.kr] 6번  (0) 2021.05.03
[Webhacking.kr] 5번  (0) 2021.05.03
[Webhacking.kr] 4번  (0) 2021.05.03
복사했습니다!