找回密码
 注册
查看: 4|回复: 4

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2024-1-11 16:48:35 | 显示全部楼层 |阅读模式
httpd 服务apache 开启目录遍历漏洞防御  |$ F7 O) Z# M
最近收到目录漏洞遍历防御
# i' B$ h6 U' f4 x3 m如何做
9 c5 x# }, @+ ^: \% s7 e# f: m4 W- @' {/ x! o* L: g
: f' U# y" f3 Y* D3 b2 R4 j. T
! Z1 j' E, i# S: e4 _% m
找到对应的httpd.conf文件. m5 a3 w- @( b! h) ^3 @
修改配置:; e2 |9 K4 _' G) O7 K
<Directory "/var/www/html">
6 P: h2 j+ H% r4 a. c, c9 ^9 z1 L
/ K3 e4 t) S& z6 c0 {Options Indexes FollowSymLinks ExecCGI  k0 Y: }& C) D
( k7 A: X+ V/ g* }% Y
</Directory>
: {" v' G: n5 o0 I
9 V! f- M5 `; n8 M: r, n, M/ F修改成下面的方式5 I- V& S# s- q
<Directory "/var/www/html">
5 K8 h; p7 C0 }2 H3 tOptions -Indexes +FollowSymLinks +ExecCGI
: O+ ]% N; S( `3 m3 o) n+ H0 a</Directory>
  W/ u. c! }  r) I) I
