易陆发现互联网技术论坛

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

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

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

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

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

x
httpd 服务apache 开启目录遍历漏洞防御
$ O6 |2 R& z/ c/ z- i最近收到目录漏洞遍历防御
( E' j$ p' f  x6 W- h如何做
) n: v* M& T3 C# y/ m% E$ A* u3 M- s1 E4 b. G1 R& |# [5 P# [
" g7 D: D% J* `5 N$ `/ A$ N
7 |2 c4 n( l3 Y  F" L5 j, w
找到对应的httpd.conf文件, Z# X& p6 H: ~, ]0 N# s
修改配置:
) O( {/ W8 T8 l  W$ j. Y+ U<Directory "/var/www/html">
' Y& Z! E1 a, g1 W. c3 p5 i$ R# S/ T! M/ m8 m8 ?/ P4 y9 a
Options Indexes FollowSymLinks ExecCGI9 _# O3 B  W. _" N. a' I
5 y- A6 \, n: N& [- e
</Directory>3 j# K5 n8 }3 ^1 @2 L2 R! B7 Y. [

; o( b" y  C4 F4 I- P) L+ _& L' y修改成下面的方式
- C$ W* C4 j1 y) d+ V<Directory "/var/www/html">
5 a3 g8 r) V# A: s$ X% t( h4 l# @3 KOptions -Indexes +FollowSymLinks +ExecCGI9 l9 H% E5 v3 \! k5 \" p0 {; ]
</Directory>
1 u# X4 E7 H/ Z$ q
7 }& U) E: j; L重启apache服务即可。
3 q+ }% s1 Z; y1 i: _% a
 楼主| 发表于 2024-1-11 16:49:14 | 显示全部楼层
访问结果如下:
4 Z  k5 V: L0 t4 j. WForbidden, J0 T5 Z: B. E$ B
You don't have permission to access /app/ on this server.
 楼主| 发表于 2024-1-19 17:32:32 | 显示全部楼层
我们来看俩段通常对上传目录设置无权限的列子,配置如下:$ e, a. [& l$ O- b% O, s
/ ^7 g9 E+ e/ T  O: y! n
代码如下:
! ]* X7 q& U; V# w/ C4 O3 }* C. `/ P5 ~9 v7 J3 A) W2 Y
1: X1 l: a7 @4 q
2
/ e+ m2 t. O, y2 o$ Z. K3$ g9 w/ g' m6 G* |" G: ]1 _2 a1 l& y
4
% Y' _* t+ t2 }7 S: l6 P0 E& L  O5% G3 `+ M/ N1 t+ k) T8 |
6
3 T0 Q3 P. I2 X1 z% @" n; C<Directory "/var/www/upload">$ y( t% j5 \4 e8 f; q6 @
<FilesMatch ".php">
) \3 ~# X# b) q) `3 HOrder Allow,Deny; P: x2 V- l+ }, R' P! _- }
Deny from all- h- Q* G* A. ?8 D- e
</FilesMatch>
9 Z! C$ @9 u$ W) n5 b8 u</Directory>3 x9 O3 k' {7 x, G7 W5 y- e- m' A

- \+ v! n' P5 m! T3 E  ~
# g; W/ d) m) d* O% j这些配置表面上看起来是没什么问题的,确实在windows下可以这么说。
4 q  W, O4 Z& |( C( c6 ?+ J% d但是linux就不同了,大家都是知道的linux操作系统是区分大小写的,这里如果换成大写后缀名*.phP一类就pass了) \, ~' @& {$ X; U
) j! {. |1 }0 X% m7 k
这里我说下我个人的解决方法,代码如下:
  q- v% a- K0 ?$ z9 Z
