- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
|
6、跨站点脚本攻击的例子 8 O6 p3 V S5 @1 B% m. ?0 J" Q7 ~
# \! g! R! t3 \" v
修改的报头: 8 | x6 B2 w! @5 n6 Y7 w, ` B) V
以下是你的日志文件中可能出现的内容。 % s1 t% A4 Z5 \$ `9 P3 H
- Z! ?8 I% }5 h* C; _% C
x.x.x.x - - [10/Dec/2001:09:03:39 -0500] "GET / HTTP/1.1" 200 10453 "http://www.cgisecurity.com" "Mozilla/4.0 1 u! j& \+ {; S! O z( s6 a
(compatible; MSIE 5.5; Windows NT 5.0; T312461)" 5 ]# H; P: \6 Q0 V
! f2 k# a1 H+ l8 @6 T
让我们来看看该日志的第11和12域。 ; A4 F; `; j. c8 [& F" H
We are going to look at the 11th and 12th field in this log. " C% l# S4 |1 U
3 E, B- Q% M. O$ s11th "http://www.cgisecurity.com" 引用域 ! x! l/ w9 A. J& j4 z
12th "Mozilla/4.0" 用户代理域 & m" Y: \, J" J( g5 e
9 s* q C2 G; e. }这些域都是由你的浏览器自动填写的。如果我在www.hosta.com有一个指向我的站点的连接并点击它的话我的浏览器会保存该信息并将其转到我的站点来。该信息被称为引用域。引用域是由你的浏览器自动填写,也就是说该信息是由客户机,而表示服务器提供的。也就是说该信息是“用户输入”的。由于该信息是用户输入,所以我们可以将其修改为任何我们想要的内容。 / g3 ^' `7 P$ I6 {
危险在于某些软件会从你的日志中读取值并显示出来。(例如显示网络服务器状态的软件)某些软件并不会很好的过滤掉元字符所以有可能出现代码插入的情况。
' |8 J" u% M) |/ l# j! \( c& ?% d: h9 Y3 }2 R. ^
例:
" q! G9 O i$ g0 h8 N6 H2 m. M# L' [5 E. `# ]& X
su-2.05# telnet localhost 80
& `0 D2 O0 ]5 G- u' sTrying 127.0.0.1... 9 B" x8 ^. r2 P# T
Connected to localhost. 6 c, l2 c* L+ p2 b% Y3 w
Escape character is '^]'. $ @* O9 J3 G+ e+ `; q, K! r t
GET / HTTP/1.0 " D; t. y0 N8 j; {* h2 O9 Q+ U; |
Referer: < javascript-that-is-evil-so-there's-no-need-for-examples>
m2 m. L L8 W" Z3 qUser-Agent: * ~' p, @; h: D; a) B
4 v+ K" }% H# s7 \- q% g
如果用户访问该页面并且引用部分被输出的话那么那么攻击者就有可能盗取用户的cookies。如果你觉得你所运行的软件存在这种风险的话你就应当定期对你的apache日志中的这个域进行检查。
/ r$ R3 K$ Q. x+ r. _4 b- `3 G- h5 g# @& N
有一种用于修改http报头的工具叫做"Websleuth"值得一试。 # N- B0 |1 G2 @! ]1 I$ q P
$ p l: m8 E% \ A, U/ L( H& Z更多的编码方式: 9 G P0 P" U) p( ~7 Q$ b
8 X0 z4 l7 C* Q* b) g6 p这一章包括了攻击者或者是蠕虫用来逃避检查的编码手段。包括十六进制, Unicode,还有windows %u编码。这并不是一个什么"how to"的介绍,而是告诉你你应当在你的日志中检查哪些内容。
L. w5 s9 F( X+ _+ _1 d4 ^, G, G
A.十六进制编码: ! K% l! s0 P7 L* h4 ?( s! e0 a
5 e0 f7 m, f7 d1 G. o
例如: %xx 6 C" i: w6 {0 j/ ?$ F
: Z7 C& w. `+ s5 a F3 U
上一篇文章中提到的字符的十六进制的值。如果你在任何日志文件中发现了这些字符的话那么很大的可能性是一个攻击者正在掩盖他的请求,甚至是正尝试饶过IDS。 ! Y& F) v9 }) c* q, l5 @
1 [# q. G( U, ^% C, }( t, g, X这两篇文章中提到的字符的十六进制值。
7 k. i* ]4 v5 M3 m( l. V: w
: W* X, |8 ?9 F" L) d1 L, |%2e = . (例如: .. 请求) - Q: `% x6 n) c
%3e = > (例如: Html/javascript/SSI 插入。在上一篇文章中做了描述)
1 f0 T0 T2 V6 @%3c = < (例如: Html/javascript/SSI 插入。在上一篇文章中做了描述)
/ ^+ j3 o! f3 r6 T \%2a = * (在这篇文章的第二章有举例介绍) : C8 y: y* R; \; Z* h: q
%2b = + (例如: _cmd_.exe 后门请求。同样作为空格使用)
6 J r+ J" q/ e l6 h, J%60 = ` (在上一篇文章中有命令执行的例子)
4 D! R% F2 W' _6 O% P' w%21 = ! (例如: SSI 插入。在上一篇文章中做了描述) 1 h8 b% I% L) x P
%7c = | (例如: 命令执行。在上一篇文章中做了描述) ( \& } w; r- h: Z0 \, r
%3b = ; (例如: 命令执行。在上一篇文章中做了描述)
1 W' G4 U' [8 B3 x" [2 @%7e = ~ (在这篇文章的第二章有举例介绍)
4 W. G6 a& C( W/ N0 L* K# B' X%3f = ? (例如: Php/在上一篇文章中做了描述)
- s$ U3 M' d( t9 {# `" K2 P%5c = \ (例如: 可能是编码的对Windows的目录遍历尝试) / E- a+ u C$ a+ W6 N! |' |6 [
%2f = / (例如: 可能是编码的对Windows的目录遍历尝试) C4 L/ n0 |7 E$ G- p+ b0 i
%7b = { (例如: 可能是后门/目录上传尝试,也可能是命令的变元)
% s, }5 z) h, {9 m7 U%7d = } (例如: 可能是后门/目录上传尝试,也可能是命令的变元) $ e2 p) J H/ \. K( \
%28 = ( (例如: 可能是跨站点脚本攻击尝试)
) L' x% M |0 ?$ }0 F%29 = ) (例如: 可能是跨站点脚本攻击尝试)
- P- X) g% H( j- Q; F%5b = [ (例如: 可能是后门/目录上传尝试,也可能是命令的变元) ' i% C) D7 U1 C5 X A- k2 {3 a
%5d = ] (例如: 可能是后门/目录上传尝试,也可能是命令的变元) 6 @/ \( U! u2 p9 F
%5e = ^ (例如: 可能是后门/目录上传尝试,也可能是命令的变元) ' a& z, v" Q5 z
/ E7 ?' c( B/ D* J" i2 `* Z! C要获得这些字符的完整列表在Unix环境中键入"man ascii"。
+ T; |# G; I1 Y! E下面是尝试获得服务器密码文件的目录遍历请求。
4 t6 z$ b4 i A! B3 n3 A6 `; c. q+ y9 ~! k d8 x6 \, @& J
例子1:
" [1 M! U' ?; J/ i% m0 T. _# v
: e3 x% _) u; j0 \http://host/script.ext?template=%2e%2e%2f%2e%2e%2f%2e%2e%2f%65%74%63%2f%70%61%73%73%77%64
, M0 a }' r8 m7 A. J8 y: t q/ ]0 j
# H" ]% s5 ^3 L8 L# f( Q该请求是由以下部分组成的:
/ X) @. X3 y t+ Q4 A- Z6 z+ u; |4 V0 a- @; [
1. %2e%2e%2f%2e%2e%2f%2e%2e%2f = ../../../
# B5 e* j+ s% O" W1 i
* n; R, u. S5 V- U9 ?4 E2. %65%74%63 = etc
9 H5 ^$ O; _+ d2 X1 e3 [
* \' ]3 R A$ X9 |) _3. %2f = / , G3 b: D4 Y. @8 j% F
, K0 C& g& N; x8 F6 h
4. %70%61%73%73%77%64 = passwd
2 `) g, U' B' {( A. \
* _& A2 w! a3 }' | F将这些连起来就可以欺骗IDS产品。
) i7 ]+ Y i8 ~3 k8 G. U类似rain.forrest.puppies "Whisker"就是使用这种技术来避开检查的。 : y8 b7 ^: L8 N/ F
1 p7 M2 o! W+ }6 g8 _. m% h0 p0 [
0 _& E/ [( m- o" `0 ^3 M4 m U" DB.Unicode编码:
! `' p, J' {; A* M$ U" G( I; d7 {& Z' D7 u
例如: %xx%xx
' `. Z, C5 j; U( L7 s6 i6 I/ q# w' Z$ Y% R- Z' ^
目前所有与安全有关的人员都对这种编码方式有所耳闻。著名使用这种编码方式的IIS的利用就提供了严格很好的例子。 $ `! L8 F/ ?* \. U) a
2 z7 S, b: `1 R* http://127.0.0.1/scripts/..%c0%af../winnt/system32/_cmd_.exe?+/c+dir+c: + x+ z# u* |# v* p1 t: z( [
因为相关的文档已经大量的存在了,所以我不会对这种编码技术做进一步的讨论。想获得有关unicode的信息请访问以下连接 9 w4 q% W7 g1 f8 O3 x
http://www.ietf.org/rfc/rfc2279.txt
% Y* f7 W; A5 G5 @1 P
+ N8 [5 }' x p: BC. "%u"编码请求: $ o) S' N! t- Y1 m4 E
6 z# a2 M2 Q* T, m, R% q例如: %uxxxx
Q% d* ~5 W0 C4 f
, j; `+ H2 T" \1 G j% M9 q这种编码方式是被微软的IIS网络服务器所使用的。通过使用这种微软特有的编码方式攻击者就有可能入侵IDS产品。以下就是蠕虫或者是攻击者使用或不使用%u编码来对存在漏洞的系统进行攻击的例子。 3 ^3 I/ I1 N! z) k& U! ?( I( T5 t
$ i4 f% _# u! Xhttp://host/lame.asp?asp=a.txt
& S) `3 @5 _. y+ g& m w2 T/ y) J% h( X0 P! ~; ?7 v! `# Z5 u, z4 \
这个请求是企图使用lame.asp读"a.txt"文件. % A. L$ o, b/ Y# M
' q- D: B6 \( p! @* q2 ehttp://host/lame.asp?asp=%u0061.txt 4 u0 K# D& E9 x+ w' S
* Z0 q$ x$ O' q$ R/ `3 E这种请求通过使用"%u"微软编码请求来达到同样的目的。尽管你在手工浏览日志的情况下可能会发现这种情况,但是你的IDS有可能会漏掉这种情况并让攻击者可以继续进行侵害。这种编码方式同样可以与普通的ASCII字符一同使用,这样一些IDS产品就不会检测到这种请求。 & h- O2 X7 F* b5 {+ n+ `
: Y# o5 o/ K6 ]. L; k
你可以访问以下地址来获得编码手段的进一步信息。
" h* K, ^4 L, P& r! Ohttp://www.eeye.com/html/Research/Advisories/AD20010705.html# u* d* p* K/ p ~# F8 Y; H' O* t
! ?2 q; E/ u1 N1 N2 S
403拒绝访问错误
; R+ U' Y# @, z3 O
8 I! d" m& h- _9 U该错误会在有人访问你标记为非完全可读属性文件的时候产生。一些情况下是网络管理员可能忘记将一个文件的属性定为可读的。更多的情况是当一个文件被标记为非完全可读(例如密码文件),而某些人却对其进行请求的时候就会出现警报,你应当删除或者转移该文件并对日志进行进一步的检查。
b' s7 z" w) p" M; o
+ t' |$ ~) l! t7 J# p, }! Q) `
! V4 `* x, z. Q7 A! S6 q[Wed Feb 20 10:23:33 2002] [error] [client 192.168.1.1] (13)Permission denied: file permissions deny server 3 f: u/ N4 G/ ]4 O/ f4 F, X
access: /some/path/htdocs/secret/apache-unreleased-overflow.c
* O; M! n& }: n(你的error_log中可能会出现的消息)
0 o9 a1 O2 r3 G- [6 o& F7 t4 C" q! y2 o; v! H
|-- 403 Code
" v. \/ l0 g* C& k# I192.168.1.1 - - [20/Feb/2002:10:23:33 -0500] "GET /secret/apache-unreleased-overflow.c HTTP/1.0" 403 206
; p& V8 j/ A% z" q0 z$ i(你的error_log中可能会出现的消息)
8 L% b e: h& Z' a/ R. F+ m, ^; w9 f9 P4 i* v5 g% L1 Y0 z
404 该页没有找到错误
# C4 \1 _2 y4 Z! T) l/ D
8 K2 s3 q' r" b) V. o7 ?如果你运行一个大或者只是中等规模的网站的话其他人可能会从其他的站点直接与你站点上的某些内容进行连接。一定的时间过去以后可能许多文件有了一些变化所以那些老的对文件的引用已经失效了。你可以在access_log或者error_log文件中对这些信息进行查询。某些时候对无效的或者是过期文件的请求可以让你发现那些你对文件的命名错误或者有人正在进行的刺探行为。IDS并不会对大多数的404错误进行记录,因为这类的错误信息并不是并不表示直接威胁的出现。如果对所有的404代码都进行检验的话那将是一场噩梦,因为404是站点所遇到的最普遍的错误并且在百分之99.99的情况下都并不是攻击或者刺探。而IDS软件会对这些错误请求中出现的文件名进行检查,我在下面会列举出一些这类的文件名。 % r3 h' M8 y; j, `
. U) j t2 C, m1 _! J$ x以下是的日志是由于某人对我的网站进行扫描寻找FORMail cgi脚本而产生的。FORMail存在许多安全问题,并且目前发现被广泛的利用来发送垃圾邮件。
5 E( m4 ~' Z% o/ d( i9 {0 ?# {4 @" u: Y. R
[Wed Feb 20 10:30:42 2002] [error] [client 192.168.2.2] script not found or unable to stat: /usr/local/apache/
5 `/ s8 _" n8 K& Ecgi-bin/FORMail.pl
+ t/ e6 \. F- j0 s; e(你的error_log中可能出现类似的信息) . m1 n. n' j# U7 H3 L
5 q0 V/ \5 L4 y( d u1 s6 L
|-- 404 Code
: x% f. R `1 H4 g& D, }2 b192.168.2.2 - - [20/Feb/2002:10:30:42 -0500] "GET /cgi-bin/FORMail.pl HTTP/1.0" 404 3683 "-" "Mozilla/4.78 [en
8 W4 A# U; m+ v! ?0 j] (Win98; U)" 5 V6 e# r: B6 x; S; W" f6 Q
"Mozilla/4.78 [en] (Win98; U)" 0 r" h; |2 d, Q! B/ i8 {; K
(你的access_log中可能出现类似的信息) 3 @8 A" @5 z% ]7 |0 u1 ?
|& A- D) V! T' T7 I/ A
% J& |+ ~" N' P. S+ d这是某人正在对你的机器或者子网进行扫描来寻找安全漏洞而产生的警告。但是很显然如果在你的日志中出现了404代码的话并不意味着你正在被攻击。仔细的查看你的日志找出那些连接错误的文件,同时也查找那些有异常情况的文件请求。
! e) D2 @0 ^% I
# @. u7 z& \( V h以下是另一个查看目标主机是否存在Nimda以及著名的红色代码留下的后门的请求。 * u' \7 n i3 N; F
) X: h8 N! E1 ?, H) B: `! l[Tue Dec 18 05:11:04 2001] [error] [client 192.168.3.3] File does not exist: /usr/local/apache/htdocs/MSADC/ro , g8 E$ g- m5 H0 V3 |" I
ot.exe * N- w2 b! V' v% p* u" z
(你的error_log中可能出现类似的信息)
) L0 V) ^# \& c' m; g" \$ ]# J
X/ j# A8 J+ K& y: N. [& X|--- 404 code 4 [0 U2 G2 a: x- Q
$ i& ^: _1 j; P( u192.168.3.3 - - [18/Dec/2001:05:11:04 +0000] "GET /MSADC/root.exe?/c+dir HTTP/1.0" 404 3147
+ O. c' f; X) V* O5 |& Q' ^(你的access_log中可能出现类似的信息)
3 y! A/ d( {4 |; M0 h* s- o. L9 a8 v& S; {+ q
一般情况下人们都想对这些文件进行扫描以轻易的获得一台存在后门的机器。由此他们就可以完全的控制你运行IIS的主机。
/ H( J/ g- `" y \; V
3 E4 o2 Y! V, R! t# d500 服务器错误
4 k4 W0 Y' X7 N o/ E
( p! H7 l# Z+ Z6 e2 m9 M某些时候攻击者想对可以执行命令或者有远程文件读取功能的软件进行测试的时候他们会插入一些字符(正如以上所说的那样)来达到目的。而有些时候脚本不能够处理这些额外信息而非正常退出了。这就会在你的日志中留下服务器错误(500代码)。但并不是所有的500代码都表示攻击者正在对你进行扫描。一般来讲用户上传了脚本但是并没有针对特定的系统进行配置的话就会产生该错误。 + d" J1 I9 z: H$ F# @2 u# Y
- N/ T/ N1 Q* e. K
以下是一个例子
8 ?! V2 S2 u* G2 p+ K; Z9 P8 M) G5 u
|--- 500 Code % Z# G' r6 H" J( ?3 R- P! h; H U
192.168.4.4 - - [18/Dec/2001:05:11:04 +0000] "GET /cgi-bin/port80.cgi HTTP/1.0" 500 529 "-"
; P$ z/ p* q4 j7 E3 a"Mozilla/4.78 [en] (Win98; U)" 4 k0 K. B" Q; n% ?
(access_log)
0 z1 I' x4 ~' ^& h8 l
1 y1 K6 D: T: n2 B) f: h! ?[Thu Dec 13 15:30:23 2001] [error] [client 192.168.4.4] Premature end of script headers:
$ g! N2 q& |& B; d2 U" ~/usr/local/apache/cgi-bin/port80.cgi 7 s( ?8 k5 L9 _! e3 q* K, K& ?
(error_log)
/ y2 K8 L* c4 p+ k p
$ e: I2 o! |9 `Depending on what exactly the attacker is attempting to do, will determine exactly what 7 o6 t2 K/ ~) i9 X& h5 I- F2 E% `
the reason will be in your error_log. 7 h0 Y5 j- Z4 x7 V: J2 c C2 C. w
7 y0 q% q5 h3 m2 S- kHtaccess error codes
" x- u/ `3 }4 n6 k6 u* y% X, w/ B: q) X
并不是所有的错误消息都是由于有人正在对你的系统进行攻击所产生的。更多的情况只是例如用户使用了错误的用户名或者密码这种简单的情况所产生的饿。从另一方面来说也有可能是攻击者运行例如“WWWhack”这样的程序来暴力破解密码以获得须授权区域的访问路径。以下是一个例子: - S8 \ M. b! ^3 _( P
' p) u {# U/ E2 i+ Y! G, |192.168.5.5 - miked [30/Jan/2002:13:37:26 -0500] "GET /secret HTTP/1.0" 401 397 "-" "Mozilla/4.78 [en]C-CCK-MCD sn " e$ d; B/ A4 M9 J3 S
apN45b1 (Win98; U)" & N3 d9 w4 ? L# P) c" x
(你的access_log中可能出现类似的信息)
1 B$ k+ C! E% M6 B" V% w. g. s- B/ I" _$ m8 H( N
[Wed Jan 30 13:37:26 2002] [error] [client 192.168.5.5] user miked: authentication failure for "/secret": password mismatch 6 P0 Z; j$ [9 A" m# R$ }+ W
(你的error_log中可能出现类似的信息) 8 l) B4 X3 m3 P7 P! e1 X( h( [1 U
' {0 G/ n8 E5 s' i2 F% f8 R
这显示了来自192.158.5.5的以miked作为用户名的登录尝试失败。如果你发现了来自同一个IP地址的大量失败请求的话,那么有很大的可能有人正在对你的密码进行暴力破解。尝试的次数在1-40的范围内可能是有人忘记了自己的密码。还有一种情况是如果一个IP地址正尝试用不存在的帐户或者多个用户名登录的话那么也是某人正在进行破解。
. f0 h+ U5 P4 R" k* t" a1 X6 a# `5 }( f
为 了防止攻击者通过80端口入侵你的系统,你需要一套能够防御住80端口攻击的安全攻击。现阶段世界上唯一优秀的预防通过80端口攻击系统的安全软件就是四川安盟科技有限公司的S-web 2.0入侵防御系统。它在WEB端口上加载了一个应用级防火墙,结合基于主机的入侵检测系统,能强有力的保护WEB端口,还能抵御住未知攻击手段对系统的攻击。 |
|