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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2024-1-11 16:48:35 | 显示全部楼层 |阅读模式
httpd 服务apache 开启目录遍历漏洞防御# ]8 G+ s8 v$ X- v8 }
最近收到目录漏洞遍历防御
: i1 j# q+ j# M9 y如何做0 ~/ M- V  U( T+ A) D$ P9 N

: W& {) {6 G2 d; Z+ @# i+ f
" _, J3 D! V) O8 A2 ]9 y5 s
% `5 s/ k) S# k# v# _6 ~* r找到对应的httpd.conf文件
) _- l2 v' Q$ Q修改配置:
  j- S' I! X$ _9 d% I" A<Directory "/var/www/html">' U  X3 A( _' p2 v/ m

# y/ V, g' J' C; Q4 `: n" WOptions Indexes FollowSymLinks ExecCGI
# k% V6 H; c% C2 ]' e. b) T2 u1 y
) `# [( x5 E" ]4 z, S* r: |</Directory>+ z, P& f# i! y* g# M

! @5 `3 j8 B# G% Q修改成下面的方式+ T+ r7 n& @; z" r& X; c
<Directory "/var/www/html">
2 b+ M: y% r' fOptions -Indexes +FollowSymLinks +ExecCGI* t& \  w3 X  n" o# ]
</Directory>% X2 ^: ~. t) W8 o) P1 O. v+ ]4 y( I8 G

# F1 t$ p  U6 e& l) W重启apache服务即可。
* n' g2 B4 p0 x- ?4 o' d. x7 W, Q+ s# I

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-11 16:49:14 | 显示全部楼层
访问结果如下:* j2 V; M! T: R# A. h, c
Forbidden5 t8 Z& y9 t' d7 _8 Y
You don't have permission to access /app/ on this server.

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-19 17:32:32 | 显示全部楼层
我们来看俩段通常对上传目录设置无权限的列子,配置如下:2 M9 R& ~) Z6 [3 ?; B& D: ]) F
* G8 ~, D# |% X; Q1 _( c* D" U4 `8 \
代码如下:; L& D# \9 M: n9 ?% t/ [

) U+ M% A( O( p. _+ Q# i1* |) c! T5 s! s
2& _2 d! E' M6 o8 o& @
3% S) F/ w% X, \( K* K& _6 d
46 S8 ^; q2 Q9 C+ s
5
3 c& Y- L% Z+ G6
# I! P) Y3 f% b+ ?$ k9 A<Directory "/var/www/upload">
# y* s  [0 v0 U$ m8 m<FilesMatch ".php">
# c0 {5 a: C) ~Order Allow,Deny
: m' ~  K$ l6 M9 FDeny from all0 ^: Y) s0 h8 U2 V7 W
</FilesMatch>9 H) T' w$ B9 b3 Z, E
</Directory>1 ^% v" w3 x) m& N
( }2 N* m! W* |* S, ?/ f2 ]

