易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 4|回复: 4
收起左侧

httpd 服务apache 开启目录遍历漏洞防御

[复制链接]
发表于 2024-1-11 16:48:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
httpd 服务apache 开启目录遍历漏洞防御
8 T+ X$ L8 {+ y/ `0 o9 o最近收到目录漏洞遍历防御) A4 T+ a7 `' p( g7 J
如何做
% i, k1 N/ o; C  ?3 a8 i
( V3 R' M5 w( z% n) E6 U; A- o( ^& x& b6 D7 b0 K: t7 A; J; W
/ @: i0 o0 n7 k; O% o
找到对应的httpd.conf文件- ?" T" T0 ~9 P# g5 H1 p+ e2 I1 O
修改配置:
' _1 t+ x  h+ G# f2 R<Directory "/var/www/html">
) x. d6 c1 E$ Z8 i+ {  D+ r# d  o- v5 Z: _
Options Indexes FollowSymLinks ExecCGI
8 B6 o" S+ ~5 K; |7 D& z0 \: ^5 _5 i3 }3 Y6 z* |  `
</Directory>7 g1 ]; a* d9 ]. n. G

6 e+ o4 A/ J2 Z8 Z修改成下面的方式: f! a) S  i2 a; D
<Directory "/var/www/html">* F" c5 u, f6 W4 d6 S- S
Options -Indexes +FollowSymLinks +ExecCGI6 C8 V% |+ L: e; [
</Directory>( a: b- V4 H, @3 a- }" P

& j0 _+ i, e" Y, a重启apache服务即可。
2 s  D& n7 |2 T( K* [
 楼主| 发表于 2024-1-11 16:49:14 | 显示全部楼层
访问结果如下:5 }  P5 @; e1 A; p# I* Z/ n2 r
Forbidden  Q; g* ]% a/ M/ E7 m! b
You don't have permission to access /app/ on this server.
 楼主| 发表于 2024-1-19 17:32:32 | 显示全部楼层
我们来看俩段通常对上传目录设置无权限的列子,配置如下:
% E6 k* e, c$ }1 M
' t/ |" f9 H. W1 h7 \. ?2 O代码如下:% Y/ e: q* Q+ e' r* n6 ?

) g: [% j2 Q- L, j1: m; t0 }6 {* D- a
2- z. r* b8 v6 I; G
3, B* \! o5 _( H6 u
4% F6 c/ j" V& ]  L
5
8 P$ v  k( ]% o6( e) c9 B' Q+ t7 _8 Y
<Directory "/var/www/upload">
5 ~* {. x: E6 b2 V  e) M<FilesMatch ".php">
% V( `( l8 l- R4 k+ yOrder Allow,Deny/ p% G. B; ^  p
Deny from all
5 d% s: e" d3 b8 t# n# `</FilesMatch>
5 j6 f3 {+ W8 \5 i</Directory>
: Z+ K3 o1 n: o
" O4 M3 N' x% X; k$ F2 Q5 H0 k1 F$ J. a) V
这些配置表面上看起来是没什么问题的,确实在windows下可以这么说。+ ~* |# N9 i/ R. R, b# C  B
但是linux就不同了,大家都是知道的linux操作系统是区分大小写的,这里如果换成大写后缀名*.phP一类就pass了
3 g: k$ ?: }/ B1 A, c0 ^2 v
( x& g6 E% M+ O: g1 f! _2 o6 l这里我说下我个人的解决方法,代码如下:- j$ n9 w7 i$ _5 P: S" Y+ a3 T" ?5 Y4 @

$ N' u- ^. l1 Z& B  F<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload">; a. m# h6 _# m$ o* K$ O8 l- ^
ErrorDocument 404 /404/404.html
9 ^* ?3 o& l* o( M% s' `4 \ErrorDocument 403 /404/403.html
: n, x' a8 V* A9 F<FilesMatch "\.(?i:php|php3|php4)$"> // ?是尽可能多的匹配.php的字符串,i是不区分大小写,然后冒号后面跟上正则表达式,也可以写成:<FilesMatch "\.(php|php3)$">  \& X1 ~6 z# u% f8 @  e& B0 C
Order allow,deny
8 \$ j7 C1 D% CDeny from all
" K7 j( Z4 ?4 c2 `</FilesMatch>0 w) H6 I  j2 k
</Directory>
1 A" P( R2 ]% Y6 m5 S5 q/ A
+ X$ k% B/ S6 U上面的意思就是说,<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> 内目录路径下所有php文件不区分大小写,通过order,allow,deny原则判断拒绝执行php文件,对nginx同样也是可应用的1 f* s( {* P+ e8 Q& e# u$ \% F
; r, U  i0 z) F4 F" R* e
另外一种方法,是设置在htaccess里面的,这个方法比较灵活一点,针对那些没有apapche安全操作权限的网站管理员:' {* U4 Y6 \7 a2 U  |( F
Apache环境规则内容如下:Apache执行php脚本限制 把这些规则添加到.htaccess文件中. ?9 C; p' X% L# b
代码如下:, [+ ]# I3 j) [, @3 L
- `- d) |4 i; B( B/ p! P0 R( z8 ~, d
1
% C4 @+ M& e. X8 N! x% _2
7 H' D7 w$ T& R4 F' K* G3& a: w/ m. z: ]' w- p
4
! f# ], P  x4 D' }  @9 vRewriteEngine on RewriteCond % !^$
! |- [5 ^% y8 {0 J% JRewriteRule uploads/(.*).(php)$ – [F]7 `8 Y! @3 t' Y: r5 {' z
RewriteRule data/(.*).(php)$ – [F]9 N: C. I' f3 P- `
RewriteRule templets/(.*).(php)$ –[F]
1 F: @& r4 R9 R9 V( U) S! k' x8 e1 R
1 T# w# N8 K% q8 b2 |9 T0 x8 Q( }8 R: H1 h, \9 G$ G
另外一种方法,代码如下:( l6 W: w8 D* I' U6 ~$ m: x3 o4 i

% T+ P2 D" c( O. S) w. G% o( F<Directory "/var/www/upload">! S) ?# z& ]* J3 ]- t9 V- ^' P
php_admin_flag engine off
! p' {3 x8 o! l0 H, v+ t</Directory>
3 N. W" N+ J: ~0 ~# i  t" L+ v) i9 M
此方法我在win系统下面测试失败了,重新启动apapche出现下面的错误信息:
( q" S$ C! _- OThe Apache service named reported the following error:, M7 x$ i& s: d% X) ^' K& D
>>> Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration.- J' ^8 T4 z( H" ]

8 l/ ]. A8 x" U# W这里我就不具体说明这个解决办法了,因为禁止php执行的方法,大家看自己的需求去设置就可以了!1 [$ S/ u5 k) b
, w6 W$ F8 v( i8 U- {& W
【apache配置禁止访问】
' x8 f+ y  }3 p, v1. 禁止访问某些文件/目录8 L: d, M' x) V: G! D$ m! v7 W
增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:! \/ r3 I0 b) h( k% W- Z
<Files ~ "\.inc$">
- \/ c& k- q- h$ X4 A, v   Order allow,deny
0 x- C/ s7 y7 @% ~- d   Deny from all
% j$ d) T* O, i/ {7 V</Files>% I5 k/ K0 H4 g  f$ s) z5 q$ u4 H

# Q5 y# D1 E" v5 G多个的话可以这样配置已验证过:2 a/ N5 Y: d3 i9 C' h  H$ G

" q* U0 ~/ ^8 c/ z, u0 j" H#不允许访问 .inc .txt .sql .conf扩展名的文件- W+ Y' L. u1 G8 P
<Files ~ "\.(inc|txt|sql|conf)$">/ m$ U- P) Q/ [3 r; y
Order allow,deny; ~1 ^. E. Z! I/ H
Deny from all
1 ^) B0 n4 y6 R! P- _; [% }8 [</Files>
& |0 r4 C2 _5 E" ^
4 x  D5 i( P9 ?# }) b
& S1 F/ z% m% z; X$ Q3 h1 n9 @9 ]+ i& e

) e7 D, h1 G9 }; W& {* V( \% c1 i  _禁止访问某些指定的目录:(可以用 <DirectoryMatch>   来进行正则匹配)- R# j& X  }- L: _) o: J

( f0 u8 ]; c  i. T( s<Directory ~ "^/var/www/(.+/)*[0-9]{3}"> 4 I" R0 z: p+ p$ g! x
   Order allow,deny& Z' `+ N+ o5 h/ S% ~# W6 d4 H+ W0 U
   Deny from all
- V) p3 s" h/ [+ Z5 W</Directory>3 c  {% [# ~9 S0 L
. n4 n1 q4 S6 m. E, a' Y$ V+ R
通过文件匹配来进行禁止,比如禁止所有针对图片的访问:
$ q) c! S2 O: \# q' O' _, e<FilesMatch \.(?i:gif|jpe?g|png)$>1 P5 F8 t- ]/ H8 V
   Order allow,deny9 o% T& i: O( n' B
   Deny from all
9 t1 F5 d. b- p+ y1 B- o8 ]</FilesMatch> 5 s# E9 ~. o1 e/ y

7 K- R5 o1 W* T3 P9 _! i1 ~9 d针对URL相对路径的禁止访问:
8 K: O/ P& D" X* R5 I0 P" Z<Location /dir/>
7 G& t9 I  G1 ?/ E   Order allow,deny$ A: h/ v  D2 `2 F# Z" X" ^6 _
   Deny from all
  N+ T$ x9 }7 _; |</Location> 0 B+ E( D' }" N1 H8 d* g3 s
. ^+ l/ D, @5 ?+ }5 i
针对代理方式禁止对某些目标的访问(<ProxyMatch> 可以用来正则匹配),比如拒绝通过代理访问cnn.com:1 e( s  p; A" `" l& G! z2 E
<Proxy http://cnn.com/*>
, u; R% k9 J2 d# B# u   Order allow,deny
+ a2 t0 ~* x* L   Deny from all
1 ?: g  P& v( S' X</Proxy>
/ k! L0 p: |! u* K
2 d. B+ R1 F" U2. 禁止某些IP访问/只允许某些IP访问 ( \2 H$ j. C5 {7 J0 G
如果要控制禁止某些非法IP访问,在Directory选项控制:, i* r$ d7 E, I  S
<Directory "/var/www/web/">
1 |. F7 D: q7 P: c. K9 ~$ S   Order allow,deny  J* @+ b8 [1 W: @
   Allow from all
. Z- h4 o, I- u! h   Deny from 10.0.0.1 #阻止一个IP2 b: T5 p0 G9 V! S1 ?$ \
   Deny from 192.168.0.0/24 #阻止一个IP段
9 f1 d3 D0 x3 T! B0 K7 e2 P</Directory>
( E* ?* \3 j1 \1 }  `- n+ `  R/ ?0 L' N
只允许某些IP访问,适合比如就允许内部或者合作公司访问:
( i! l% n) f7 _* N( A+ g7 u- h<Directory "/var/www/web/">
$ `1 R/ @) n/ G   Order deny,allow
) s' y% {  w% e. B- r$ a3 C/ |8 z   Deny from all4 U' ^( w$ D& I1 [; |
   All from example.com #允许某个域名8 U4 S5 W) I7 W( p
   All from 10.0.0.1 #允许一个iP* m  V& I* _( N0 \' j' L
   All from 10.0.0.1 10.0.0.2 #允许多个iP
- B; l1 m7 I- v( b0 _   Allow from 10.1.0.0/255.255.0.0 #允许一个IP段,掩码对
" V! l' U2 _, P! i5 b& z6 H3 y7 y   All from 10.0.1 192.168 #允许一个IP段,后面不填写* ^8 z) ]9 @: N3 T6 ~' e
   All from 192.168.0.0/24 #允许一个IP段,网络号8 C  b) [' U% N, B4 o
</Directory>
: _' `) l- }! f( E5 f" ?! A0 s% W( I7 }  `

% Z7 [. `5 K5 m) I6 Y5 y5 SApache:解决办法;2 [" X3 A( N: r3 E/ w2 y" w
<Directory "/home/domain/public_html">, ?0 E. _  R5 }
Options -Indexes FollowSymLinks, j0 B/ Q" ~2 q; E  L0 E
AllowOverride All2 P8 z! ^6 i+ L- }
<Files ~ ".txt">
. X: ~# ^  a- q4 K! K* g5 q' uOrder allow,deny0 S1 E; v/ |4 A7 s0 M+ C& ?1 r
Deny from all$ F* A. I( z9 k1 l% ?' D$ [! o
</Files>
: _! v. b0 a" e4 H1 S1 i  A5 i</Directory>
 楼主| 发表于 2024-1-19 18:01:42 | 显示全部楼层
一、默认情况,如果apache指定的目录没有下面项配置的“index.php index.html index.htm”文件之一,则appache会显示目录及目录下的所有文件:
% v) J" d6 y3 @% u3 o
) B/ e& ~0 x# }- Q2 Q<IfModule dir_module> 2 L2 d1 J+ z5 H
    DirectoryIndex index.php index.html index.htm / K; D! j1 p$ n/ \+ v
</IfModule>
  Z+ i# g- O& ~二、在apache目录文件下找到httpd.conf文件找到如图所示Options Indexes FollowSymLinks将此句改成Options -Indexes或者去掉indexes即可
! K) d0 Z3 \  {. N- ?- {! V7 j! y9 k1 W, g# M, Q6 f) Q1 c
8 }+ p) k" v! W1 b% R

8 x2 k3 e! Q$ ]三、其他访问配置(禁止访问某些文件/目录)
; |! \: ]5 f. S6 n; x% E# }% v2 `# \! L% k- k8 k  ~3 k
增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:
0 e& U9 ?  s) @, ]; u/ e/ W/ V
& a+ V, U& K* b3 G. _$ x/ A- t<Files ~ “.inc$”>5 U9 i0 ?4 q$ D8 {6 ^) `: w* A
     Order allow,deny& y0 M! z: E4 {" o9 G1 z
     Deny from all
7 E! z; e# ?. \</Files>
/ k& z7 o9 i0 ^. k0 C& K0 e, ^+ {禁止访问某些指定的目录:(可以用 <DirectoryMatch>   来进行正则匹配)
- j5 A& {# k( g8 b7 `5 y! g  V
. X& R- U! Q. y) X+ W! R. m$ A& }<Directory ~ “^/var/www/(.+/)*[0-9]{3}”>8 `* G9 K# r1 q: j$ L, s$ Y
     Order allow,deny: ?- r$ m' ?9 z7 `
     Deny from all* s! R& {5 j* [" j/ g
</Directory>
4 E1 b, a. g$ b8 A通过文件匹配来进行禁止,比如禁止所有针对图片的访问:
/ q) H! ^; u* G* C* {6 ~
- l* H& B" g3 m4 r% Z<FilesMatch .(?i:gif|jpeg|png)$>
  l- }, m8 o9 q0 {* B4 H     Order allow,deny
6 |( @) i2 r2 ^. E. X     Deny from all
8 C. Z& Z( |! |: E* e+ n. z</FilesMatch>. v, B/ D$ ]4 m& x) R3 C6 v. Q
针对URL相对路径的禁止访问:% d7 A' L$ O( A) L+ Y4 R

3 S0 s+ X. d, ^( J7 \" w& V<Location /dir/>4 A/ a% j3 |* R# c, ^- b4 C- ]+ L" g
     Order allow,deny; S$ N/ p2 o! k3 @" n
     Deny from all
* |) f0 N- y- P% f</Location>' y; w" N+ l% O$ T# M

. h6 `" u9 A; U/ `6 e
 楼主| 发表于 2024-1-19 18:02:13 | 显示全部楼层
在Apache中配置禁止目录访问,即禁止游览列出的目录/文件列表的方法
+ Y4 h3 k5 s5 m7 j+ p/ e6 {# u
  访问网站目录时Apache默认配置为可列出目录/文件列表,即当你访问http://localhost时会列出相关的目录和文件列表,我们可以通过修改Apache配置文件httpd.conf来实现禁止列出目录/文件列表,方法如下:5 K) r  ]2 o; d3 `/ w* R
$ _# U( q* e7 }
1、打开apache配置文件httpd.conf# m- {. E- i3 F) c3 b" m$ Z
0 k# W4 I3 y- S0 A1 |
2、找到
+ J* Y/ h: y! V( \  t& e( h& \* }' m& c* T2 O9 k( q2 Y* R7 T8 S
; ]6 p* s! x% v/ F

4 Q- p, v' m; A$ s! L7 ?<Directory />
( }; \) j3 M# G" L; U( YOptions Indexes9 [1 T& Q, u, v& n
AllowOverride None! O2 c- u( M2 Z- j. K2 g& Z# a3 S, ]
Order allow,deny! u) [! P# X# H" e# M2 E& t
Allow from all
  ~8 Z: ^; g; {4 w& Q, {  }</Directory>
4 ^+ Z1 N0 e3 g4 R; Y$ C* {- `% [) b+ j/ h
只需要修改Options Indexes为Options None即可,注:根据PHP运行环境安装包的不同,Options Indexes也有可能是Options Indexes FollowSymLinks,一并改为Options None即可。: S, h& q- j9 J$ J: m: S
) A- v* q8 ^! k6 ^
3、保存httpd.conf,并重启Apache即可,此时再访问http://localhost时, 报apache http 403 禁止访问错误信息' ?9 {) |* a0 p

" k9 K# M% F; I/ n+ B( Y  Forbidden
& R6 l. D/ V" a* }) m
% R. A, p& I$ h8 D( Y  You don’t have permission to access / on this server.
' B+ Z- s& b; q1 c( s; g' E* G2 E0 j% p  }7 o1 G8 b
Apache单个或多个目录禁止访问方法
, H7 }. ?' l: V2 C" v: o, C# c; Y4 t$ X/ ^7 N3 C% d
  这种方法通常用来禁止访问者访问后台管理目录或者程序目录,方法如下' D3 h. o/ y8 ?  r4 K, V# [
: F9 q! \* B9 H  V: l" @; s5 x
1、打开apache配置文件httpd.conf
0 r7 L( e  w: M3 d5 e) d/ e& m0 v* Q" n$ o: q7 `; Y  F5 h1 d
2、创建Directory块,比如禁止访问某个类库目录,可以这样实现
, Z# W" H1 ?+ K  h" d  O" I: n. D7 W! T& ?
9 L) E7 h5 g/ x% W. j4 O8 D

% v1 e* }+ E" q* |7 S  s; F<Directory /var/www/www.leapsoul.cn/inc>! f$ S$ F1 t0 q+ r. C
    Order Deny,Allow
2 s+ E; C: H9 m4 k0 A  ]2 J- L    Deny from all8 Z. ?6 v3 S% v$ q( l' P
</Directory>
) w3 d- s' ^. w4 K, p$ b- N. _0 d' Y  `: S, Q' I; z4 I3 B
上述代码实现了禁止所有用户访问www.leapsoul.cn下inc目录的功能。如要实现禁止访问所有目录中inc目录的功能,只要将
% b- [# F9 z( e( s/ H$ H$ E* }& {! J' i; R" D, S3 U$ M# N
0 G; k6 f" N* Y
8 O+ O6 m8 I7 ~7 g' r# y4 \
<Directory /var/www/www.leapsoul.cn/inc>
$ N" e; i# X0 b5 q6 v7 m+ L
+ a) f3 L, z; Y+ m6 w更改为5 [# J0 ]2 i' {# [5 J) K$ Y

* O) e5 @" r* s5 I! H
& B+ T4 t8 `3 N( p/ I0 J) q
1 ^, s+ H& T& d<Directory /var/www/www.leapsoul.cn/*/inc>
; y: L, C/ O$ L
8 b+ }5 B! O' o7 p即可。
1 l- E9 l. K+ r) `( @& p  R: O% X) ?( C
3、重启Apache服务器。
: |8 f: z0 ?* }4 E' D8 ?1 @7 Q  _( Z
其他说明
9 K- i; D  M7 V' B" |+ P0 d. r/ i; |% u  z
1、只允许或禁止某个域名进行目录访问
! k& s( O1 w* v( u8 E& e! g6 r% @
# j. ~  y- g* T3 f4 }( W( t4 S6 ~# _9 W" n" J( Z. f" q, I
1 N: l, W# |+ i* M
<Directory /var/www/www.leapsoul.cn/inc>" X5 k" Q7 t9 w
    Order Deny,Allow
: Z. d. s* i' ~: y    Deny from abc.com1 i/ }% a  j( J9 _* o# P. l
    Allow from apache.org
/ ~( d6 h4 }: T" E9 x</Directory>
" x, X3 U$ F: c9 |, w+ b) D# E1 w  J) C; l$ [
上述代码实现禁止abc.com域中主机访问inc目录,允许apache.org域中主机访问inc目录的功能。
- n$ x  _, X1 e/ H% I2 q, m' P9 W
3 e% [! \8 ~$ v9 b/ e8 E2、只允许或禁止某个IP进行目录访问" h. a5 @0 j6 f$ n8 B

8 L( G9 [- D$ ^
, G' F  U) ~2 M* l; c7 S
9 k6 i) B. n' R6 d$ I$ A: ^6 t<Directory /var/www/www.leapsoul.cn/inc>
# n& Z: f2 F( m1 ~) `8 W    Order Deny,Allow- r0 X% w# _6 _5 H" n3 N$ E+ E' O
    Deny from 10.1.1.2, l5 K. u- B2 F) c3 ^
    Allow from 192.168.1.0/255.255.255.0
% w1 C1 u9 f2 P</Directory>, D" F# D3 U4 c$ I% E
# {# @3 t1 ]9 @0 L; @: }  \
上述代码实现禁止IP10.1.1.2访问www.leapsoul.cn/inc目录,允许IP192.168.1子网中的主机访问www.leapsoul.cn/inc目录的功能。: {# e  a$ N, U  G/ h. s$ n; w' S( k- w

* K) k1 h9 Z2 G9 P/ M6 j注意:Allow from 192.168.1.0/255.255.255.0等同于Allow from 192.168.1或Allow from 192.168.1.0/24
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:29 , Processed in 0.051408 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表