者按:在渗透测试学习过程之中,往往会使用到一些使用到工具,如能很好的利用这些工具,则可在渗透测试的过程之中比较顺利。适用于新手的往往是DVWA渗透测试环境的部署,下面部分工具的使用也会以DVWA环境为例子。


1. 什么是渗透测试?

简单来说,渗透测试(Penetration Testing)是一种通过模拟攻击者的技术与方法,挫败目标系统的安全控制措施并取得访问控制权的安全测试方式。

2. 常用工具举例

2.1 nmap

到目前为止,nmap是最常见的网络端口扫描工具。它与metasploit的集成可谓是珠联璧合,在metasploit之中,nmap的输出结果可以保存在后端数据库中以备后续使用。
与许多工具一样,nmap有着繁多的参数和选项,但是往往只会用到其中的一小部分:如namp -sS,用以执行一次TCP扫描,确定某个特定的TCP端口是否开放,常见的端口号,根据计算机网络的知识,有http(80)、https(443)、ftp(21)等;而nmap的另外一个推荐选项是-Pp,它要求nmap不要使用ping命令预先判断主机是否存活,而是默认所有的主机都是存活状态。
使用kali linux里自带的nmap工具,进行漏洞扫描,相关代码如下:

代码语言:其他
root@kali:~# nmap -sS -Pn 192.168.38.129
Nmap scan report for 192.168.38.129
Host is up (0.0011s latancy).
Not shown:992 closed ports
PORT        STATE        SERVICE
21/tcp      open         ftp
25/tcp      open         smtp
80/tcp      open         http
135/tcp     open         msrpc
139/tcp     open         netbios-ssn
443/tcp     open         https 
445/tcp     open         microsoft-ds 
1433/tcp    open         ms-sql-s
Nmap done:1 IP address (1 host up) scanned in 2.43 seconds

为了获取更多的信息,可以尝试使用 -A 选项,可以尝试进行深入的服务枚举和旗标获取,在此不作赘述。在实战之中,往往探寻到一些端口,是为了获取到后台登陆页面,是后面结合使用sqlmap工具暴库的第一步。具体步骤会在后面详述。

2.2 SQL注入实战之burpsuite和sqlmap的使用

下面我会以DVMA的SQL注入为例,具体的陈述两种工具的使用:

2.2.1 手工注入

  1. 安全级别设置为 Medium 后,进入 SQL 注入模块,发现没有了文本框,随便选择一个 ID 后,可以返回数据,且 URL 上没有显示任何参数,说明该页面为 POST 提交方式。由于页面中没有提供输入信息的接口,所以需要使用 Burpsuite 等工具来构造 POST 包,如图2-1

1.jpg

图2-1

  1. 运行 Burpsuite,并设置好浏览器代理,如图 2-2,2-3

2.jpg

图2-2

3.jpg
图2-3

  1. 再次到 SQL 注入页面随便选择一个 ID 值,点击提交,该数据包会被 Burpsuite 拦截并显示,如图 2-4

4..jpg

图2-4

  1. 在 ID 值后加入 ' 单引号,并点击 Forward 按钮,浏览器报错,发现同样存在 SQL 注入漏洞,如图 2-5,图 2-6

5.jpg

图2-5

6.jpg
图2-6

  1. 再次随意选择 ID 值,在 Burpsuite 拦截的包中 id=1 后加上 and 1=1,可以返回数据,加上 and 1=2,没有数据返回,确认 SQL 注入点为数字型,如图 2-7,图 2-8,图 2-9,图 2-10

7.jpg

图2-7

8.jpg
图2-8

9.jpg
图2-9

10.jpg
图2-10

  1. 再次拦截数据包,加入 and 1=2 union select 1,2,确认页面中 First name 处显示的是记录集中第一个字段,Surname 处显示的是记录集中第二个字段,如图 2-11,图 2-12

11.jpg

图2-11

12.jpg
图2-12

  1. 查询数据库名、表名方法与 Low 级别思路一致,只不过不需要单引号和 # 来闭合语法

  2. 拦截数据包,加入 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='users' 来查询字段名时,发现页面报错,如图 2-13,图 2-14

13.jpg

图2-13

14.jpg
图2-14

  1. 先暂时关掉 Burpsuite 的代理功能,在页面中点击 View Source,查看当前源码,发现对提交的 ID 值添加了 mysql_real_escape_string 函数,该函数会对单引号进行转义,从而导致 SQL 语句构造不成功,如图 2-15,图 2-16

15.jpg

图2-15

16.jpg
图2-16

  1. 对表名 users 进行 16 进制 HEX 编码,就可以无需使用单引号。users HEX 编码后为 0x7573657273(网上有网站可以对字符进行在线 HEX 编码,可自行搜索)。重新开启 Burpsuite 的代理功能后,在拦截的包中加入 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273,可以成功查询出字段名,如图 2-17,图 2-18

17.jpg

图2-17

18.jpg
图2-18

  1. 拦截数据包,加入 and 1=2 union select user,password from users,可以成功查询出用户名和密码的内容,如图 2-19

19.jpg

图2-19

2.2.2 自动化注入(low级别为例)

见本博客文章SQL注入攻击实战


短暂地别离是为了更好地相逢