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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2024-1-11 16:48:35 | 显示全部楼层 |阅读模式
httpd 服务apache 开启目录遍历漏洞防御  G+ J' r6 C" [5 R: E3 X( x6 V+ e; ^
最近收到目录漏洞遍历防御
. _' u+ t: \. I4 X5 {8 v# S如何做/ c  x0 u3 S  Y8 `

- p" v/ X% o, Q# u! W- A/ m: _
7 i2 [. d: Y, I& U$ t1 P
; I+ p4 u& i$ B$ X1 e; I找到对应的httpd.conf文件
  x7 t7 M, e7 G; P6 o8 h& k  ^7 ^修改配置:$ ~- ]0 f$ M# c$ }; ?2 X
<Directory "/var/www/html">, i5 _- o* ~4 R2 D2 Q6 y
: v) a3 w! G# B6 a( F, ]* @
Options Indexes FollowSymLinks ExecCGI% R& f5 R; f2 a( l/ R  |  h0 G

$ S% x/ X7 R# ?) C. D% M/ x</Directory># o0 ?6 C6 e* M6 B, y0 {; U' Y
+ \, N  R& [3 |+ v; M
修改成下面的方式- G- x$ i9 e: V, j7 f- v. X# i" k
<Directory "/var/www/html">
( S- U0 c' o. ~4 A3 {Options -Indexes +FollowSymLinks +ExecCGI; T/ p% h* r  e4 |
</Directory>
; M; I1 ^" m1 Z* Z* E- o) O3 R+ m; g* }4 e* H0 R
重启apache服务即可。) K- v  x, T4 o; n4 w7 _! U

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-11 16:49:14 | 显示全部楼层
访问结果如下:: ?# ?9 C0 }9 K$ c2 A0 `
Forbidden
4 o; N. p* p* I. n3 CYou don't have permission to access /app/ on this server.

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-19 17:32:32 | 显示全部楼层
我们来看俩段通常对上传目录设置无权限的列子,配置如下:
" [5 ^3 g% v  H0 g. N! ?9 q! k6 ^6 P7 \% x, f* X
代码如下:
% G( @8 O  M( [& F, B' ^" s) ~
+ y$ Z6 p. H8 c# Q1% p5 ^. M9 [1 Z* u/ ~4 h
2
% d, r: D, r+ m) I3
) z& ]2 d: ^. ]4
0 H9 K  G1 \. ^3 s( J/ a5( m8 S, a+ z9 m
6* v  [2 K9 q0 G
<Directory "/var/www/upload">6 l  s1 u- n0 Q: F% a* {% _+ J
<FilesMatch ".php">; c- f; I. U* {8 {
Order Allow,Deny
4 T3 y5 a. F: T) NDeny from all5 @! W! A* N8 F; X+ w# J# n
</FilesMatch>
$ X2 ^; N4 z- w/ f</Directory>
$ d2 M- z0 N. C. W3 ?* l
( h0 I( W' s0 W0 w& X. d1 K: ^! |3 y! N9 f9 h: }5 I- p0 }
这些配置表面上看起来是没什么问题的,确实在windows下可以这么说。
( `$ k: @3 z7 Z7 U! c. V但是linux就不同了,大家都是知道的linux操作系统是区分大小写的,这里如果换成大写后缀名*.phP一类就pass了
4 \% w$ m5 t; O1 f: P/ K) ~2 \3 `9 J# `' a; O. i
这里我说下我个人的解决方法,代码如下:
; [' A$ @3 b/ Y3 h8 _; k& r* C. Y9 M/ G+ [4 |! J0 l" X- N
<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload">
+ d- w! u. W% ?ErrorDocument 404 /404/404.html
! U* }5 b2 B$ Z& H9 OErrorDocument 403 /404/403.html) _% l9 _0 a. `: B7 }
<FilesMatch "\.(?i:php|php3|php4)$"> // ?是尽可能多的匹配.php的字符串,i是不区分大小写,然后冒号后面跟上正则表达式,也可以写成:<FilesMatch "\.(php|php3)$">9 T& g, v* Q, q. [, k9 T
Order allow,deny
9 g2 R* Q5 c/ E% ^Deny from all
$ z. M* m* }0 f" T" c& S, ]6 m</FilesMatch>
: F3 V3 r! i: t+ ^- }9 F% a6 M</Directory>. F2 q+ d2 r7 G' ?

2 d. W; p4 q6 f! x  W) l上面的意思就是说,<Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> 内目录路径下所有php文件不区分大小写,通过order,allow,deny原则判断拒绝执行php文件,对nginx同样也是可应用的0 _7 B7 S; a% O
. `$ o% e* l) ^" m1 `
另外一种方法,是设置在htaccess里面的,这个方法比较灵活一点,针对那些没有apapche安全操作权限的网站管理员:
  u1 Z. j* B% e8 iApache环境规则内容如下:Apache执行php脚本限制 把这些规则添加到.htaccess文件中9 `/ m; M$ R, I* I4 m
代码如下:
8 s, Y5 N) g6 u) F; q6 Y0 y" d8 [9 s4 Z
15 S6 r# @; J1 n
2
$ y3 W8 S& s6 O4 ^. z0 D3! w! m1 i/ D$ H+ i( {3 }1 O* |7 t
4
* @) K6 i) f3 HRewriteEngine on RewriteCond % !^$" j: o/ E; Y7 P( h: L
RewriteRule uploads/(.*).(php)$ – [F]4 O5 }1 ]4 Q. X  H/ v
RewriteRule data/(.*).(php)$ – [F]
7 h4 S8 g, R& r! G& S% w* rRewriteRule templets/(.*).(php)$ –[F]
. `1 p$ @* t6 W- ?% r6 Q
. \' x  H' @  ]( G1 ]5 }3 b
5 r1 ~$ }0 e8 V5 l) Q另外一种方法,代码如下:
  Z- D7 w, p' }2 p  _& p; j9 m
2 R3 o# K. B5 Y" |' q<Directory "/var/www/upload">0 N! m  h2 h- Q
php_admin_flag engine off" W, l1 C( B( W  s1 T& W
</Directory>
; e" O& h. J  l0 G" }" W" b6 [3 A7 g
此方法我在win系统下面测试失败了,重新启动apapche出现下面的错误信息:
) L% v4 M: A8 k* I8 fThe Apache service named reported the following error:0 b/ M& c& K" k8 ?- T! l  ^
>>> Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration.5 _, Y1 W  i: C* F5 [

1 {6 d! [" `( x" V. B: J这里我就不具体说明这个解决办法了,因为禁止php执行的方法,大家看自己的需求去设置就可以了!
  Q+ m* d$ j  ?0 S" z7 x! g" V" Z* l6 e+ \9 V
【apache配置禁止访问】
: T" G6 n; H& y0 b4 o8 A1. 禁止访问某些文件/目录1 r$ b/ K4 ]% d3 @3 `1 ^
增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:  A+ e% A  @3 f2 r+ ?
<Files ~ "\.inc$">( M0 m1 b8 O9 B  \8 M! V) r- T  b
   Order allow,deny
8 q4 B0 [% A( J$ y8 E/ q0 H" y+ X# m* z   Deny from all, N2 [- P1 u4 X+ Y6 L
</Files># T( ~5 Y! R9 `; D- G, |5 w4 L
2 }& _9 ?  d6 z0 Z
多个的话可以这样配置已验证过:1 l+ R' i$ {# a$ M. q3 g

) ^. U( g  z# Q) q9 X9 y7 A& j#不允许访问 .inc .txt .sql .conf扩展名的文件
! ?: e$ ?) Y+ a  `  f( k! b+ L<Files ~ "\.(inc|txt|sql|conf)$">
$ y) k" [0 B% N8 z1 s' @0 aOrder allow,deny
$ H* ^1 i) j- S) G5 Y" IDeny from all: {3 P7 S% h, l& h9 J9 U
</Files>
( L" o. ?( H" @% ^5 j" g
  T5 @; A% r/ h2 m- L1 m: R3 j' }. K  n0 Z* I
( O& x; W5 F) ]  _3 Q2 ~3 K

3 }8 E9 }4 a$ u3 x禁止访问某些指定的目录:(可以用 <DirectoryMatch>   来进行正则匹配)( f4 U0 ^# W( R, p, U1 f9 _

4 \' _7 A+ H( p* y<Directory ~ "^/var/www/(.+/)*[0-9]{3}"> 0 B* K) J- O7 ^" n, B2 a% e- j
   Order allow,deny1 q( ]% S; D0 }& }
   Deny from all
  }! V% R. _5 }- R0 w</Directory>6 O3 Q2 [- g9 x# p. r# P- u

$ I9 U5 `. [3 i# b通过文件匹配来进行禁止,比如禁止所有针对图片的访问:
" }# P, k/ r* l% \6 C5 A<FilesMatch \.(?i:gif|jpe?g|png)$>
9 q$ P4 u2 O% |5 M; Y   Order allow,deny% \! q7 B7 h  L; [8 t4 T( Z
   Deny from all  [; S' }- r, Q$ f5 s, [
</FilesMatch>
; C% m1 C  ]( X7 ~# n- `- T
2 h8 U4 N0 h' A* j针对URL相对路径的禁止访问:: [/ R3 u. d/ G1 b  Q$ U+ C
<Location /dir/>
! M: T/ `$ F: V   Order allow,deny4 g: O. p. I) W4 O
   Deny from all
+ f2 r+ C6 @( D</Location> 8 C- u7 I' ^2 c5 h
( S( \# v$ t6 P# ?
针对代理方式禁止对某些目标的访问(<ProxyMatch> 可以用来正则匹配),比如拒绝通过代理访问cnn.com:, a- A$ S& A# G" i* ]: o+ _! ]
<Proxy http://cnn.com/*>
2 V& @- e  e( B* w1 c* g3 S) a   Order allow,deny& V2 j! ~* x! H/ r+ g
   Deny from all
# w# x  d2 i4 [8 X1 @- a" w</Proxy> ' r0 T" Y4 u( t' ]* @
6 Z/ n9 ]$ R$ V/ |
2. 禁止某些IP访问/只允许某些IP访问
0 v0 S& ?* ?& |) x( U+ ^如果要控制禁止某些非法IP访问,在Directory选项控制:9 U4 c' D% {4 A' ?. t
<Directory "/var/www/web/">
* W6 J. z7 U7 C7 L   Order allow,deny& x. D, u' X- ]2 L2 C$ R
   Allow from all1 n- I6 w$ N% v
   Deny from 10.0.0.1 #阻止一个IP
6 n5 t* F. b$ h; `   Deny from 192.168.0.0/24 #阻止一个IP段
$ s5 `5 b  N7 b. W' C% k, F</Directory>
* V5 ]. B( z0 H8 s/ Q' v+ L% b2 }$ B3 i1 X) x
只允许某些IP访问,适合比如就允许内部或者合作公司访问:! b6 d7 R8 d" W6 Y, L6 V( a/ K) o
<Directory "/var/www/web/">! Q% h. [% _) b" `8 g/ N
   Order deny,allow
/ s1 o: \% _5 ~3 f/ v9 Z! Z# F8 _% r   Deny from all
* |, i% B5 ~/ \& ?% J   All from example.com #允许某个域名
7 x; z8 M& c4 H! e2 r   All from 10.0.0.1 #允许一个iP
, W' [" R& {9 m$ f% R( T7 D) I8 V   All from 10.0.0.1 10.0.0.2 #允许多个iP# S" q+ U6 T! }  n9 \- A- T  b  u6 L
   Allow from 10.1.0.0/255.255.0.0 #允许一个IP段,掩码对
. p% b& b& G$ N1 i! R   All from 10.0.1 192.168 #允许一个IP段,后面不填写3 x! B2 n, A& \0 V+ ^- b' F
   All from 192.168.0.0/24 #允许一个IP段,网络号  Y5 n/ G1 C9 S
</Directory>
: _+ V" D" V# a+ s/ \  {6 c( R" m& t6 u) A' R9 w* a8 o% B: ^0 \

1 _0 d! v2 i0 q; Y% V: n5 uApache:解决办法;
* w4 L& f3 g$ c; [; M6 g  R+ ^3 \( |<Directory "/home/domain/public_html">
" H- ~* O2 J' @" m8 L- [0 d1 C# x- QOptions -Indexes FollowSymLinks6 K3 P! U  x+ I# `: g- V
AllowOverride All  _6 I0 E# S% B6 l9 q8 D/ o0 p6 G
<Files ~ ".txt">
# {  @5 S% C, L( ~4 xOrder allow,deny! ?5 F$ P  }7 s! i& X1 v" W
Deny from all
1 W" z  o1 s0 y" f  X0 y</Files>' ]3 d& N# ^$ x
</Directory>

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-19 18:01:42 | 显示全部楼层
一、默认情况,如果apache指定的目录没有下面项配置的“index.php index.html index.htm”文件之一,则appache会显示目录及目录下的所有文件:
! I8 b: ~) `  A7 u; {& N( s$ n) G5 j# H$ Y; ~
<IfModule dir_module>
/ h6 \' m6 m2 B  {" p$ h* i    DirectoryIndex index.php index.html index.htm
% X: z4 y* R: O7 _6 C# ~</IfModule>
- h0 e9 W3 c7 ^0 s+ M9 u, G' o二、在apache目录文件下找到httpd.conf文件找到如图所示Options Indexes FollowSymLinks将此句改成Options -Indexes或者去掉indexes即可& j8 @  i$ t! X% T  k% O

4 r4 I# t; _( b) C7 _& e+ h% `* m5 y6 B; I7 U# ^9 k+ q

6 Z2 Q5 N& D& O  b9 h三、其他访问配置(禁止访问某些文件/目录)) o" J8 H6 s$ W; Y2 a4 d

2 @' r7 f8 e, K6 e# u5 k增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:4 ?8 r8 c* r) I& r: o0 `3 W/ k1 y

+ v! R, v! @. D2 A4 d* f<Files ~ “.inc$”>
' M  D3 u& |: e, Q+ h& c' I) m0 Q     Order allow,deny
8 i0 |; y8 L' ^     Deny from all
) {2 R4 ?( _/ B2 f</Files>
5 X9 h5 @* T' Z( W4 A禁止访问某些指定的目录:(可以用 <DirectoryMatch>   来进行正则匹配)$ G! p3 j7 B1 I1 H6 u

8 L; L0 ?4 y) i; d<Directory ~ “^/var/www/(.+/)*[0-9]{3}”>
0 C) l0 N( h5 ~  B- I     Order allow,deny
7 _& M* I' n4 u4 K$ K     Deny from all. S% D- h; C* S
</Directory>* L3 Z5 B8 w+ b: a# E" R3 k6 r
通过文件匹配来进行禁止,比如禁止所有针对图片的访问:
, S. I6 h5 B6 l) Y5 ^4 {2 u) u9 w7 ]/ _: D+ X+ d4 h) Q
<FilesMatch .(?i:gif|jpeg|png)$>
4 k: V% U& a1 M3 n- `     Order allow,deny! j& T5 o7 z- i* I1 L
     Deny from all
& k/ R% b2 F" T$ P6 O5 r</FilesMatch>" Y$ }5 A- F; P
针对URL相对路径的禁止访问:( q/ N$ Q5 z6 H; Z( |
+ L6 \( i; ~. [7 G8 Y  A' z
<Location /dir/>, H5 z- D: ?6 k
     Order allow,deny
& E2 N- o! y. X% v/ q     Deny from all
+ R8 }* [& m2 \+ G9 Z, y</Location>5 N% g5 I9 C* W  K; K
1 M  C& l- F% a0 D9 g1 _6 @

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2024-1-19 18:02:13 | 显示全部楼层
在Apache中配置禁止目录访问,即禁止游览列出的目录/文件列表的方法3 A; C5 B2 |( Z/ K: f6 C9 {

% l2 y9 f+ C# A% _( }, G  访问网站目录时Apache默认配置为可列出目录/文件列表,即当你访问http://localhost时会列出相关的目录和文件列表,我们可以通过修改Apache配置文件httpd.conf来实现禁止列出目录/文件列表,方法如下:
+ F9 a* W6 d& V, K% p8 i/ g3 h3 \! w6 S, y9 Z$ W0 T* s$ }" L
1、打开apache配置文件httpd.conf* X4 ^" X. J7 w  _7 q; ~9 ?1 n
+ @# Q" {7 ~4 y% W, W1 h
2、找到: S% O' C/ ~) L0 ?2 j

1 ~  S+ `  C7 R3 ^8 G3 z- B( e* j& V
( D7 y2 X: Q) l, t7 ^& @. S1 _' S3 ^  h( k* u- T* s' m
<Directory />2 S; l$ ?' v9 R: p. h
Options Indexes3 ^4 s- R6 O2 c& j# C
AllowOverride None7 R3 o: A9 P4 _0 k: f& z( u. ^
Order allow,deny
# U  p  A  d# N4 O- Y! |! ]" a# YAllow from all' `8 F- [) a+ Z7 f$ K# Y) M: U
</Directory>6 B. O: c. K1 d  ]. r5 g
& j) E- B9 x  B, N
只需要修改Options Indexes为Options None即可,注:根据PHP运行环境安装包的不同,Options Indexes也有可能是Options Indexes FollowSymLinks,一并改为Options None即可。
7 H1 b+ x9 ]$ l2 {& R1 n) Q, p6 z8 Q/ C! R
3、保存httpd.conf,并重启Apache即可,此时再访问http://localhost时, 报apache http 403 禁止访问错误信息
' A3 M4 ?; O2 }( [
0 j+ k% g. Y, \& r2 l8 [! q  Forbidden
4 h% e  w  V8 j. E- J0 {
5 q& n& \8 M8 r  You don’t have permission to access / on this server.
+ P( ]5 W! _) E' v" k; [2 ~- ~; b: R, O  r9 u% o
Apache单个或多个目录禁止访问方法
4 C) V( V% C5 `. f1 y& W7 @
- F$ X' i/ A0 z4 Z: t  这种方法通常用来禁止访问者访问后台管理目录或者程序目录,方法如下
* B, ?0 p7 q5 B
9 b6 z, H  Y8 Z7 P3 S1、打开apache配置文件httpd.conf
5 ~6 }5 d, Y$ x2 j
) |! v3 |6 P. x2 L( `! X" F2、创建Directory块,比如禁止访问某个类库目录,可以这样实现
6 u8 }7 w. p6 _% @: g! _& B5 P# X# a8 c
" ?1 f! O0 z) ~. f9 A
( E+ `9 F  x  {" ?2 Q5 ]% q$ M. A: c( E: k
<Directory /var/www/www.leapsoul.cn/inc>( _. N' ^9 Q( s1 W' s# l. t
    Order Deny,Allow
2 _9 i5 C! T( c. W# W. [    Deny from all
2 w- P- [6 z# N9 ?1 B+ |</Directory>
5 ~8 o! M) G& ?' f# \- |8 w3 L- K8 j. n- \9 b  q
上述代码实现了禁止所有用户访问www.leapsoul.cn下inc目录的功能。如要实现禁止访问所有目录中inc目录的功能,只要将
" ~: T8 ^* C- ?" B- r8 A7 H& ~$ \, x% L: D; M: X: E* Q. s
7 Y% ]" m$ V/ u7 B' I% R# o5 K1 E

# M* X+ e5 A& C( N  ]6 [<Directory /var/www/www.leapsoul.cn/inc>* a: B, A9 f  ^8 ^6 f

/ u: W4 o1 Z4 r0 T- n- q) d更改为
) L9 F" q9 n! \" {+ x: c3 _, x  ^. I- f
! L& {: T( M+ {2 Q$ n
/ y( e3 x( q1 J) Q
<Directory /var/www/www.leapsoul.cn/*/inc>- J* i5 H( F: h$ d# _

" {) ]; ~" a& t, S( k+ x即可。* k+ u3 w4 u9 `  b$ V+ m
) D& e: @4 J* r" z$ y' }
3、重启Apache服务器。5 |3 v% {7 {4 m1 x

0 U) O" T& ]$ \9 o8 z9 d3 ~其他说明  i/ f+ f- K8 p; Q$ m

$ Y5 x6 q5 a0 ?- s) _; B: c7 @1、只允许或禁止某个域名进行目录访问
- U% P- |# k- o  l( C  b! {& C& }9 r* S6 ~% A

6 M% L  f5 B! D0 w( f) e9 V" Z' H: g! I* j) F" D$ H/ U. z9 a) H0 o+ Q7 Y
<Directory /var/www/www.leapsoul.cn/inc>& U1 A& ~! p7 t7 Z
    Order Deny,Allow
2 I) p' j& y7 w" D    Deny from abc.com
8 Q& i% M, a: ~) w8 ]' o- E8 D    Allow from apache.org
- |( t, U( Z5 r7 b* q! I: s4 `</Directory>! c2 n, p7 Z+ J- O
+ F2 x) q$ v* f% m! J
上述代码实现禁止abc.com域中主机访问inc目录,允许apache.org域中主机访问inc目录的功能。1 c4 V1 d3 s/ N5 d" z

. Y( ?, i, w! [( m3 D( |2、只允许或禁止某个IP进行目录访问% ^4 V6 j' ?9 v% K( U
9 O: r# T* \# C+ M3 U4 V' _, ?

8 f( R1 P. K$ k1 f6 b1 f* m3 L4 g- `/ ~8 E3 I8 l
<Directory /var/www/www.leapsoul.cn/inc>
$ q! A" M& [1 \+ R4 Q! F    Order Deny,Allow
* ?7 z5 A5 d+ Z/ D* T    Deny from 10.1.1.23 X' L4 X' n" S- R8 v) ~  Z
    Allow from 192.168.1.0/255.255.255.0
' G5 o% [5 [2 ^9 E* f0 ~: ^</Directory>
* N( A$ ?* o% N$ D( k; U3 N$ P3 Q! E2 ?2 }1 P- K. v
上述代码实现禁止IP10.1.1.2访问www.leapsoul.cn/inc目录,允许IP192.168.1子网中的主机访问www.leapsoul.cn/inc目录的功能。
* q1 Q  G9 J; w5 F+ K' w
3 j, L" B0 @+ [. k/ D4 Y/ B注意: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 03:04 , Processed in 0.028191 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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