sql injection 문제
소스는 다음과 같다.
$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 |