2 `, G$ ]7 }2 m这些配置表面上看起来是没什么问题的,确实在windows下可以这么说。% A: I7 }7 I6 a- k2 {4 D
但是linux就不同了,大家都是知道的linux操作系统是区分大小写的,这里如果换成大写后缀名*.phP一类就pass了
" M) g6 {8 n2 I
6 [  u5 N1 D/ S' b这里我说下我个人的解决方法,代码如下:
$ _" h0 @0 f% m( e& _3 k; o  ?( \6 }; Q+ z% |( U, R/ g
<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload">
8 Y+ v' n6 L8 X: c: _' V( dErrorDocument 404 /404/404.html
3 a# k) ]' }4 h. _0 y9 ]8 F" tErrorDocument 403 /404/403.html) p- H' y7 I- n& X- `
<FilesMatch "\.(?i:php|php3|php4)$"> // ?是尽可能多的匹配.php的字符串,i是不区分大小写,然后冒号后面跟上正则表达式,也可以写成:<FilesMatch "\.(php|php3)$">
& ~  E& R6 |4 o( vOrder allow,deny
$ p: j# O) G6 g- A# Q6 s% w% XDeny from all& }( w% `1 z! }/ }( `
</FilesMatch>
; d3 O% J9 m( Z% {8 z</Directory>
2 I1 V. t1 l6 f$ C9 h. }: d2 h# n% l3 c1 y7 q$ d* q1 v
上面的意思就是说,<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> 内目录路径下所有php文件不区分大小写,通过order,allow,deny原则判断拒绝执行php文件,对nginx同样也是可应用的
. P7 s! B( E9 O, x4 t+ L3 M) [
" P4 o6 S3 a* a1 j另外一种方法,是设置在htaccess里面的,这个方法比较灵活一点,针对那些没有apapche安全操作权限的网站管理员:
3 {. c6 l( ~+ Z: O+ P+ h2 }Apache环境规则内容如下:Apache执行php脚本限制 把这些规则添加到.htaccess文件中
) A4 W2 o9 J& p5 X4 V代码如下:7 `9 Z* N- \+ D. J# a# D

% [8 J% A" l8 e  y# k- ]' A1* _% J# Q8 k9 R4 ], k
2
( M. U- \; s& ~+ a' k9 [3: q( K0 }; E, M
4$ V+ k& a) t8 x9 d( ~. ~" ~, D2 H
RewriteEngine on RewriteCond % !^$3 R, M. d+ w* c3 Y/ p% P* @
RewriteRule uploads/(.*).(php)$ – [F]
" i; V8 p7 }& a" D  i5 A* SRewriteRule data/(.*).(php)$ – [F]2 k2 O! S7 P& k
RewriteRule templets/(.*).(php)$ –[F]
2 V- ]! _% A0 ~3 J 6 }0 U) h2 \  t% t0 g
- ?2 }& M) u6 I( n
另外一种方法,代码如下:
. Z- e+ ?7 H& y, O( |- a$ p+ e% P+ L7 A- c! Q8 [- t3 V( k- ^
<Directory "/var/www/upload">
4 ^7 O; U0 t/ @1 dphp_admin_flag engine off
& g1 L: j/ Z) w</Directory>$ C; g, B! o' t: O
7 O- ^2 D6 p9 W% T  ?  v- w
此方法我在win系统下面测试失败了,重新启动apapche出现下面的错误信息:' p" k3 [: c* u& L+ X5 H* e* e
The Apache service named reported the following error:
' [; I' g+ g8 b; l>>> Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration.6 Q+ ?. g4 h, m8 c" r

5 L" C0 R' H" k9 c% q这里我就不具体说明这个解决办法了,因为禁止php执行的方法,大家看自己的需求去设置就可以了!
( w1 g; W- E, q. ~2 i
/ A* t. D  t! w7 S【apache配置禁止访问】
8 R$ m# X3 h# i3 ?7 G$ J, r" V* Y1. 禁止访问某些文件/目录
9 v1 D, I  e% I5 v- N增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:) H2 G0 T9 d( h5 L6 v5 A7 o
<Files ~ "\.inc$">
. X- D) o& c1 B! m) n   Order allow,deny
, ~6 C) K2 e" }) F8 v& g0 m   Deny from all
+ _8 W; u0 g) [% _+ V$ \</Files># l& l' }  p( w) Q
* _, v$ c- }' E: t
多个的话可以这样配置已验证过:6 ]& H/ X3 r. H

! ~' G8 f! c5 h' A$ L: }8 C; q#不允许访问 .inc .txt .sql .conf扩展名的文件/ k  g6 \% m  m" K* r( E
<Files ~ "\.(inc|txt|sql|conf)$">
% k( L1 J) Q/ j' VOrder allow,deny
, q, j6 A9 z" g+ H) |Deny from all" y  a. S/ g! H% _# g1 i  o4 c
</Files>& V. X( ^  s* i
+ P/ ?% J; `6 C/ L! ?$ l

# B/ ?  Y  W! R* t5 A5 D; [4 U# r& |
/ h* \( @3 o/ d9 L8 A/ P8 q$ q4 l2 r% l) t+ p+ D4 l
禁止访问某些指定的目录:(可以用 <DirectoryMatch>   来进行正则匹配)
2 z% p: c0 }0 O# _  l! b6 b1 U+ Y6 F. Z
, s5 S7 u' _4 j0 g<Directory ~ "^/var/www/(.+/)*[0-9]{3}"> # F8 t4 ]% P7 b+ ?- U3 q* l* d
   Order allow,deny
4 L( B% K( z8 f4 Z$ t   Deny from all7 a: j" o( e2 r
</Directory>
  K! T6 @1 |1 T7 N( l) ^$ `9 d5 q  j7 t' r/ W5 n) m7 b' E
通过文件匹配来进行禁止,比如禁止所有针对图片的访问:
5 r# [+ `' h7 t3 R" x& T- x$ z<FilesMatch \.(?i:gif|jpe?g|png)$>
/ _2 e. i* b7 C% G  i1 H; m) w   Order allow,deny
" T3 b7 L5 q/ _, G% S( {; {# z; \   Deny from all! A2 w8 P5 ?! [/ F: @$ Z7 Z) G
</FilesMatch> : c% B8 I* b8 B( F+ L
' z  }8 ~8 G; ^4 K) Q, S
针对URL相对路径的禁止访问:
& P# \, ^0 d: R( w0 I. w<Location /dir/>( j+ w2 ^/ M: q/ K7 c  Y
   Order allow,deny
) S( l1 T4 S4 L7 w' |1 l   Deny from all0 W( W: R  `- g5 L7 K" j3 N
</Location>
3 e  Y; W! N5 G. s8 p1 e  j+ }* y4 o7 T! K
针对代理方式禁止对某些目标的访问(<ProxyMatch> 可以用来正则匹配),比如拒绝通过代理访问cnn.com:$ q0 q# p( K# A( r2 e$ i
<Proxy http://cnn.com/*>+ X9 y2 w5 H+ b
   Order allow,deny, G( P3 F& k/ N  f
   Deny from all
9 N% i8 u3 ?( B4 W9 }0 d4 g</Proxy>
& k2 N. a9 m7 o8 Q- q
" d- Q3 l5 F% E5 u: G, \2. 禁止某些IP访问/只允许某些IP访问 * u+ Z: O" J- N1 K/ V4 ]1 f
如果要控制禁止某些非法IP访问,在Directory选项控制:
2 @& X+ ?) b% J; x0 e9 i8 H. c<Directory "/var/www/web/">
1 @5 K7 \- X9 I( z/ w: _% I  y1 T5 d   Order allow,deny
- u9 D  d$ J4 X5 T   Allow from all
* R& A% a, M0 L   Deny from 10.0.0.1 #阻止一个IP
' j' k6 T7 N* O8 h) p5 H& v$ L) v   Deny from 192.168.0.0/24 #阻止一个IP段
1 B1 T( i! b4 V$ ^</Directory>( `$ I8 x. t) H# M8 B; a# o' W* V

8 q2 \7 ^6 K# j/ c) X只允许某些IP访问,适合比如就允许内部或者合作公司访问:
1 y$ m" I' A9 y- ?+ f<Directory "/var/www/web/">
; T, I  o/ H2 }/ @/ `+ H4 T0 [5 }   Order deny,allow
! H1 p- y: l! H# u+ S* Q; o  A/ A   Deny from all
& M! m/ B- B; e6 ?   All from example.com #允许某个域名" p( T$ e6 _# ?' O; n+ Z$ ?
   All from 10.0.0.1 #允许一个iP: q8 o# c$ ^& `7 z
   All from 10.0.0.1 10.0.0.2 #允许多个iP
1 ~( F0 E4 S# `+ Q7 y6 G- Q   Allow from 10.1.0.0/255.255.0.0 #允许一个IP段,掩码对
* [1 w. G$ h1 j9 l* x6 ^. `   All from 10.0.1 192.168 #允许一个IP段,后面不填写
9 \; i0 y3 k' j* ?   All from 192.168.0.0/24 #允许一个IP段,网络号; Y3 i# X3 N5 c8 C
</Directory>  q. h* w4 }+ d/ J, ^' L" Y
9 k% W3 R) A& b* `

6 B5 U% f' M+ u- H. a9 V3 MApache:解决办法;
2 s) F* ^- t% [- U/ s* V$ F$ k2 ^<Directory "/home/domain/public_html">
6 l; \; R3 |: j1 Y* L* AOptions -Indexes FollowSymLinks. |/ g! D$ z! k, J
AllowOverride All( w0 c# Y1 K# O) Q! F; k7 d9 M
<Files ~ ".txt">
. j& R  M% G& r3 L8 IOrder allow,deny% n6 O0 N/ N/ b4 Q  i2 n1 s
Deny from all
1 d/ n' r/ b/ Y& L5 H' J; ]</Files>. {4 J) e# O9 s0 J$ n$ U
</Directory>

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-19 18:01:42 | 显示全部楼层
一、默认情况,如果apache指定的目录没有下面项配置的“index.php index.html index.htm”文件之一,则appache会显示目录及目录下的所有文件:
& i' P8 J" T9 _# Z, O
$ K7 H3 c0 d3 f<IfModule dir_module>
% h1 G1 b+ V) h1 t    DirectoryIndex index.php index.html index.htm
3 c2 v' s( V( M! z0 T  R' m</IfModule>
1 S) ^8 ~% l2 J/ N# `+ S$ Y5 `二、在apache目录文件下找到httpd.conf文件找到如图所示Options Indexes FollowSymLinks将此句改成Options -Indexes或者去掉indexes即可
. x8 L: A$ o. C* R3 K  Y
3 \4 G  `* q; o/ u) e. f8 \/ Y" @8 P/ [+ u! W$ h$ u* v

% [5 w' P6 y6 ~; I三、其他访问配置(禁止访问某些文件/目录)
- L" Z7 Q5 S" B  U$ C: J8 {; f9 t* O9 s4 {3 n% }. e" f6 X+ @
增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:/ r; A1 B! I6 i: m  x$ b! U

1 `% W/ r1 |7 Z  }) g' `<Files ~ “.inc$”>" a. }0 x6 d$ q3 m+ O
     Order allow,deny
+ L% @, k/ L: H* S/ q/ N' u     Deny from all
  Z0 `8 C3 n$ x; D</Files>( u8 f4 [) _" R0 [  k
禁止访问某些指定的目录:(可以用 <DirectoryMatch>   来进行正则匹配)+ M' ^, N& I% V9 g! h0 L
$ w% w# o/ L$ y, G% j
<Directory ~ “^/var/www/(.+/)*[0-9]{3}”>. `: h- S* Y: {  Y. r2 k
     Order allow,deny
- l, m5 X/ R& R) Y7 R0 F; z     Deny from all
- b0 M8 G/ L6 F3 x0 H( V, _, m, [</Directory>3 z! T! @' R: H) R6 A) v$ L
通过文件匹配来进行禁止,比如禁止所有针对图片的访问:* T8 i' f3 N0 V: r& w- i: n9 W
& }. y' L( \" a2 E* h  f- A4 ~
<FilesMatch .(?i:gif|jpeg|png)$>6 P; i% P5 J! |0 H* v
     Order allow,deny
) ]" X; f& W$ G6 L# A     Deny from all
- s8 ^/ G0 Y( s7 _# n, p3 o</FilesMatch>1 r2 y) @5 q* y
针对URL相对路径的禁止访问:2 N0 J& O: w$ H! S+ i

" c9 c1 Q! [9 e<Location /dir/>
8 {4 W, d1 w9 G$ d6 p     Order allow,deny
+ s  q- W% E) u7 R' E  y     Deny from all/ D3 S, Q( F1 ~
</Location>& i, Z$ |4 I) k9 Q' l