- j7 M  l& C$ O, f0 U<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload">* ]% l" r3 ?, X- I2 A$ v
ErrorDocument 404 /404/404.html8 \. i2 p; ], B7 `# Y
ErrorDocument 403 /404/403.html0 ]9 E* _* C2 c( a9 d. i) Z
<FilesMatch "\.(?i:php|php3|php4)$"> // ?是尽可能多的匹配.php的字符串,i是不区分大小写,然后冒号后面跟上正则表达式,也可以写成:<FilesMatch "\.(php|php3)$">
* n' b+ B- `, [5 \, O& d  TOrder allow,deny
3 Z- I' p! w: `  NDeny from all3 S" l: h& P2 K
</FilesMatch>
1 O& C2 k" P/ o</Directory>
: o3 b+ e  e$ G4 k7 v
& h& t1 O4 W6 G; K2 F& P上面的意思就是说,<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> 内目录路径下所有php文件不区分大小写,通过order,allow,deny原则判断拒绝执行php文件,对nginx同样也是可应用的8 o# ~2 @' b7 v  {
! L4 V" \7 B( A, N5 p6 n
另外一种方法,是设置在htaccess里面的,这个方法比较灵活一点,针对那些没有apapche安全操作权限的网站管理员:
+ k& Q7 e1 f$ E" ]. JApache环境规则内容如下:Apache执行php脚本限制 把这些规则添加到.htaccess文件中
* r4 t# h( W+ Y% {: H代码如下:
6 d; |3 k8 h/ r) Q1 e
& \! e8 F  m* |1 ]2 l0 v/ E1+ e9 F9 c5 r" a( B5 H6 {+ i
2
: V* g# l; U: q7 S' U# R3 L* o3
; g) X+ O/ }& I+ z1 U48 `# A3 n, y3 J7 B9 r  }" }2 _
RewriteEngine on RewriteCond % !^$
( K" z" g! L% v. H6 R4 p6 W$ sRewriteRule uploads/(.*).(php)$ – [F]
* ?! S9 s8 f: _8 Q" B' L4 A3 P: k7 r( |RewriteRule data/(.*).(php)$ – [F]$ Z2 b5 K$ e0 g' l
RewriteRule templets/(.*).(php)$ –[F]# n' R. r$ M5 K$ I8 V

& I; s/ H0 G- r9 y( F4 K6 d$ F- \, J/ K; m/ ?& }) o3 T0 m
另外一种方法,代码如下:
6 Q! V2 Y2 R' l4 |, ?; F. x/ b% m* I: k4 A) i
<Directory "/var/www/upload">" |8 G5 J- H3 {
php_admin_flag engine off
% K! J/ U5 @: M; D</Directory>6 y# b! K' t5 H5 L$ ~+ s
6 c. u* j5 }$ B" p: l2 g
此方法我在win系统下面测试失败了,重新启动apapche出现下面的错误信息:$ S8 E$ \- E0 l+ u6 d; j
The Apache service named reported the following error:
) c9 Y! V1 k4 C1 b, h; p>>> Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration.
1 T, ^* }2 \  u9 i# m
1 f5 _( i3 u, ~# s" r% i这里我就不具体说明这个解决办法了,因为禁止php执行的方法,大家看自己的需求去设置就可以了!
, `! r& f- }6 ]6 s9 J. U
1 k6 d, B6 k' `/ w【apache配置禁止访问】) A9 |: b( S- C/ z# ?9 v1 d
1. 禁止访问某些文件/目录
7 Z9 A) u( i/ ^. Z$ H) O& N增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:
/ T. U$ N( \  a- p<Files ~ "\.inc$">
7 C$ B/ |) k4 b* r. v   Order allow,deny& |0 {+ A- _% K) F, i, o
   Deny from all
