admin 管理员组文章数量: 887006
渗透测试
- 一、Windows系统加固
- 1、Windows 操作系统
- 2、Windows系统加固的策略
- 3、Windows 账户及安全策略
- 3.1 账户安全设置
- 3.2 禁用guest 账户
- 3.3 重命名Administartor 账户
- 4、关闭135、139、445 隐患端口
- 4.1 关闭135 端口
- 4.2 关闭139端口
- 4.3 关闭445端口
- 4.4 修改3389端口
- 二、Linux系统加固
- 1、Linux 防火墙
- 2、Linux 账户
- 3、AWK 查找工具
- 4、防火墙只允许常规服务端口
- 5、查找隐藏的超级用户
- 6、设置系统密码策略
- 7、阻止系统响应任何从外部/内部来的 ping 请求
点击跳转:
渗透测试——一、网络扫描
渗透测试——二、抓包分析
渗透测试——三、脚本编写
渗透测试——四、服务漏洞
渗透测试——五、网站漏洞——SQL注入
渗透测试——六、网站漏洞——文件上传
渗透测试——七、网站漏洞——命令注入和跨站请求伪造(CSRF)
渗透测试——八、网站漏洞——XSS跨站脚本攻击
渗透测试——九、系统加固
渗透测试——十、常用工具及命令列举
一、Windows系统加固
1、Windows 操作系统
Microsoft Windows 操作系统是美国微软公司研发的一套操作系统,它问世于1985 年,起初仅仅是 Microsoh - DO 拟环境,后续的系统版本不断更新升级,不但易用,而且是当前应用最广泛的操作系统。
Windows 系统常见目录
目录 | 说明 |
---|---|
system32 | 存放系统配置文件 |
SysWOW64 | Windows操作系统的子系统 |
Config/SAM | 存放 Windows 账号和密码 |
etc/hosts | DNS解析文件 |
Program files/Program files ( x86) | Windows程序目录(32位程序安装在x86 目录下) |
Perflogs | 日志目录 |
Windows 系统常用指令
命令 | 说明 |
---|---|
ver | 查看系统版本 |
hostname | 查看主机名 |
ipconfig/all | 查看网络配置 |
net user/localgroup/share/config | 查看用户/用户组/共享/当前运行可配置服务 |
at | 建立或查看系统作业 |
netstat | 查看开放端口 |
secpol. msc | 查看和修改本地安全设置 |
services. msc | 查看和修改服务 |
eventvwr.msc | 查看日志 |
regedit | 打开注册表 |
whoami | 查看当前操作用户的用户名 |
net命令的使用
命令 | 说明 |
---|---|
net user abc /add | 创建 (空密码) 账户 abc |
net user abc | 查看账户 abe 的详细信息 |
net user abc /del | 删除账户 abc |
net user abc 123 /add | 创建普通账户 abc,密码为123 |
net localgroup administrators abc /add | 把abc 用户加人管理员组 |
net localgroup administrators abc /del | 把 abc用户退出管理员组 |
net user abc /active: yes [no] | 启用/停用abc账户 |
net localgroup admin /add [ del] | 新建/删除组 admin |
net share | 查看本地开启的共享 |
netstat | 查看开启的端口 |
Windows系统常见的开放端口
端口 | 说明 |
---|---|
80/8080/8081 | HTTP协议代理服务器常用端口号 |
443 | HTTPS协议代理服务器常用端口号 |
21 | FTP(文件传输协议) 协议代理服务器常用端口号 |
24 | Telnet(远程登录)协议代理服务器常用端口号 |
22 | SSH (安全登录)、SCP (文件传输) |
1521 | Oracle 数据库 |
1433 | MSSQL Server 数据库 |
3306 | MySQL数据库 |
25 | SMTP(简单邮件传输协议) |
2、Windows系统加固的策略
Windows 操作系统作为目前个人电脑中用得最广泛的操作系统,从它诞生以来,总存在些安全漏洞,如缓冲区溢出漏洞、TCP/IP 协议漏洞、Web 应用安全漏洞、开放端口的安全漏洞等。以下是一些 Windows 加固的基本策略;
- 1、保护账号。
- 2、设置安全的密码。
- 3、设置屏幕保护密码
- 4、关闭不必要的服务
- 5、关闭不必要的端口
- 6、开启系统审核策略
- 7、开启密码策略。
- 8、开启账户锁定策略
- 9、关闭系统默认共享。
- 10、禁止 TTL判断主机类型
- 11、修补操作系统漏洞。
3、Windows 账户及安全策略
3.1 账户安全设置
设置方法:单击“开始”一“运行”,输入“secpol.msc”,Windows 账户策略设置界面,账户策略见表。
Windows 账户策略
选项 | 要求 |
---|---|
密码必须符合复杂性要求 | 启用 |
密码长度最小值 | 8 个字符 |
密码最长使用期限 | 30天 |
强制密码历史 | 3个记住的密码 |
账户锁定时间 | 30 min |
复位账户锁定计数器 | 30 min之后 |
3.2 禁用guest 账户
右击“我的电脑”,单击“打开”一“计算机管理”一“本地用户和组”一“用户”“Guest”,右击,单击“属性”一“常规”,选择“账户已禁用”。也可以使用cmd 命令“net user guest/active:no”
3.3 重命名Administartor 账户
重命名Administartor账户,可增加账户的安全性,如图7-1-4 所示。也可以使用 Windows命令“wmic useraccount where name ='Administrator' call Rename test
进行重命名。
4、关闭135、139、445 隐患端口
在针对 Windows 进行攻击时,135、139、445 端口往往成为黑客入侵的端口,以下演示如何关闭3 个端口。首先查看系统的开放端口:
4.1 关闭135 端口
单击“开始”一“运行”,输入“dcomcnfg”,单击“确定”按钮,打开组件服务。右击“我的电脑”,单击“属性”,在默认属性中取消勾选“在此计算机上启用分布式 COM”。选择“默认协议”选项卡,选中“面向连接的TCP/IP”,单击“移除”一“确定”按钮,设置完成。
打开“开始”菜单,单击“运行”,输入“regedit”,进入注册表,定位到HKEY_LOCALMACHINE\SOFTWARE\MicrosofRpc,右击“Rpc”,单击“新建项”,输人“Intermet”,然后重启,查看系统端口,135 端口被关闭了。
4.2 关闭139端口
右击“网上邻居”,单击“属性”,打开“本地连接 属性”窗口,选中“Internet 协议4(TCP/IPv4)”,单击“常规”选项卡,单击“高级”按钮,在“WINS”选项卡中选中“禁用TCP/IP 上的 NetBIOS”。重启计算机,端口状态139 端口被关闭了。
4.3 关闭445端口
在注册表 HKEY_LOCALMACHINE\SYSTEM\CurrentControlSet Services NetBT\Parameters目录下,新建“SMBDeviceEnabled”项,类型为REG_DWORD,键值为0。
或者使用命令行指令:reg add"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSetservices\NetBT”/vSMBDeviceEnabled/ REGDWORD/d0/f
。
依次单击“开始”一“运行”,输入“services.msc
”,进入服务管理控制台,找到“Server”服务,双击进入管理控制页面,把服务的启动类型更改为“禁用”,服务状态更改为“停止”,最后单击“应用”按即可。端口状态,445 端口被关闭了。
4.4 修改3389端口
3389是 Windows 远程桌面端口,通过它可以控制 Windows 系统,为了安全,可以修改这个端口。两个注册表路径为:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp\PortNumber
HKEY_LOCALMACHINESYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDPTcp\PortNumber
它们的默认值是 3389,修改成 445 端口。
由于445 端口上的服务改成了远程桌面服务,用Kali 扫描该主机,判断服务类型时,445 端口的服务描述中会出现问号。
二、Linux系统加固
1、Linux 防火墙
Iptables 防火墙可以用于创建过滤 (filter) 与 NAT 规则。所有 Linux 发行版都能使用Iptables,因此,理解如何配置 Iptables 将会帮助用户更有效地管理 Linux 防火墙。
首先介绍Iptables 的结构:Iptables-+Tables-Chains-Rules。简单地讲,Tables 由 Chains组成,而 Chains 又由 Rules 组成。
(1) Iptables 的表与链
Iptables 具有 Filter、NAT、Mangle、Raw 四种内建表
- Filter 表。
Filter 是 Iptables 的默认表,因此,如果没有自定义表,那么就默认使用 Filter 表,它具有以下三种内建链:
- 1、INPUT链,处理来自外部的数据。
- 2、OUTPUT链,处理向外发送的数据。
- 3、FORWARD 链,将数据转发到本机的其他网卡设备上。
- NAT表。
NAT表有三种内建链:
- 1、PREROUTING链,处理刚到达本机并且路由还未转发的数据包。它会转换数据包中的目标IP地址(Destination IP Address),通常用于 DNAT (Destination NAT)。
- 2、POSTROUTING链,处理即将离开本机的数据包。它会转换数据包中的源IP 地址(Source IP Address),通常用于 SNAT (Source NAT)。
- 3、0UTPUT链,处理本机产生的数据包。
-
Mangle 表。
Mangle 表用于指定如何处理数据包。它能改变TCP头中的OS位。Mangle 表具有五个内建链:PREROUTING、OUTPUT、FORWARD、INPUT、POSTROUTING -
Raw 表。
Raw 表用于处理异常,它具有两个内建链:PREROUTING和OUTPUT
(2) Iptables 规则 (Rules)
牢记以下三点是理解 Iptables 规则的关键
- 1、规则包括一个条件和一个目标 (target)
- 2、如果满足条件,就执行目标中的规则或者特定值。
- 3、如果不满足条件,就判断下一条规则。
下面是可以在目标里指定的特殊值:
- ACCEPT,允许防火墙接收数据包。
- DROP,防火墙丢弃包。
- QUEUE,防火墙将数据包移交到用户空间。
- RETURN,防火墙停止执行当前链中的后续规则,并返回调用链 (the calling chain)中。
如果执行 iptables -list,将看到防火墙上的可用规则。下例说明当前系统没有定义防火墙,可以看到,它显示了默认的 Filter 表,以及表内默认的INPUT 链、FORWARD链、OUTPUT链。
#iptables -t filter-list
Chain INPUT(policy ACCEPT)
target prot opt source destination
Chain FORWARD(policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
查看Mangle表:
#iptables -t mangle -list
查看NAT表:
#iptables -t nat -list
查看 Raw 表:
#iptables -t raw -ist
注意:如果不指定 -t 选项,就只会显示默认的 Flter 表。因此,以下两种命令形式是个意思:
#iptables -t filter -list
或者
#iptables-list
下例表明在 Filter表的INPUT链、FORWARD链、OUTPUT 链中存在规则
# iptables -list
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall -1 -INPUT all 0.0.0.0/0 0.0.0.0/0
Chain FORWARD(policy ACCEPT)
num target prot opt source destination
1 RH-Firewall -1 -INPUT all 0.0.0.0/0 0.0.0.0/0
Chain FORWARD(policy ACCEPT)
num target prot opt source destination Chain RH -Firewall-1 -INPUT(2 references)
num target prot opt source destination
1 ACCEPT all - 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp - 0.0.0.0/0 0.0.0.0/0
icmp type 255
3 ACCEPT esp - 0.0.0.0/0 V0.0.0.0/0
4 ACCEPT ah - 0.0.0.0/0 0.0.0.0/0
5 ACCEPT udp - 0.0.0.0/0 224.0.0.251
udp dpt;5353
6 ACCEPT udp - 0.0.0.0/0 0.0.0.0/0
udp dpt:631
7 ACCEPT tcp - 0.0.0.0/0 0.0.0.0/0
tcp dpt:631
8 ACCEPT all - 0.0.0.0/0 0.0.0.0/0
state RELATED,ESTABLISHED
g ACCEPT tcp - 0.0.0.0/0 0.0.0.0/0
state NEW tcp dpt;22
10 REJECT all - 0.0.0.0/0 0.0.0.0/0
reject -with icmp -host -prohibited
以上输出包含下列字段:
- num:指定链中的规则编号
- target:前面提到的目标的特殊值
- prot:协议 TCP、UDP、ICMP 等
- source:数据包的源IP 地址。
- destination:数据的目标IP 地址
(3)清空所有 Iptables 规则
在配置Iptables 之前,通常需要用iptables -list 命令或者iptables - save 命令查看有无现存规则,因为有时需要删除现有的 Iptables 规则:
iptables -flush
或者
iptables -F
这两条命令是等效的。但是并非执行后就可以了,仍然需要检查规则是不是真的清空因为有的 Linux 发行版上这个命令不会清除NAT 表中的规则,此时只能手动清除:
iptables -t NAT -F
(4) 永久生效
当删除、添加规则后,这些更改并不能永久生效,这些规则很有可能在系统重启后恢复原样。为了让配置永久生效,根据平台的不同,具体操作也不同。下面进行简单介绍:
- 1、Ubuntu。
首先,保存现有的规则:
iptables -save > /etc/iptables,rules
然后新建一个bash 脚本,并保存到/ete/network/if - pre - up.d/目录下:
#! /bin/bash
iptables -restore < /etc/iptables.rules
这样,每次系统重启后,Iptables 规则都会被自动加载
注意:不要尝试在.bashrc 或者profle 中执行以上命令,因为用户通常不是 root,并且只能在登录时加载Iptables 规则。
- 2、CentOS、RedHat.
保存Iptables 规则:
service iptables save
重启Iptables 服务:
service iptables stop service iptables start
查看当前规则:
cat/etc/sysconfig/iptables
(5)追加 Iptables 规则
可以使用iptables -A 命令追加新规则,其中-A 表示 Append。因此,新的规则将追加到链尾。
一般而言,最后一条规则用于丢弃 (DROP) 所有数据包。如果已经有这样的规则了并且使用-A 参数添加新规则,那么就没有意义了。
- 1、语法。
iptables -A chain firewall -rule
-
- -A chain,指定要追加规则的链
-
- firewall -rule,具体的规则参数。
-
2、描述规则的基本参数。
以下这些规则参数用于描述数据包的协议、源地址、目的地址、允许经过的网络接口以及如何处理这些数据包。这些描述是对规则的基本描述。 -
- -p,协议 (protocol)。
指定规则的协议,如TCP、UDP、ICMP 等,可以使用all 来指定所有协议如果不指定 -p 参数,则默认是 all 值。
可以使用协议名 (如TCP) 或者是协议值 (比如6代表TCP) 来指定协议。映射关系通过
- -p,协议 (protocol)。
/etc/protocols
查看,还可以使用-protocl 参数代替-p 参数。
-
- -s,源地址 (source),指定数据包的源地址。参数可以是 IP 地址、网络地址、主机名。例如,-s 192.168.1.101 指定P 地址;-8 192.168.110/24 指定网络地址。如果不指定一s参数,就代表所有地址。还可以使用-src 或者 - source。
-
- -d,目的地址 (destination),指定目的地址。参数和-s相同。还可以使用 -dst 或者dlestinalion o
-
- -j、执行目标(jump to target)。
-
- -j指定了当与规则匹配时如何处理数据包。可能的值是 ACCEPT、DROP、QUEUERETURN、MASOUERADE。
还可以指定其他链作为目标。
注:MASOUERADE,地址伪装,是 snat 中的一种特例,可以实现自动化的snat。
- -j指定了当与规则匹配时如何处理数据包。可能的值是 ACCEPT、DROP、QUEUERETURN、MASOUERADE。
-
- -i,输入接口 (input interface)。
-
- -i指定了要处理来自哪个接口的数据包。
这些数据包即将进入INPUT、FORWARD、PREROUTING
链。
例如,-ietho 指定了要处理经由 etho 进入的数据包。
如果不指定 -i参数,那么将处理进入所有接口的数据包。
如果出现!-i eth0
,那么将处理所有经由 eth0 以外的接口进人的数据包
如果出现-i eth+
,那么将处理所有经由eth 开头的接口进入的数据包。
还可以使用-in -interface参数
- -i指定了要处理来自哪个接口的数据包。
-
- -o,输出 (output interface)。
-
- -o指定了数据包由哪个接口输出。
这些数据包即将进入FORWARD、OUTPUT、POSTROUTING
链。
如果不指定 -o选项,那么系统上的所有接口都可以作为输出接口。
如果出现! -o eth0
,那么将从 eth0 以外的接口输出。
如果出现-o eth +
,那么将仅从eth 开头的接口输出。
还可以使用-out -interface
参数
- -o指定了数据包由哪个接口输出。
- 3、描述规则的扩展参数。
对规则有了基本描述之后,有时还希望指定端口、TCP 标志、ICMP 类型等内容。 -
- -sport,源端口 (source port)。针对
-p tcp
或者-p udp
。
缺省情况下,将匹配所有端口。
可以指定端口号或者端口名称,例如“-sport 22
”与“-sport ssh
”
/etc/services 文件描述了上述映射关系。
从性能上讲,使用端口号更好。
使用冒号可以匹配端口范围,如“-sport 22;100
”,还可以使用“-source -port
”
- -sport,源端口 (source port)。针对
-
- -dport,目的端口 (destination port)。针对-p top 或者-p udp,参数和-sport 类似还可以使用“
-destination -port
”。
- -dport,目的端口 (destination port)。针对-p top 或者-p udp,参数和-sport 类似还可以使用“
-
- -tcp -flags TCP标志针对 -p tcp,可以指定由逗号分隔的多个参数,有效值可以是SYN、ACK、FIN、RST、URG、PSH。
可以使用ALL或者NONE。
- -tcp -flags TCP标志针对 -p tcp,可以指定由逗号分隔的多个参数,有效值可以是SYN、ACK、FIN、RST、URG、PSH。
-
- - icmp -type ICMP类型针对-p icmp。
-
- - icmp - type 0 表示 Echo Reply。
-
- -icmp -type 8 表示Echo
- 4、追加规则的完整实例。
本例实现的规则将仅允许 SSH 数据包通过本地计算机,其他一切连接 (包括 ping)都将被拒绝。
清空所有 Iptables 规则:
iptables -F
接收目标端口为22 的数据包:
iptables -A INPUT -i ethO -p tcp -dport 22 -ACCEPT
拒绝所有其他数据包:
iptables -A INPUT -j DROP
6、更改默认策略
上例仅对接收的数据包过滤,而对要发送出去的数据包却没有任何限制。本部分主要介绍如何更改链策略,以改变链的行为。
当使用-L 选项验证当前规则时,发现所有的链旁边都有 policy ACCEPT 标注,这表明当前链的默认策略为 ACCEPT:
#iptables -L
Chain INPUT(policy ACCEPT)
target prot opt source destination
ACCEPT tcp - anywhere anywhere tcp dpt:shh
DROP all - anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
这种情况下,如果没有明确添加 DROP 规则,那么默认情况下将采用ACCEPT 策略进行过滤。除非;
为以上三个链单独添加DROP 规则:
iptables -A INPUT -j DROP
iptables -A OUTPUT -DROP
iptables -A FORWARD - DROP
更改默认策略:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
已经把OUTPUT链策略更改为DROP了。此时虽然服务器能接收数据,但是无法发送数据:
#iptables -L
Chain INPUT(policy DROP)
target prot opt source destination
ACCEPT tcp - anywhere anywhere tcp dpt;ssh
DROP all - anywhere anywhere
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
(7)配置应用程序规则
以下举个例子:
允许接收远程主机的 SSH 请求:
iptables -A INPUT -i ethO -p tcp -dport 22 -m state -state NEW,ESTABLISHED -j -ACCEPT
允许发送本地主机的SSH 响应:
iptables -A OUTPUT -o eth0 -p tcp -sport 22 -m state -state ESTABLISHED -j ACCEPT
- -m state,启用状态匹配模块 (state matchingmodule)。
- -state,状态匹配模块的参数。当SSH 客户端第一个数据包到达服务器时,状态字段为NEW;建立连接后,数据包的状态字段都是ESTABLISHED。
- -sport 22,SSHD监听22 端口,同时也通过该端口和客户端建立连接、传送数据。因此,对于 SSH 服务器而言,源端口就是22。
- -dport 22,SSH客户端程序可以从本机的随机端口与SSH 服务器的22端口建立连接因此,对于SSH客户端而言,目的端口就是22。
2、Linux 账户
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面,可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有唯一的用户名和各自的口令。Linux账户和密码存放在/etc/passwd 和/etc/shadow 文件中。
超级管理员(root)的UID =0,系统默认用户则对应1024 以下的UID(用户标识号它与用户名唯一对应,并且 UID 越小,说明该用户的权限越大)。
3、AWK 查找工具
AWK 是一个强大的文本分析工具,相对于 GREP 的查找、SED 的编辑,AWK 在对数据进行分析并生成报告时,其功能显得尤为强大。简单来说,AWK 就是把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
使用方法:
awk'{pattern +action}' {filenames}
比如,检查/etc/shadow 中的空口令账号:
# awk -F":"'($2 = ="!"){print $1}'/etc/shadow
搜索/etc/passwd 中有 root 关键字的所有行:
#awk '/root/' /etc/passwd
4、防火墙只允许常规服务端口
为了 Linux 系统的安全,有时只允许系统开放一些常规端口。利用Iptables 只允许21、22、80、445、1433、3306 端口开放。利用Iptables 配置与 Linux 扫描结果。
Iptables 的设置是立即生效的,无须重启服务。
5、查找隐藏的超级用户
所谓隐藏的超级用户,是那些权限很大 (UID为0)的rot 用户Linux的普通用户权限很小。用户没有权限设置IP 地址。
当修改/etc/passwd 文件之后,abc 就有 root 的权限了。
可以利用AWK检测UID为0的用户,代码为awk -F ":" '($3=="0")print {$1}' /etc/passwd
。
6、设置系统密码策略
查看密码策略设置:
#cat /etc/login.defs | grep PASS
配置密码文件:
#vi /etc/login.efs 修改配置文件
PASS_MAX_DAYS 90 #用户的密码最长使用天数
PASS_MIN_DAYS 0 #两次修改密码的最小时间间隔
PASS_MIN_LEN 7 #密码的最小长度
PASS_WARN_AGE 9 #密码过期前多少天开始提示
7、阻止系统响应任何从外部/内部来的 ping 请求
在Linux 系统中执行命令;echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
,测试能否被其他主机 ping通。
版权声明:本文标题:渗透测试——九、系统加固 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1733514731h1601168.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论