& ]# p6 e$ G" t5 A; w

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-19 18:02:13 | 显示全部楼层
在Apache中配置禁止目录访问,即禁止游览列出的目录/文件列表的方法
: Y" i) Y, ~# @# p* _& X; F. T7 m$ h& X% p0 W
  访问网站目录时Apache默认配置为可列出目录/文件列表,即当你访问http://localhost时会列出相关的目录和文件列表,我们可以通过修改Apache配置文件httpd.conf来实现禁止列出目录/文件列表,方法如下:
, b/ Z" U  w5 j/ h  M
; S" b$ o9 Q( b# d1、打开apache配置文件httpd.conf
& X" w8 ?6 V2 D9 R  V9 C) K) ^' |) u$ N3 Q: }
2、找到
8 u9 f2 \3 @* n6 W7 U5 ~( v
- B9 C; `3 H( Y8 b
) L% P+ W9 d' G3 j
, H/ M$ n' k( Y1 J: Y8 b" q" g/ t<Directory />
& u/ S. k; P/ L' nOptions Indexes
; d, ^- m+ Y9 I# QAllowOverride None
' N) E0 ~3 G% f( S2 J, [; oOrder allow,deny# e9 L, Q9 R7 a3 d/ x. G. b1 O  E
Allow from all
2 q7 |; O9 Y( k- V) i  r  U</Directory>
& [: a/ Y3 A2 m5 s; g% [& F& T( w8 W0 w! T( l
只需要修改Options Indexes为Options None即可,注:根据PHP运行环境安装包的不同,Options Indexes也有可能是Options Indexes FollowSymLinks,一并改为Options None即可。
4 S% s' L- P# U0 p. z" z
9 \/ M9 N2 j4 n; J3、保存httpd.conf,并重启Apache即可,此时再访问http://localhost时, 报apache http 403 禁止访问错误信息
( `# s2 d8 t- R( _
" H. D" P6 R! T  Forbidden6 D' U% b4 {7 R$ U' c  t- S& B3 _
- r: D8 G% E; `* E3 w8 K9 E
  You don’t have permission to access / on this server.
! \% [$ J* O8 E
0 Y  w8 j# V# [1 ?- X- o# d9 A4 tApache单个或多个目录禁止访问方法; Z2 D7 v1 P  {, k7 k

/ j8 {6 v/ ~. u* \1 q( |& n; |  这种方法通常用来禁止访问者访问后台管理目录或者程序目录,方法如下
( v' \0 L" y4 x* h
; v4 e/ c- u- N, m& l9 J: c1、打开apache配置文件httpd.conf2 J- c, f7 G, H' T

1 S& L+ u2 ~& K8 y2、创建Directory块,比如禁止访问某个类库目录,可以这样实现" j, R$ f9 n; G3 }8 v+ M

* Y0 T- f7 ?) B# Y) u, Z9 _3 R9 Q( `8 P0 ?: _
' I8 b. @& v, e* ]1 V8 T) _
<Directory /var/www/www.leapsoul.cn/inc>
7 y; d) ~  Z; r; p0 @    Order Deny,Allow" w6 Q/ U7 ]$ h: o
    Deny from all
