Web安全-实验环境介绍
- DVWA介绍
- Web应用程序(DVWA)是一个PHP/MYSQL Web应用程序。
- 主要目标是帮助安全专业人员在合法环境中测试他们的技能和工具,帮助web开发人员更好理解保护web应用程序的过程,并帮助教师/学生在教师环境中教授/学习web应用程序安全性
- 官网
- DVWA实验环境操作
- 默认情况下,DVWA系统登陆的用户admin,密码password
- 点击登陆后的侧边栏切换不同的实验内容
- DVWA参考文档
- 在DVWA实验环境中,具有对DVWA的实验内容的参考文档
- DVWA切换难度操作
- DVWA环境中可以通过DVWA Security难度按钮,切换不同 的难度
Web安全-DVWA介绍
- DVWA home介绍
- DVWA Instructions介绍
- 下载
- 安装
- 配置
- DVWA Set/Reset DB介绍
- 什么情况下使用Create/Reset DB?
- 当测试的操作改变程序数据库时,需要使用这个功能重置数据库
- 什么情况下使用Create/Reset DB?
- DVWA Security介绍
- 什么情况下使用Security?
- 当需要修改当前DVWA的级别时
- 配置默认级别为Low(config/config.inc.php)
- 启动PHPIDS(入侵检测系统)
- 什么情况下使用Security?
- DVWA Info介绍
- DVVWA About介绍
- 比较好的参考网站
- DVWA Logout 介绍
- 登出DVWA
Web安全-DVWA暴力破解(Low级别)
- 暴力破解介绍
- 原理:使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录。理论上来说,只要字典足够庞大,枚举总是能够成功。
- 暴力破解工具环境搭建
- 安装Java运行环境
- 暴力破解字典准备
- 自己手写
- 网上收集
- 暴力破解工具使用
- 登录DVWA
- Brute Force的使用(暴破)
- Burpsuite工具
- 设置代理127.0.0.1:8080
- 浏览器设置代理127.0.0.1:8080
- 浏览器输入登录(这里我们不知道密码,随意输入)
- burpsuite点击forward
- 右键—>Send to Intruder
- 点击Intruder
- 点击Positions(这里的Attack type有多种模式,选择Sniper对应单一数据)
- 点击Clear取消变量
- 双击要破解的数据,点击add添加变量
- 点击Payloads(选择攻击模块、字典)
- Payload Sets可以选择Runtime file
- 添加字典(字典文件命名不能有汉字字符)
- 点击最上方的Intruder—>start attack
- 因此,密码为password
- 点击Positions(这里的Attack type有多种模式,选择Sniper对应单一数据)
- Low级别源代码分析
Web安全-暴力破解(medium级别)
-
切换级别(medium级别)
-
点击Brute Force
-
打开Burpsuite开启截包
-
Brute Force输入用户名和密码点击登录(这里暴破用户名和密码,所以两个都输入错误的)
-
截到的包如下
-
然后点击Action(或者右键),send to Intruder
-
Intruder的Positions
- Attack type --> Cluster bomb
- Clear$–清除变量
- Add&–对要暴破的数据添加变量
-
Intruder的Payloads
-
注意:Payload要一 一对应变量
- 第一个变量为用户名,所以第一个Payload设置为用户名的Payload
-
结果
-
medium级别源代码分析
Web安全-暴力破解(high级别)
-
切换级别
-
点击Brute Force
-
截包,截到的包中多了一个user_token参数是不断变化的,因此上两种方法显然不可行
-
将截取到的包send to sequencer进行anti-CSRF分析(截两次包分析比较)
-
第一个包token
-
第二个包token
-
-
破解
- 抓包——发送到intruder模块——Position设置password和user_token为变量,选择攻击模式为Pitchfork
- Payload1——选择密码字典
- Payload2设置为Recursive grep类型
- option——Recursive grep类型只支持单线程,设置线程为1
- option——Grep Extract
- 按下图进行添加
- option——Redirections勾选Always
+ 在Payload的Payload options
- 点击start attack
- 抓包——发送到intruder模块——Position设置password和user_token为变量,选择攻击模式为Pitchfork
Web安全-暴力破解(impossible级别)
-
代码分析
-
使用POST提交用户名和密码,更加安全,并对用户输入过滤处理(stripslashes,mysqli_real_escape_string)
使用Anti-CSRF token防止无脑暴力破解
-
设置登录失败次数,限制暴力破解,三次错误登录,用户被锁定15分钟
使用PDO,防止SQL注入
-
-
防止暴力破解措施
- 设置Anti-CSRF token,设置验证码
- 设置登录失败次数和锁定时间
- 过滤用户输入,防止SQL注入
Web安全-命令执行漏洞(Low级别)
-
命令执行介绍
-
Command Injection,即命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的
-
Windows cmd命令
-
执行ping 127.0.0.1,正常测试本地网卡
-
在命令后面添加了其他命令(分别实践,查看不同的执行效果)
-
ping 127.0.0.1 && ipconfig
-
ping 127.0.0.1 & ipconfig
-
ping 127.0.0.1 || ipconfig
-
ping 127.0.0.1 | ipconfig
-
ping 127.0.0.1 ; ipconfig
-
-
-
DVWA命令执行测试(Command Injection模块)
-
代码分析
-
PHP中"·"是作为连接符,由代码分析可以知道,需要两个命令执行,所以可以使用一下格式的命令进行执行:
- 127.0.0.1 && ipconfig(乱码只是编码不同)
- 127.0.0.1 && ipconfig(乱码只是编码不同)
-
-
使用Burpsuite来探测当前输入框是否存在命令执行(手工耗费量大)
- Burpsuite抓包
- 发送到Intruder,
- Options设置包里的IP地址为变量
- Payloads设置对应的字典文件,开始执行
+ 点击结果,Response–>Render,查看页面返回的情况
- Burpsuite抓包
Web安全-命令执行漏洞(medium级别)
-
DVWA命令给执行测试
- 使用Low级别可以的命令测试
- 127.0.0.1 && ipconfig
- 结果,显然是不可行
- 使用Low级别可以的命令测试
-
代码分析
-
绕过黑名单
- 使用&绕过黑名单(&不在黑名单中)
- 127.0.0.1 & ipconfig
Web安全-命令执行漏洞(high级别)
-
代码分析
-
绕过黑名单
-
使用|绕过黑名单
- 127.0.0.1 |ipconfig
-
-
使用Burpsuite探测黑名单里有哪些字符
- Burpsuite截包
- send to Intruder
- Options设置IP为变量
- Payloads设置对应的字典
- 开始执行
Web安全-命令执行漏洞(impossible级别)
- 代码分析
- 总结
- 过滤黑名单
- 替换、转义关键字
- 对于IP地址,可以使用"."为分界,将所有数字拆分到数组,单个判断是否为数字is_numeric()
Web安全-CSRF(Low级别)
-
CSRF 跨站伪造请求介绍
- CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(转账、改密等)。CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用
-
代码分析
-
CSRF漏洞利用
- 构造恶意链接(此链接是正常修改成功时的链接进行修改)
- http://192.168.3.20/vulnerabilities/csrf/?password_new=hack&password_conf=hack&Change=Change#
- 当用户在当前cookie没有过期时,点击该链接完成用户密码修改
- 使用短链接伪装
- http://dwz.cn/
- 构造恶意链接(此链接是正常修改成功时的链接进行修改)
-
CSRF漏洞高级利用
- 构造恶意页面,使用img标签隐藏真实目的
<img src="http://ip/dvwa/vulnerabilities/csrf/?password_new=hack&password_conf=hack&Change=Change#" border="0" style="display:none;" /> <h1> 404 </h1> <h2> file not found. </h2>
- 注意:如果用户用A浏览器访问站点,又使用B浏览器访问恶意页面,不会触发漏洞
Web安全-CSRF(medium级别)
- 代码分析
stripos()函数查找字符串在另以字符串中第一次出现的位置(不区分大小写),如果没有找到返回false
$_SERVER[‘HTTP_REFERER’]查询当前页的前一页的地址信息
$_SERVER[‘SERVER_NAME’]获取域名
-
CSRF漏洞利用
- referer表示从哪一个页面请求过来
-
攻击过程
-
首先修改密码,burpsuite抓包
可以看到多了一个referer值 -
构造恶意链接,点击测试
可以看到没起作用 -
构造恶意页面,点击跳转,截包
<h1>你已经获得了百万奖金,请点击领取......</h1> <a href="http://192.168.3.23/DVWA/vulnerabilities/csrf/?password_new=test&password_conf=test&Change=Change#" referer="no-referer-when-downgrade"> 点击领取 </a>
- 效果图
- 截包
并没有referer值,手工添加一个
- 放行,成功修改
-
Web安全-CSRF(high级别)
- 代码分析
High级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求
- CSRF漏洞利用
- 只有获取token才能进行CSRF,但是浏览器的跨域问题,不能直接获取,所以比较难以利用。但是如果服务器存在存储XSS可以来获取token。然后构造url和代码进行CSRF利用
- 一般情况下,在CSRF中使用token,可以防御大部分CSRF利用
- High级别的CSRF在DVWA存储XSS中将介绍如何利用
Web安全-CSRF(impossible级别)
- 代码分析
- 总结
- 为了防止CSRF,可以加入Anti-CSRF,每次向客户端发送一个随机数,当客户端向服务端发送数据时,比对随机数以此来确定客户端身份
- 获取当前用户密码,以此判断是否时当前用户的操作,而非CSRF攻击