/ B+ w: e) n, {* f重启apache服务即可。
# n" J; q  \  P& U+ W! V  S- b

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-11 16:49:14 | 显示全部楼层
访问结果如下:- D  ~; c- U6 C4 F7 [; J& J( V0 {
Forbidden, i0 A% S* \  X1 n4 |& z
You don't have permission to access /app/ on this server.

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-19 17:32:32 | 显示全部楼层
我们来看俩段通常对上传目录设置无权限的列子,配置如下:
: s2 ?( n0 t9 g/ ]* _6 Y# o. S( j7 b' s2 z2 I7 R
代码如下:: B$ M# T$ C( |1 b. J$ L) B
7 A1 E& r" U! Q9 K
11 S$ f9 x  {( u1 Z& e+ E7 _
2" o' V) l) ]" g5 V. E
3
$ w9 w- _$ l% ^& a  J4
- R; c6 L8 t& C2 I% k# S5
& u; c8 Y: }# n8 _6
  X( n! b2 |  H. V+ Q' U<Directory "/var/www/upload">, e$ E1 e$ ]* y7 p1 s5 T5 B3 o  g
<FilesMatch ".php">
+ N( z7 U  W* t/ A/ R7 }  |9 rOrder Allow,Deny/ @; p! O: n# Z+ R* E4 ?
Deny from all
- s5 z7 |) O) b</FilesMatch>. |3 V3 W. s" W/ {8 C1 }% e
</Directory>; ~8 H: i% e8 Q5 o) h" [
; O) u  D$ s1 X7 m( U0 m: f" r

& f' q( G5 B( ^! m" T4 \" Q这些配置表面上看起来是没什么问题的,确实在windows下可以这么说。! W0 @: a: ~+ q& V& [9 i
但是linux就不同了,大家都是知道的linux操作系统是区分大小写的,这里如果换成大写后缀名*.phP一类就pass了* X; B) b/ P/ d) F

8 M' ], Z# n& s- _% f3 c这里我说下我个人的解决方法,代码如下:
! E# n9 t/ i" [4 {3 `' E8 O
6 R# Q: @6 A$ j<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload">: V3 s8 p2 s8 U
ErrorDocument 404 /404/404.html
7 Z; p- `0 m/ a6 d5 |ErrorDocument 403 /404/403.html
! Y9 k. `4 ]5 }1 g0 i4 O<FilesMatch "\.(?i:php|php3|php4)$"> // ?是尽可能多的匹配.php的字符串,i是不区分大小写,然后冒号后面跟上正则表达式,也可以写成:<FilesMatch "\.(php|php3)$">8 u8 m! H4 x, S( J; s! C7 `
Order allow,deny
* }9 f9 g( y+ {% [# v. N! N6 d, n# CDeny from all
# M* A( b- j: `- Q</FilesMatch>
( S' \& Q6 U) ?# [! D" I- F! y</Directory>
- w$ E# D: {! h. G- D  P
, G- k+ t  s2 F8 e% i6 o上面的意思就是说,<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> 内目录路径下所有php文件不区分大小写,通过order,allow,deny原则判断拒绝执行php文件,对nginx同样也是可应用的
, L7 e  t! A  D' Z0 D( Y" @3 }2 H$ _% A5 q
另外一种方法,是设置在htaccess里面的,这个方法比较灵活一点,针对那些没有apapche安全操作权限的网站管理员:
' V+ z! m! {  a# @: I6 {Apache环境规则内容如下:Apache执行php脚本限制 把这些规则添加到.htaccess文件中
. n1 x6 e! k) \1 _$ c8 @代码如下:- t+ O6 A3 ]; n6 O
* p7 J3 n: f! f3 d9 f9 X
1; [& N; K5 R' n
2
  p/ K5 E4 \' Q7 r5 @- p. ~3 X3
. z) C, Y8 j" s4 l4
6 l5 G) Q0 C" i5 d7 V- p- U1 i; {+ WRewriteEngine on RewriteCond % !^$% \% M) B7 h( |+ {
RewriteRule uploads/(.*).(php)$ – [F]5 M  s! s4 e- Q6 h' e- j
RewriteRule data/(.*).(php)$ – [F]
1 _  \5 l0 k8 z6 a: ERewriteRule templets/(.*).(php)$ –[F]
$ U/ d' }0 A8 F, L' i8 a% Y& L: Q $ `! r, j" B) u2 D4 }* [. n, R4 l
7 I, D3 Q1 J+ _  N
另外一种方法,代码如下:0 |/ x9 G; R; Q' o* l: x

7 j( ?% I2 M$ z<Directory "/var/www/upload">! ^% o/ N& Z. z" d
php_admin_flag engine off
( W- P* |' l0 C' x</Directory>5 p5 H2 e. _. f4 \

4 O3 ^8 X+ ?+ \此方法我在win系统下面测试失败了,重新启动apapche出现下面的错误信息:" K3 o8 M% f" l# V
The Apache service named reported the following error:
6 k. |4 f+ I4 g, \6 z# T>>> Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration.8 T/ P  J( j4 S

$ a3 R# D+ {/ u% x9 K& ]- ^  v这里我就不具体说明这个解决办法了,因为禁止php执行的方法,大家看自己的需求去设置就可以了!
! U2 u* t* j& t) M6 ]) O; d  _3 w5 c. L5 k+ G( l
【apache配置禁止访问】
1 f- U1 T* p! ?0 W1. 禁止访问某些文件/目录5 R! o5 n1 _: E4 x. A7 Y0 U
增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:
# m( Q; `5 k7 e$ g& w& i1 Y<Files ~ "\.inc$">; r6 k: u( {( H
   Order allow,deny, C  I' O2 ~5 o1 U
   Deny from all; L3 _+ ^3 q7 n  O  W
</Files>
) p7 G; ?+ P3 r4 m" [
+ z7 N2 C9 h! U1 Y) i多个的话可以这样配置已验证过:, \# |' z6 ^4 l: m* ]7 R
  U" {" C2 `: j  }! F- M
#不允许访问 .inc .txt .sql .conf扩展名的文件
% L/ ~8 }  z% U* r; g8 Z/ [<Files ~ "\.(inc|txt|sql|conf)$">/ G. f9 t# A* _
Order allow,deny
- w0 T  n' M/ K" n# g1 r8 R6 VDeny from all
+ I) o; W9 M* `9 t) Z% M4 e</Files># K7 X, r! C* K) m) {
$ Y! \4 e+ T' f  o7 @

2 B/ t! ~5 E( r6 k' m  ]# x$ Y  j. j+ o

1 f7 o  I8 z1 i) b4 |禁止访问某些指定的目录:(可以用 <DirectoryMatch>   来进行正则匹配)7 ]0 ~; O3 j& {7 O; L
; p+ v* _) C8 r$ Z) c) S: L+ ^
<Directory ~ "^/var/www/(.+/)*[0-9]{3}">
* I0 E. w3 u+ M$ D* |   Order allow,deny
0 y1 X7 D7 `* x# s1 y' _- `   Deny from all
. O6 l. h; B, m</Directory>% j* F8 R# b* v8 Z% c
# ^+ b+ y# A$ F# z% g) t
通过文件匹配来进行禁止,比如禁止所有针对图片的访问:
( Z: h; Z* P0 F/ i5 _& r1 \<FilesMatch \.(?i:gif|jpe?g|png)$>. Y, [: S! K+ _; u6 L8 C. ?. d7 G
   Order allow,deny
9 y8 |; U& v! g3 u   Deny from all
. w: W) T* n3 g0 R. I  }8 M& |: ]</FilesMatch>
0 u: Y$ P" ~2 _( `) }  H3 r% U) q/ D
针对URL相对路径的禁止访问:/ @$ J/ ?+ y; l2 S9 c
<Location /dir/>; b" }: g+ v/ Z/ u" B0 q! ^
   Order allow,deny) o$ W6 p/ I0 z. J  O. {& `& c2 @
   Deny from all
. k3 z2 p; S$ A</Location>
2 u, Q4 W) L: ?3 k: P
" O- r; y3 H/ q7 Y# _针对代理方式禁止对某些目标的访问(<ProxyMatch> 可以用来正则匹配),比如拒绝通过代理访问cnn.com:' B; F6 O" x' A' L
<Proxy http://cnn.com/*>% G8 I' j7 ^% y7 z' X' }
   Order allow,deny# d+ K5 E! k# ~7 `+ e! {6 G* F/ x$ I
   Deny from all" K! l3 R! i/ A/ U& {! z. l; m# y
</Proxy>
9 Q7 \( I  L4 Y$ {5 ~, n& E
; S) R/ I; }4 H8 X  i4 w2. 禁止某些IP访问/只允许某些IP访问 * Q, m0 \3 d6 N6 P
如果要控制禁止某些非法IP访问,在Directory选项控制:
/ E) u1 D, X* Q+ D<Directory "/var/www/web/">: w# v2 c/ J1 X# ]: s
   Order allow,deny
9 f& P, P7 K! ]) G- r3 {   Allow from all& g2 U" M) t$ x# w% Y2 q
   Deny from 10.0.0.1 #阻止一个IP
* W/ P+ M; u- ~1 N! b   Deny from 192.168.0.0/24 #阻止一个IP段
7 J. _  _3 a- X6 G" T/ O, C1 ~' U3 N' p</Directory>
+ a% p  r$ c1 r
" r& |" p$ x" o) ~& D2 `只允许某些IP访问,适合比如就允许内部或者合作公司访问:
' d0 }3 ~8 E% w0 D<Directory "/var/www/web/">$ P; C5 k$ C# V5 H- \; v
   Order deny,allow
; _+ g8 \% Y3 L. j. [9 O   Deny from all; H+ W% s+ O* A
   All from example.com #允许某个域名
. }: O; V! b2 Z: C1 q   All from 10.0.0.1 #允许一个iP( e5 {  ?3 y0 z; t  r: H' q# e8 S
   All from 10.0.0.1 10.0.0.2 #允许多个iP- [; O) @; r8 q" K' ~
   Allow from 10.1.0.0/255.255.0.0 #允许一个IP段,掩码对" l. B% t3 B  H' j4 \
   All from 10.0.1 192.168 #允许一个IP段,后面不填写
& _! N* A3 ~: ?! S8 N! C: U+ L& P9 ?   All from 192.168.0.0/24 #允许一个IP段,网络号2 n3 B: }% N  H7 m$ I0 q
</Directory>2 r2 @8 O0 t* Y6 o7 Q) U
3 P% Z% }! M/ C" I' U: l$ G
: H( H) ^2 w" O
Apache:解决办法;+ y6 L1 A) @% B1 T0 O8 E% ^
<Directory "/home/domain/public_html">+ q6 s+ z6 ^  K& X2 M$ }# s$ j3 p
Options -Indexes FollowSymLinks
: c1 p! R; Y0 l1 C" }7 Y# SAllowOverride All  N/ `# h, r$ R8 \- c0 ~$ X+ c
<Files ~ ".txt">. ~+ v, W4 f8 [" p
Order allow,deny- Z0 B0 v# R3 V# w
Deny from all) V0 C) W  o6 e+ S3 ?
</Files>2 L" Y- Y# x; L0 Z
</Directory>

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-19 18:01:42 | 显示全部楼层
一、默认情况,如果apache指定的目录没有下面项配置的“index.php index.html index.htm”文件之一,则appache会显示目录及目录下的所有文件:
, Z5 C1 `; ?" e; W: r/ C- k+ ~3 [- ?9 r1 W' j
<IfModule dir_module>
* s8 D- s  E' Q, D4 S+ i9 H    DirectoryIndex index.php index.html index.htm
0 A8 S$ E% P; ~3 B5 Q1 d: k0 r</IfModule>! K/ G3 L3 x3 k2 I& C( r( `+ `3 h+ n
二、在apache目录文件下找到httpd.conf文件找到如图所示Options Indexes FollowSymLinks将此句改成Options -Indexes或者去掉indexes即可
- M1 Q) |' x$ T# S+ A
/ t5 h  i0 q% [7 H2 X2 C+ X- B
: }# u2 y4 a+ E; m. y- p: u* F# p  v7 V/ C& a: m
三、其他访问配置(禁止访问某些文件/目录)( N; U; r3 g% ~: K3 `

) N, z' l+ v( ^& ?增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:& A' @$ X% x4 _7 A3 }+ l