: K) s6 g& q4 s$ o8 d' ]/ K</Directory>0 U" O  ?7 B* d' O2 ~9 `0 E5 C

- v( j) t2 U6 n8 S上述代码实现了禁止所有用户访问www.leapsoul.cn下inc目录的功能。如要实现禁止访问所有目录中inc目录的功能,只要将
$ I9 y" H  }, j; n4 z
/ X; H9 Y( @$ P7 G4 c: e
- H# Q; p( F/ E+ L; `2 y, w! o5 a8 k' d5 C
<Directory /var/www/www.leapsoul.cn/inc>
0 m3 r" y5 F9 k
9 ], K# j  ^6 x" A% g  D$ ~更改为
* t6 {$ P7 M3 M# c( |0 H  p/ L7 k/ D9 \3 t

4 H* n( E/ n. U
! {, i% n6 U! y% G9 a* r' \: ]<Directory /var/www/www.leapsoul.cn/*/inc>
' ?5 D0 o, C1 p" H
! B6 |$ {" Z4 ?* |% |: c即可。9 D4 {* H3 a8 a( ^2 G

+ k: i: L  k: w8 I5 G/ u6 l3、重启Apache服务器。6 L. ^: m% A/ j0 w" S
: o' r% \6 _9 J8 e
其他说明
$ x/ H1 v* H% r! W/ t  \) }# ^
/ \; x& h" D8 N4 {/ T5 r1、只允许或禁止某个域名进行目录访问+ e6 V% `) z9 G: g
: h6 ?8 S- r7 m9 g3 D- v
7 w: j) T' M& F
- `( \4 u* z8 \% l) O$ V, v+ d. [& e7 u
<Directory /var/www/www.leapsoul.cn/inc>, D8 I6 s+ k& E3 ?
    Order Deny,Allow
3 t2 e8 I" c) G% s2 U: S: @    Deny from abc.com
% L+ @7 F2 e4 g6 ]+ G& F- l0 k    Allow from apache.org+ h1 u8 P' \, s& ]/ B1 x
</Directory>0 r* t7 ~2 G# O" ]2 Z6 r
4 L" T% p& U% e. \5 h4 a
上述代码实现禁止abc.com域中主机访问inc目录,允许apache.org域中主机访问inc目录的功能。" G( m+ O' E! q2 W& c: e# \: Z
2 p  K5 A+ ?1 U7 R  T  O
2、只允许或禁止某个IP进行目录访问
$ s, _9 {; N9 B: I1 Z2 O
% J* ~6 I! M) m5 N% L, R; Z2 {) O: l- t% C+ g) O

9 l$ @( W1 H) W* ^! ]( K<Directory /var/www/www.leapsoul.cn/inc># Y9 N0 j9 M$ i9 p4 _
    Order Deny,Allow: r& T  {$ e5 s& y2 A& K
    Deny from 10.1.1.29 U1 x) P7 L# D6 ]1 G( P
    Allow from 192.168.1.0/255.255.255.0
4 [0 }$ Z6 }/ U4 g</Directory>
8 {' u6 z+ ^) Q* w: q0 b: B% M# Q+ x+ u- V" f. f
上述代码实现禁止IP10.1.1.2访问www.leapsoul.cn/inc目录,允许IP192.168.1子网中的主机访问www.leapsoul.cn/inc目录的功能。
' K4 b% \1 y4 q0 f4 }& k% B1 t, Y+ k
注意: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:48 , Processed in 0.014436 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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