4 U& r$ P" t  t! x</Files>
/ v# v7 G5 `2 G& l) I2 m! L9 E/ P, C) t
多个的话可以这样配置已验证过:
$ l) P  I. `' a- e) Q: c# u, J" o; O6 I6 T" S* }: U
#不允许访问 .inc .txt .sql .conf扩展名的文件- q* v* F% @% N3 s) f: o! y
<Files ~ "\.(inc|txt|sql|conf)$">
3 @4 n8 ]; e4 _  q% }2 ZOrder allow,deny% Q& q4 X( F1 m5 R$ e8 r3 ^9 N2 I
Deny from all
* q" a& P2 Y1 c, P</Files>+ G' u: A5 X. N# {4 |8 ]

  e( I2 Q# m8 u  g0 R. I2 k, I' R' d% ^' N# b4 V, S3 z+ @
' e% W8 p5 h( _* i8 i
0 ~& ~7 _9 n& f  N0 d- F
禁止访问某些指定的目录:(可以用 <DirectoryMatch>   来进行正则匹配)3 ^- f: R, J* |
: Z; L  H2 J* r; b. ^
<Directory ~ "^/var/www/(.+/)*[0-9]{3}"> ! {* H# p/ `% [# R3 T. A7 k
   Order allow,deny
/ u3 g9 R$ j4 c; z1 q+ j9 Y9 T6 M7 A   Deny from all3 p5 i3 H. {8 z+ _. D! S$ r
</Directory>8 x. p( c" P1 n1 F, X4 Q! v

6 X0 Z9 d5 c+ p- a* {% F通过文件匹配来进行禁止,比如禁止所有针对图片的访问:7 L( B  G( |/ E7 D- `8 ]
<FilesMatch \.(?i:gif|jpe?g|png)$>7 \# J- j) N9 B4 T! I
   Order allow,deny
" N* F) z4 p0 D" F' N0 Z/ d& J6 ~   Deny from all
6 M  n* K% Y$ k8 u7 v1 r</FilesMatch>
4 ~2 c# I+ v4 C( \9 s/ b; ?- j5 @/ h8 b6 f
针对URL相对路径的禁止访问:  }, l- V8 a: r$ J( J
<Location /dir/>
& k5 @/ s; l3 t1 S* e+ V6 C4 E   Order allow,deny
) J% f" L  y% U# Q* c   Deny from all
2 D. t- s. R$ g</Location>
8 P/ `, I( B6 i
; w$ J9 Z7 P# _4 Q针对代理方式禁止对某些目标的访问(<ProxyMatch> 可以用来正则匹配),比如拒绝通过代理访问cnn.com:
9 m% ?/ F- x" X) o9 |6 N<Proxy http://cnn.com/*>* i  s9 o5 J( i" W/ Z2 G* q
   Order allow,deny: ]5 N4 Q- u" n
   Deny from all
7 e8 C1 _# j* ]9 i; r( N1 d</Proxy>
* @7 R# Z8 M7 v4 @1 `: K1 T% w0 C* I6 ?' z& p' f# l
2. 禁止某些IP访问/只允许某些IP访问
" U: d, m5 r( W6 `) e$ F如果要控制禁止某些非法IP访问,在Directory选项控制:
* _/ S/ R) g# P/ S6 I3 {, F<Directory "/var/www/web/">
2 F, K( n3 d- Q9 ?7 ]8 U   Order allow,deny
- w2 S6 i) `: f6 m   Allow from all, o6 x: z) I4 D4 b9 B6 p
   Deny from 10.0.0.1 #阻止一个IP
2 C# m8 [8 K/ N9 m8 ?   Deny from 192.168.0.0/24 #阻止一个IP段- X7 j! S! `, f, ~
</Directory>
6 E5 }& k0 [$ H* G2 K$ e. A; I: M
4 y1 e, }8 U% l" b6 F( {, L7 ~只允许某些IP访问,适合比如就允许内部或者合作公司访问:
5 A2 i$ q  Y) C0 _$ U% ^; s2 K- H<Directory "/var/www/web/">
$ z5 c- f5 ?# o: V1 E" g/ _6 ~   Order deny,allow! _0 r7 n  X. l% }% J% s0 f: `+ e
   Deny from all
4 K( Q4 V9 c& G0 }   All from example.com #允许某个域名
+ K+ L. y' P. W# p. N* ?   All from 10.0.0.1 #允许一个iP3 \+ Y9 _$ |. H: t2 V, `
   All from 10.0.0.1 10.0.0.2 #允许多个iP
# c& U4 }" h5 |6 k   Allow from 10.1.0.0/255.255.0.0 #允许一个IP段,掩码对
1 H' c$ `. F  S' ?" N' m# a+ ~" x& }   All from 10.0.1 192.168 #允许一个IP段,后面不填写
! f9 y( D# E# j   All from 192.168.0.0/24 #允许一个IP段,网络号
& i4 q* `* V6 i. ?/ n3 n</Directory>
3 r/ u4 E7 `" d$ z: c  i
/ Q" r2 g4 x# U! b6 W. @9 w' T6 L1 ?: d) H4 j8 V* }; C- r
Apache:解决办法;1 V) Y8 o8 k& O7 m$ a- ~, f+ ^
<Directory "/home/domain/public_html">8 I4 u& y1 A! q
Options -Indexes FollowSymLinks
: ?. ~! H/ @  t0 xAllowOverride All
+ i6 ~, {8 u$ q; t: S- D, ^: h/ `<Files ~ ".txt">
1 S9 a( N8 Z# k; [2 BOrder allow,deny7 r* f+ _# ]# F
Deny from all
0 D  Q3 T  c  T% I8 H' r</Files>" M% u- p+ w/ D7 Y0 ~
</Directory>
 楼主| 发表于 2024-1-19 18:01:42 | 显示全部楼层
一、默认情况,如果apache指定的目录没有下面项配置的“index.php index.html index.htm”文件之一,则appache会显示目录及目录下的所有文件:
/ d2 {8 I; k" I4 [* ?
/ g0 V. ~2 D) q, n9 U7 U4 b<IfModule dir_module> ! Z4 d+ C3 T4 b) ~
    DirectoryIndex index.php index.html index.htm ' y4 d  K2 s" x% k1 |% L$ E: w4 z. N
</IfModule>
  Z5 E+ i  C& p* \; Z8 H二、在apache目录文件下找到httpd.conf文件找到如图所示Options Indexes FollowSymLinks将此句改成Options -Indexes或者去掉indexes即可1 v. L. j1 o1 t% \7 O
& g& U3 |; e( L' Z6 E8 A
" R6 e/ R# C" C/ k- z; o
! J" y! T8 e$ i$ `0 d/ g! E* ^
三、其他访问配置(禁止访问某些文件/目录)
  w# b1 W! [" e# `4 v8 A- H
  `4 |( J0 \$ F9 w# v, v8 a增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:
# g. @7 T- @) t% C* r* A7 n6 P: _9 ]. s3 Q% D5 P2 g
<Files ~ “.inc$”>$ ^" Z, R6 D0 }5 M$ \
     Order allow,deny6 S+ ?9 W1 Q, D7 {
     Deny from all
+ L$ Z' |: h+ y1 r6 r</Files>
, K. R# G; Y1 z禁止访问某些指定的目录:(可以用 <DirectoryMatch>   来进行正则匹配)
. @5 u$ ?  }3 T# M9 u/ s/ V; \  ?5 a$ ?% R( i' p5 ~$ x
<Directory ~ “^/var/www/(.+/)*[0-9]{3}”>
& w9 ]. r. r, P# \8 Y     Order allow,deny
8 s- ^7 M$ h- s- w0 q     Deny from all
" Z) J. E+ f  V) Q0 d' [6 k. ?  H</Directory>. ~0 ~3 [2 {: T2 R( f( j1 C6 w
通过文件匹配来进行禁止,比如禁止所有针对图片的访问:/ w! j! @" t, u0 D3 w4 o

& w4 u. \$ F7 z! f; ]<FilesMatch .(?i:gif|jpeg|png)$>
) Z4 b0 ~8 Y/ h( E4 V- u7 w" @  }     Order allow,deny' `5 u% x6 k6 y+ E$ k6 J) Q2 ?
     Deny from all$ @& F& O: G( r4 F. _( F
</FilesMatch>, E' H" }' O& l+ j+ S
针对URL相对路径的禁止访问:
$ A" k  v' a: G! W" p8 [1 M8 S+ J7 y
<Location /dir/>
" ~  W  N+ E" U! I' O' }     Order allow,deny) v8 O/ x( f! G+ y2 ?
     Deny from all
8 h4 R3 d3 K- r6 R0 Y1 t3 X: ?</Location>
, p6 T0 E1 a3 K$ G9 Z% D! v: ^7 Z! l4 R2 W5 X& c. F! ?  x
 楼主| 发表于 2024-1-19 18:02:13 | 显示全部楼层
在Apache中配置禁止目录访问,即禁止游览列出的目录/文件列表的方法  U$ `0 R# Q8 S

8 h0 _2 j+ W- h  W# y! j  Z  访问网站目录时Apache默认配置为可列出目录/文件列表,即当你访问http://localhost时会列出相关的目录和文件列表,我们可以通过修改Apache配置文件httpd.conf来实现禁止列出目录/文件列表,方法如下:
5 ~: q- Q. m- m4 p% i; X
: X7 j1 z4 K0 a# @* ~1、打开apache配置文件httpd.conf
! p# d) u$ U4 _: Q9 Z7 M- }+ j
. h% Z; o  R( M/ A) y; u2、找到
4 ?4 r2 B( G* Q' K) S1 X, E# ~6 v! S* N8 \6 e: u
- P2 X* P" ~- T
! X7 K& R, J9 Y1 U* s" N
<Directory />( i+ U; a# E) b, X0 g4 O" S
Options Indexes9 o* J# a, Q0 [; j1 Q( J
AllowOverride None0 n9 o* ^0 w0 m9 N$ _& G
Order allow,deny
4 x5 `+ ^; s2 m/ ?) B4 }8 p9 @/ aAllow from all
9 V- G& W0 v6 t7 g: w</Directory>  Q- K! W. Q* V2 A, k+ e$ ^7 Q
2 A6 i  P6 `; M( u  N7 N
只需要修改Options Indexes为Options None即可,注:根据PHP运行环境安装包的不同,Options Indexes也有可能是Options Indexes FollowSymLinks,一并改为Options None即可。1 e  U1 {- L. z. D# I
8 I+ Y) O5 v2 {% D
3、保存httpd.conf,并重启Apache即可,此时再访问http://localhost时, 报apache http 403 禁止访问错误信息
8 e6 U  E# z, J# p$ |. w1 S' r' F) x, E, V" [% A: T; r$ ]. o
  Forbidden
& G& d' K. S7 r% a2 b; P* s3 M5 ?9 R6 h, H9 _! r
  You don’t have permission to access / on this server.2 F6 k) R' L( [& U
4 Y! U" y1 B% {
Apache单个或多个目录禁止访问方法
7 m, y! O5 c5 P/ E  F# C
; J, {7 M& A+ z8 o  这种方法通常用来禁止访问者访问后台管理目录或者程序目录,方法如下' @+ I& _1 d8 K  w/ {9 D, K* H

7 x0 `: |# R. `# T- n& U1、打开apache配置文件httpd.conf
  j0 q7 u/ `6 Q3 k5 {$ {7 i  [9 |0 J, N, l! B4 z' l5 h. P/ r3 I3 R/ K
2、创建Directory块,比如禁止访问某个类库目录,可以这样实现
* a! w8 q) L' X/ a: G: Q
+ H2 O& [* g& L8 D0 j
5 \( {4 m. L) e' c% u% }' O
" g% Q) p- X+ v8 }! u<Directory /var/www/www.leapsoul.cn/inc>: t! L  D3 n3 w) j& F" [+ l
    Order Deny,Allow
  E9 i" L" ]" B  g4 M    Deny from all, N  |4 k# S7 T8 U/ K  i
</Directory>: N- h4 w0 I7 N" Z& J4 e' [

6 v& e- C2 I+ ~$ _0 E) {! N上述代码实现了禁止所有用户访问www.leapsoul.cn下inc目录的功能。如要实现禁止访问所有目录中inc目录的功能,只要将3 ?0 x3 W4 p* e4 d; I0 s
3 H7 V" g# l4 A  y" j

7 A2 U' w1 O$ m) [$ l; d) r* s" C! M- R  H  t6 O: W
<Directory /var/www/www.leapsoul.cn/inc>
% |% F. J0 `+ i4 P# `
2 x* v. m2 J* d& _0 I8 p  u更改为" O6 z& g" P3 Y
0 ?" o( S+ b- ~4 q( X5 a
; H6 P) t  ?% j8 ?+ E2 I
- x  k7 v% b" Y- j) f  T9 v9 p+ C
<Directory /var/www/www.leapsoul.cn/*/inc>
! L7 L" B4 W, U- Q6 c2 ~; r
7 j2 s/ P0 Q) a1 Q3 Y即可。
( d1 H# }1 C* _% W3 c. I
# K5 T. c" H, C3、重启Apache服务器。5 `' q1 V! Y: r# V$ T6 `8 s, c
2 `1 @  f( q- P( `
其他说明8 s& Q! Y: Z' [! x7 _) k3 w* H+ l1 h
2 t6 e. z; ?4 }+ t* l7 t; F
1、只允许或禁止某个域名进行目录访问
' g3 v/ f) ^. o% b! n$ N% Q# d$ ~9 V( z, a1 q& r

& p- f6 |' E4 U( G$ R8 K* ^) R
: e6 Y: q! D6 q# H( I: M$ ~<Directory /var/www/www.leapsoul.cn/inc>; e8 s8 f. z" s
    Order Deny,Allow
1 {! W% t/ N$ V    Deny from abc.com
8 g- E2 h% l% `; ^    Allow from apache.org! R5 v6 }) ~/ ]) J5 b1 c
</Directory># }( t2 c/ f' W5 |( Y5 U; U
  G, I4 H& `. Q  Q) F, P2 a: t0 a4 G
上述代码实现禁止abc.com域中主机访问inc目录,允许apache.org域中主机访问inc目录的功能。$ B" f; p0 a: Z1 |
( [' u! Y) s2 E; f) a* A
2、只允许或禁止某个IP进行目录访问
1 q2 j' A0 I, z1 T6 B& m8 J2 E: U; Q, S- F/ f

+ L. i* S0 m- e, D0 i
3 A, z; r) ^+ r# I& a9 t<Directory /var/www/www.leapsoul.cn/inc>
/ N+ \) R5 y* {$ c8 f6 H    Order Deny,Allow; `; `+ q  y" Y
    Deny from 10.1.1.2
+ s3 \  }! F; P. {! ]2 C1 L7 Y& g    Allow from 192.168.1.0/255.255.255.04 Z) C& o2 l3 I1 a$ j0 c& ^
</Directory>2 F& a5 @6 y  T
, o/ D5 u5 R# p& V/ F, \! h* }
上述代码实现禁止IP10.1.1.2访问www.leapsoul.cn/inc目录,允许IP192.168.1子网中的主机访问www.leapsoul.cn/inc目录的功能。7 Q! D6 j$ S5 I* [6 B& P; B
) I) j: K$ K+ H. h9 }! [
注意: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:27 , Processed in 0.050058 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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