- M" t6 o7 I& T% t. V; z<Files ~ “.inc$”>' I2 F3 @: i- W: s7 o- V: }: ?
     Order allow,deny; |# I5 G3 Q% w+ P$ U
     Deny from all# ]) c$ K" K$ Q3 ~6 W
</Files>
  s3 z3 v4 c6 ]+ @5 y7 X禁止访问某些指定的目录:(可以用 <DirectoryMatch>   来进行正则匹配)  u2 t8 N- F( i- X  A+ w% f
# L; P9 P6 ]; K5 i. \
<Directory ~ “^/var/www/(.+/)*[0-9]{3}”>4 F/ ?0 J' y% A8 p- B" C
     Order allow,deny+ T& W% p7 N6 a' N, ~6 I; T
     Deny from all
0 z) C3 D+ |6 ^" v& [# X8 [</Directory>
2 L% S% p: B* R& m6 [2 @通过文件匹配来进行禁止,比如禁止所有针对图片的访问:
  w: c- z+ J; q/ g$ e8 Y# O; j8 V1 t$ i' k% g4 E, r2 K
<FilesMatch .(?i:gif|jpeg|png)$>
! ~1 f3 C" j2 r     Order allow,deny
; Z3 N5 _+ {* J" T0 `4 K7 {     Deny from all
7 j' k3 W) z' p) d1 n</FilesMatch>
6 b; T3 @4 {* E( @7 a& X针对URL相对路径的禁止访问:
3 X# D, z7 q8 J+ G- Q- O0 Y( X- n: w8 |+ e2 d! N! d
<Location /dir/>
! T& y2 i+ g8 x% _9 N     Order allow,deny5 P* g. e$ a4 n; ~" g3 w0 N6 p
     Deny from all
: c- k3 T4 z/ `7 w</Location>
4 x' T+ E/ q9 C- f( V1 D9 y5 m! S- e- Q& w; H' j8 ~  Q6 Y# L

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-19 18:02:13 | 显示全部楼层
在Apache中配置禁止目录访问,即禁止游览列出的目录/文件列表的方法
. G  e" B0 l; b, f0 Y) V0 W& U4 P0 T# _* P: g9 W
  访问网站目录时Apache默认配置为可列出目录/文件列表,即当你访问http://localhost时会列出相关的目录和文件列表,我们可以通过修改Apache配置文件httpd.conf来实现禁止列出目录/文件列表,方法如下:
/ B8 F& b3 O- D" g' T& Z9 D
; R# M4 @2 g1 N1、打开apache配置文件httpd.conf
2 A' a$ X0 S  U* r! I7 C; u1 Z2 e/ K. z) B
2、找到7 Q! e5 m* t5 ]; r8 ]; X9 T+ q
- }' Y# Y( N0 s! r

  z1 W% W; ]/ C3 B1 ]2 t; r3 y/ R$ y4 q* s
<Directory />
7 Z! ~; o! d" _+ zOptions Indexes9 m  x  G. Y& j' x' p
AllowOverride None
: ]/ O4 s4 C+ o, M8 p9 K) aOrder allow,deny
7 O5 \- }% \! W+ Z7 f) m3 t0 uAllow from all* A0 s4 z# k1 @7 d' f8 }
</Directory>& g. H! A8 t1 ?0 t# H3 h
! L( i1 y6 l$ P
只需要修改Options Indexes为Options None即可,注:根据PHP运行环境安装包的不同,Options Indexes也有可能是Options Indexes FollowSymLinks,一并改为Options None即可。% g/ g7 Q& [% H7 D# _9 Y0 X0 q. B( i- D
1 s  k- s% L8 W- [/ }( @( L! Z
3、保存httpd.conf,并重启Apache即可,此时再访问http://localhost时, 报apache http 403 禁止访问错误信息
5 p. Y* V) D$ t: G: {! v5 O
0 {! T2 J) ~" g2 Y$ }2 i0 s1 T  Forbidden
- n  Z* C+ s4 Q+ I* }! h2 [5 Z( o9 I7 C# \$ @* W& D3 }
  You don’t have permission to access / on this server.3 {& x% o$ K1 b: g1 s

; A. a) J0 @7 W! a6 _6 B* p& R+ qApache单个或多个目录禁止访问方法
; ^2 Z! n7 d6 c4 N0 j5 P. D7 r: r& ]  P3 ?5 p) E( l9 d, V- h
  这种方法通常用来禁止访问者访问后台管理目录或者程序目录,方法如下
. G8 U- s$ b! r( Q/ ^0 \4 I4 l* l. Q9 a( F0 z7 l; j; c
1、打开apache配置文件httpd.conf
3 J, A4 X  T7 Q5 g6 \" i* s7 R# ?- X$ @2 b+ A1 z7 I. v2 v
2、创建Directory块,比如禁止访问某个类库目录,可以这样实现
/ o. T4 E' d: u) @+ ?0 t' ^) Q1 m8 I1 T: ~! F

" J) q' a+ p& |! |" Z9 |4 T6 y5 o7 e( B" [6 q# `
<Directory /var/www/www.leapsoul.cn/inc>9 V+ m0 C+ S) Y$ x, z
    Order Deny,Allow
# m! f2 i1 M, i7 c) n" P    Deny from all" Z2 F. g, o4 t/ N) d
</Directory>
+ {& [, x7 |4 `4 U7 A* P7 U" d8 _* l/ \9 S' j6 i. T$ M
上述代码实现了禁止所有用户访问www.leapsoul.cn下inc目录的功能。如要实现禁止访问所有目录中inc目录的功能,只要将* K: y9 o" ]4 v5 o& I0 O- c
. V5 v; K3 b: @: E9 O

/ q- L% p3 O% z7 r  S% K6 Q1 g* J) ~6 A5 |8 u6 Q  c7 G8 Y7 R6 h
<Directory /var/www/www.leapsoul.cn/inc>5 n) z3 Y& E1 A

5 C' r# g3 Q5 a8 n! N更改为
# b) o! J2 q! U+ ]. ?  E# Z' r/ t. C' y5 K

" G6 G2 k& {( n  ~% o  S$ B0 O
1 a) s8 ^6 X& o/ ?<Directory /var/www/www.leapsoul.cn/*/inc>
. i" z$ Z4 x6 [4 i) O* \: d6 V+ }4 |$ y
即可。
* W; R/ l; b! t+ k5 N( s7 B. ~7 u7 p# v, A9 f! r3 M
3、重启Apache服务器。
4 @' q" z8 h! _: g/ M/ [
3 a0 N. Q+ |' F" p& h) \% |其他说明
. y/ i8 X) b5 d4 ^, |4 |* ~7 [4 x' d2 s9 r1 j: f% C6 ^% T
1、只允许或禁止某个域名进行目录访问) `* @" F  G" d: |, z4 ~  U& h

7 B* E0 ]- P+ ~3 x# x
& Y% ?+ e* Y4 E6 D& ?3 ?
. X. ?& K% s7 A6 j4 f% Z<Directory /var/www/www.leapsoul.cn/inc>
; l: |! Y' I& n    Order Deny,Allow3 h: z7 O0 P  f" }8 Z" g. K% N# E3 S
    Deny from abc.com
" p8 `$ }) x/ Y% s' o    Allow from apache.org
5 J) y% R/ R" ^* V</Directory>
9 ~$ b8 K3 N( ~' ?. O: B7 H9 K9 u; V# a3 Z! z! Q$ c
上述代码实现禁止abc.com域中主机访问inc目录,允许apache.org域中主机访问inc目录的功能。
2 J9 F( q; b  A4 l6 U; r( n
* m) Z9 X" u7 A! B- i2、只允许或禁止某个IP进行目录访问
$ v  h: I0 q% v& q: k# F. R) c. `1 X, V$ z+ j/ q) s

, ^) L: @$ |6 h7 K9 p& O) b2 E
0 H$ i! f% Z- m<Directory /var/www/www.leapsoul.cn/inc>) Z5 J( ~3 S# I+ O9 S& p& o+ P
    Order Deny,Allow: [1 C- C; G7 X9 v" _
    Deny from 10.1.1.2
6 b" M5 M& |/ x  y    Allow from 192.168.1.0/255.255.255.00 U6 J4 A2 T$ ?+ O$ g
</Directory>
2 `1 s0 W# m& }6 u% \$ g, C2 D+ n$ ^# P4 e/ e" _0 O( C
上述代码实现禁止IP10.1.1.2访问www.leapsoul.cn/inc目录,允许IP192.168.1子网中的主机访问www.leapsoul.cn/inc目录的功能。8 Z; g- i; m: M) u4 U
- {6 D9 o; v/ Y/ O, M
注意:Allow from 192.168.1.0/255.255.255.0等同于Allow from 192.168.1或Allow from 192.168.1.0/24
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:41 , Processed in 0.035012 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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