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存放系统配置文件
SysWOW64Windows操作系统的子系统
Config/SAM存放 Windows 账号和密码
etc/hostsDNS解析文件
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/8081HTTP协议代理服务器常用端口号
443HTTPS协议代理服务器常用端口号
21FTP(文件传输协议) 协议代理服务器常用端口号
24Telnet(远程登录)协议代理服务器常用端口号
22SSH (安全登录)、SCP (文件传输)
1521Oracle 数据库
1433MSSQL Server 数据库
3306MySQL数据库
25SMTP(简单邮件传输协议)

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 四种内建表

  1. Filter 表。
    Filter 是 Iptables 的默认表,因此,如果没有自定义表,那么就默认使用 Filter 表,它具有以下三种内建链:
  • 1、INPUT链,处理来自外部的数据。
  • 2、OUTPUT链,处理向外发送的数据。
  • 3、FORWARD 链,将数据转发到本机的其他网卡设备上。
  1. NAT表。
    NAT表有三种内建链:
  • 1、PREROUTING链,处理刚到达本机并且路由还未转发的数据包。它会转换数据包中的目标IP地址(Destination IP Address),通常用于 DNAT (Destination NAT)。
  • 2、POSTROUTING链,处理即将离开本机的数据包。它会转换数据包中的源IP 地址(Source IP Address),通常用于 SNAT (Source NAT)。
  • 3、0UTPUT链,处理本机产生的数据包。
  1. Mangle 表。
    Mangle 表用于指定如何处理数据包。它能改变TCP头中的OS位。Mangle 表具有五个内建链:PREROUTING、OUTPUT、FORWARD、INPUT、POSTROUTING

  2. 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) 来指定协议。映射关系通过
/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。
    • -i,输入接口 (input interface)。
    • -i指定了要处理来自哪个接口的数据包。
      这些数据包即将进入INPUT、FORWARD、PREROUTING链。
      例如,-ietho 指定了要处理经由 etho 进入的数据包。
      如果不指定 -i参数,那么将处理进入所有接口的数据包。
      如果出现!-i eth0,那么将处理所有经由 eth0 以外的接口进人的数据包
      如果出现-i eth+,那么将处理所有经由eth 开头的接口进入的数据包。
      还可以使用-in -interface参数
    • -o,输出 (output interface)。
    • -o指定了数据包由哪个接口输出。
      这些数据包即将进入 FORWARD、OUTPUT、POSTROUTING链。
      如果不指定 -o选项,那么系统上的所有接口都可以作为输出接口。
      如果出现! -o eth0,那么将从 eth0 以外的接口输出。
      如果出现-o eth +,那么将仅从eth 开头的接口输出。
      还可以使用-out -interface 参数
  • 3、描述规则的扩展参数。
    对规则有了基本描述之后,有时还希望指定端口、TCP 标志、ICMP 类型等内容。
    • -sport,源端口 (source port)。针对-p tcp 或者-p udp
      缺省情况下,将匹配所有端口。
      可以指定端口号或者端口名称,例如“-sport 22”与“-sport ssh
      /etc/services 文件描述了上述映射关系。
      从性能上讲,使用端口号更好。
      使用冒号可以匹配端口范围,如“-sport 22;100”,还可以使用“-source -port
    • -dport,目的端口 (destination port)。针对-p top 或者-p udp,参数和-sport 类似还可以使用“-destination -port”。
    • -tcp -flags TCP标志针对 -p tcp,可以指定由逗号分隔的多个参数,有效值可以是SYN、ACK、FIN、RST、URG、PSH。
      可以使用ALL或者NONE。
    • - 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通。

本文标签: 测试 系统