1. 공격 유형 : Sql Injection
2. 취약점 환경 : 파라미터('val')의 값을 조작하여 Sql Injection 수행
3. Write Up
ㅇ 코드 해석
- $go 변수에 $_GET['val'] 파라미터 저장
- $go 변수에 2, -, +, from, _, =, \s, *, \ 등의 문자열 존재 시 Access Denied! 발생
- $db 변수에 dbconnet() 함수 선언
- $rand 변수에 rand 함수를 적용한 1~5의 랜덤 값 선언
- $rand 변수에 입력된 값에 따라 조건문 실행
- if($rand==1~5) { $result = mysqli_query($db, "select lv from chall7 where lv=($go)") or die ("nice try!!");
- $data에 mysqli_fetch_array($result) 문으로 데이터 값 저장
- $data[0] == 1일 경우 Access_Denied! 출력
- $data[0] == 2일 경우 Hello admin 출력 후 Solve(7) 수행
ㅇ Solve 조건 : $data [0]이 2 값을 저장해야 Solve(7) 수행
ㅇ 공격 포인트
- 사용불가 문자열 : 2, -, +, from, _, =, \s, *, \
ㅇ 공격 시도
- val 값에 2 삽입
- val 값에 8%3 삽입 (8/3의 나머지 값 = 2_필터링 우회)
- 2가 DB에 존재하지 않는다면 강제로 2 값을 DB에서 출력하게 해야 함 (Union Select 수행)
- 결국 val 파라메터 값에 DB 내에 존재하지 않는 값을 넣고 우리가 원하는 2가 되는 값을 union select 문제 삽입해야 함
- 소스코드를 보면 $go 값은 랜덤하게 ($go), (($go))... 등으로 씌워져있음
- 공격코드 "select lv from chall7 where lv=(0)union(select(8%3)" or die("nice try!");
'2. Information Security > 3. War Game' 카테고리의 다른 글
웹해킹 10번 (webhacking.kr old 10) (0) | 2019.11.01 |
---|---|
웹해킹 9번 (webhacking.kr old 9) (0) | 2019.10.30 |
웹해킹 8번 (webhacking old 8) (0) | 2019.10.20 |
웹해킹 6번 (webhacking old 6) (0) | 2019.10.20 |
웹해킹 1번 (webhacking old 1) (0) | 2019.10.20 |
댓글