DVWA靶场通关
DVWA靶场简介
DVWA(Damn Vulnerable Web Application)和pikachu一样是一个用来进行安全脆弱性鉴定的PHP/MySQL Web 应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。它一共包含了十个模块:brute force(暴力破解)、command inject(命令行注入)、CSRF(跨站请求伪造)、File inclusion(文件包含)、file Upload(文件上传)、insecure Captcha(不安全的验证码)、SQL Inject(sql注入)、XSS(跨站脚本攻击)。包含了OWASP TOP 10所有攻击漏洞练习环境,供大家学习。
DVWA还可以手动调整安全级别(low、medium、high、impossible)级别越高防护越严格,渗透难度越大。
DVWA安装
和pikachu靶场一样将DWAV的源码解压到phpstudy的www目录下,修改配置文件,启动phpstudy然后在浏览器访问网站进行安装
安装完成我们就可以进行测试学习了,如果英文不是很强可以借助浏览器翻译来进行学习
如果安装完成不用登录就可以访问内容我们可以这样操作
DVWA – 暴力破解(Brute Force)
暴力破解:指的是用字典通过穷举法猜测用户口令:
low难度下的暴力破解:
源码解析:
|
经过源码分析我们发现后台直接将输入的用户名拼接到sql中查询,也没有对密码和用户名进行校验,我们可以构造恶意语句admin' or '1'='1
让后边条件为永真将数据库用户存入变量,使变量中有值,从而登录成功
可以使用burp进行暴破,操作如下:
medium难度下的暴力破解
源码解析:
|
中等难度他的源码对于登录这方面没有做太多改动,因此他的暴破过程和low难度过程基本一样,只不过对一些字符使用mysql_real_escape_string这个函数进行了转义,有效防止了通过万能密钥注入的方式登录
操作和low一样
防止万能密钥的登陆admin' or '1' = '1
输入用户名为这个,再随便输密码显示登录失败
high难度下的暴力破解
源码解析
|
可以明显的看出添加了token检验机制来增加暴破的难度,token在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。针对带token验证的防暴破机制我们可以使用burp来绕过。
演示:
impossible难度
源码解析:
|
这个难度是最高的,基本不可能暴破,其中gat方式获取参数转变为post获取,加上了token校验机制,限制了登录次数,登录超过三次会被锁定等待15分钟,通过这几种方式有效的防止了暴力破解。
DVWA – Command Injection(命令注入)
Command Injection(命令注入),就是指通过提交一些恶意构造的参数破环命令语句结构,从而达到恶意执行命令的目的。这里要和RCE漏洞进行区别,RCE漏洞是执行代码,而这里执行的是命令。
Command Injection主题:
Low
源码分析:
|
漏洞复现:
通过代码分析可知服务器仅根据不同的操作系统执行了不同的命令并没有对传入的参数进行过滤
命令拼接:
|
在这里我们直接使用第一个拼接,由于后台写了ping 所以我们只需要构造payload127.0.0.1 & ipconfig
就好:
可以看到成功回显出了我们拼接的ipconfig命令
medium
源码分析:
|
漏洞复现:
相较于low来说添加了黑名单将&&和;做了限制进行了替换,换为空,但其他没限制仍然可以使用127.0.0.1 & ipconfig
进行绕过执行
high
源码分析:
|
可以发现黑名单数量加多了,但仔细观察发现’| ‘管道符后边多了一个空格替换成空我们考虑使用管道符绕过127.0.0.1 |ipconfig
漏洞复现:
impossible
源码分析:
|
这里是添加了白名单,白名单的作用是只允许什么通过。
DVWA靶场通关 – CSRF
csrf(跨站请求伪造),利用还未过期的用户信息诱骗用户点击链接修改用户信息
csrf主题:
Low
源码分析:
|
get方式获取了两次输入的密码,一致的话直接将数据插入到数据库中
漏洞复现:
首先尝试修改密码
测试原来默认的密码登录失败,新设置的密码在url中可以看到
我们构造链接http://192.168.23.128/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#在浏览器中访问发现密码就能被重新改回到password(诱骗用户点击)
然后我们登录就可以使用password做密码登录了
medium
源码分析:
|
medium级别的代码检查了保留变量http_referer(http包头的referer参数值,表示来源地址)中是否包含了server_name(http包头的host参数,即要访问的主机名,这里是192.168.23.128),希望通过这种机制抵御csrf攻击
漏洞复现:
可以看到数据包中有Referer但在url中没有,这里是urlhttp://192.168.23.128/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#可以进行查看参数中没有referer。意思是referer中只要出现server_name就可以正常操作
可以看到在hackbr中修改参数密码为password然后添加头信心referer点击执行可以看到成功执行。
也可以自己搭建的恶意网站中是不存在这个的我们在链接中包含上服务器的地址就能绕过了,我们可以构造一个图片的src中包含服务器地址的文件,index.html
|
然后存放到自己的网站然后发送链接http://192.168.23.128/192.168.23.128.html给用户一但点击攻击就完成了
high
源码分析:
|
high级别的代码增加了token检验机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器提交token参数时服务器会在收到token时先检查token,token正确才会处理客户端请求。
漏洞复现:
这里可以利用存储型xss可执行代码获取token,其实是利用xss获取cooki中的token值,所以在这个地方我们使用xss执行。
现在存储型xss中写入语句<iframe src="../csrf" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>
有长度限制我们F12改限制
这里不要点击确定先复制,然后打开另一个网页打开csrf题输入修改的密码点击提交抓包,不放包发送到repeater中修改token的值点击go跟随查看响应可以看到密码修改了
这种加token的方式由于是后台先把token发送到前端我们可以先获取到向应包中的token替换请求包中的token就能很容易绕过
impossible
源码分析:
|
要求我们先输入就密码再修改,攻击者不知道原始密码的情况下是无法发起攻击的。
防护措施
加入Anti-CSRF,每次向客户端发送一个随机数,当客户端向服务器发送数据时对比随机数从而确定身份
获取当前用户密码,以此判断是否为当前用户操作
二次确认(提示、二次密码、验证码).
DVWA – file inclusion(文件包含)
文件包含漏洞(File Inclusion)是指当服务器开启了allow_url_include选项时,通过一些php特性函数如include()、require(),include_once(),require_once()函数利用url去动态包含文件,此时如果没有对文件来源进行严格的审查就会导致任意文件读取或者任意命令执行。
文件包含分类:
- 本地文件包含:当被包含的文件再本地服务器时叫做本地文件包含,如:../../../ect/password
- 远程文件包含:当被包含的文件在第三方服务器时,就叫做远程文件包含,如:http://www.xx.com/1.php
特性函数:
|
File Inclusion主题:
首先需要设置打开文件包含
Low
源码分析:
|
漏洞复现:
meidum
源码分析:
|
这里可以看到添加了黑名单将“http://” “https://” “../” “..\”全部替换成了空这个地方可以考虑双写绕过。
漏洞复现:
high
源码分析:
|
匹配“file*”,以file开头的文件可以访问,或者include.php可以访问,如果不满足以上两种就输出错误语句
漏洞复现:
使用伪协议:”file:///访问本地文件系统” 参考文章
这里限制了白名单只允许某些文件被包含
impossible
源码分析:
|
这里使用了白名单机制进行防护,简单粗暴,page的参数已经固定了完全杜绝了文件包含
DVWA – File upload(文件上传)
这个漏洞由于对上传文件的内、类型没有做严格的过滤、检查,使得攻击者可以通过上传木马文件获取服务器的webshell文件。
需要配置文件上传:
File upload主题:
Low
源码分析:
|
从源码可以看到对上传文件类型、内容没有做任何的过滤和检查,同时告诉了我们文件上传路径,存在明显的文件上传漏洞
漏洞复现:
在上传的过程中我们使用了webshell管理工具godzilla来生成一句话和连接获取shell
medium
源码分析:
|
可以分析出对文件上传的类型做了限制,要求必须是image/jpeg或者image/png类型,而且对文件上传大小做了限制。
漏洞复现:
复现中级文件上传漏洞首先需要删除上传的php一句话
还是上传刚才生成的一句话木马
提示只能上传的文件类型,这里抓包绕过
然后用哥斯拉连接就好了
high
源码分析:
|
这里可以使用图片马来绕过,图片马的制作类似与pikachu里的制作
漏洞复现:
之后需要配合其他漏洞让图片马一脚本的方式解析后再使用webshell管理工具连接即可,如使用命令注入漏洞修改图片的后缀然后再连接。
构造语句127.0.0.1 |copy C:\phpstudy_pro\WWW\DVWA\hackable\uploads\2.jpg C:\phpstudy_pro\WWW\DVWA\hackable\uploads\2.php
impossible
源码分析:
|
这个级别的文件上传对文件进行了重命名搞了个md5加密,还增加了token值校验,对文件内容做了严格检查。
DVWA – SQL Injection (sql注入)
sql注入是指攻击者通过注入恶意sql命令,破坏sql查询语句结构从而达到执行恶意sql语句的目的。sql注入漏洞的危害是巨大的,常常导致整个数据库被“脱库”,尽管如此sql注入仍是最常见的web漏洞之一。
sql注入的流程:
- 判断是否存在注入,注入是字符型还是数字型(根据后台查询语句进行分类)
- 猜解sql查询语句中的字段数order by
- 确定显示字段顺序
- 获取当前数据库
- 获取当前数据库中的表
- 获取表中的字段名
- 下载数据
sql注入主题:
Low
源码分析:
|
漏洞复现:
第一步查找注入点判断注入类型
第二步判断字段数
第三步 确定字段显示顺序
第四步 获取数据库名、用户名、版本号
在MYSQL5.0以上版本中自带数据库 information_schema,information_schema 存储所有数据库名,表名,列名信息,可以通过查询此库获得信息
第五步 查询库中的表
出现错误如何解决:
第六步 查询表中的字段名
第七步获取字段相关信息
然后md5解密直接登录就获取了权限了
Medium
源码分析:
|
漏洞复现:这里使用了post方式提交,还是用了转义防止sql注入
第一步判断注入类型:
第二部判断字段数
第三步确定字段位置
第四步查询库名
第五步查表名
第六步查询users中的字段名
这里单引号被转义用16进制绕过
第七步获取字段的值
解密登录
high
源码分析:
|
添加了limit限制可以用#注释掉后边的内容,复现过程和low一样
impossible
源码分析:
|
加入token、检测 id 是否是数字,prepare预编译语句的优势在于归纳为:一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止 SQL 注入。
DVWA – SQL Injection(blind)盲注
SQL Injection(Blind)(sql盲注):相比于常规注入他不会返回数据的信息或语法信息,只会将服务器包装后的信息返回到页面中
对比:
盲注分类分为两类:bool盲注和时间盲注,通过返回的值或者时间来判断是否正确
SQL盲注的基本流程:
- 判断是否存在注入,注入的类型
- 猜解当前数据库的名称
- 猜解数据库中的表名
- 猜解表中的字段名
- 获取表中字段的值
- 验证字段值的有效性
- 获取数据库的其他信息
sql盲注主题:
Low
源码分析:
|
漏洞复现:
文本框输入并提交的形式,get方式,未作任何输入过滤和限制,攻击者可以任意构造想输入的sql查询,对没有进行任何检查、过滤、返回参数只有两种
第一步猜闭合方式
猜测为字符型
第二步猜解数据库名(以数据库名的第一个字母为例)(最终可以查到数据库名root)
|
原理通过名字的ascill码来匹配是否正确正确返回正确信息错误返回错误信息
第三步查表名和查库名一样依旧是利用猜解来查最终查到为guestbook(以数据库的第一个表的第一个字母为例)
|
第四步猜解字段名方法一样(以数据库中第一个表第一个字段第一个字母为例)最终可以查到字段名为comment_id
|
第五步猜解第一个表第一个字段的第一个数据的第一个字母最终查到数据1
|
剩余的数据都一样都是通过这种方式来查找
Medium
源码分析:
|
漏洞复现:
中级难度下,提交方式变为下拉id提交,使用post提交,并且使用mysqli_real_escape_string函数对单引号双引号反斜杠等进行了转义处理。和low的普通方式差不多但需要抓包构造语句使用post提交
四种语句还是类似并且和low的过程相似。
|
high
源码分析:
|
high级别的盲注加入了sleep函数对时间盲注造成干扰,将数据提交页面和结果显示也页面分离,一定程度上约束了sqlmap自动化工具的常规方式但无法完全阻挡,利用set-cookie对输入的值进行传递到显示页面的cookie字段中保存,sql语句添加limit限制每次输出只有结果的一个记录,不会输出所有纪录。
漏洞复现:
对于limit限制输出记录数目可以利用#注释限制,服务端会随机执行sleep函数,做执行延迟时间2-4秒会对时间延迟盲注有干扰,因此可以考虑布尔盲注测试
可以参考low级别的代码:
|
impossible
源码分析:
|
这个级别采用了PDO技术划清了代码于数据的界限有效的提高了防御sql注入,加入了token机制进一步提高了安全性,采用参数化查询而非动态查询,对代码和数据进行了分离。只有返回的查询结果数量为一个记录时才会成功输出,有效预防了暴库,使用is_numeric函数来判断是否为数字满足条件才查询。
DVWA – XSS(DOM)
XSS全程跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意脚本代码当受害者访问该页面恶意代码就会在浏览器上执行,需要强点的是,xss不仅限于JavaScript,还包括flash等其他脚本语言,根据恶意代码是否存储在服务器中又分为存储型和反射型。
DOM——base XSS漏洞基于文档对象模型的一种漏洞。dom是一个与平台编程语言无关的接口,它允许程序或脚本动态访问和更新文档内容,结构和样式,处理后的结果能作为页面的一部分。dom中有很多对象,其中一些可以用户操作如url、location、refelter等。客户端脚本程序可以通过dom动态修改页面内容,不依赖于提交数据到服务器,而是从客户端获得数据在本地执行,如果dom中的数据没有经过严格确认就会产生dom型xss漏洞
可能触发dom型xss的属性:document.referer属性、window.name属性、location属性、innerhtml属性、document.write属性
XSS(dom)主题:
Low
源码分析:
|
漏洞复现:
直接进行弹窗测
medium
源码分析:
|
简单的说就是过滤了<script,当匹配到时就会修正参数为English
在这里可以构造onerror事件,在装载文档或图像的过程中如果发生错误就会触发事件构造语句
|
这里的option标签是通过网页源码拼接的
漏洞复现:
high
源码分析:
|
这里设置了白名单但只对default进行了过滤我们可以用&或者#,在url中#表示书签&表示指定参数之间的分隔符。
impossible
源码分析:
|
这里设置的我们呢输入的参数全部无效了
DVWA – XSS(reflected)反射型
XSS攻击需要具备两个条件:1.需要向web页面注入恶意代码 2.恶意代码可以执行
xss反射型:顾名思义反射是一个一来一回的过程,反射型xss触发有后端的参与,之所以触发xss是因为后端解析前端传来带有xss性质的脚本文件或者脚本的data url编码,后端解析用户输入处理返回前端,由浏览器解析这段xss脚本而触发xss漏洞。因此要避免反射型xss则必须要后端的协调,在后端解析前端数据时首先做相关字串的检测和转义处理;同时前端也要对用户的输入做excape转义,保证数据源可靠性。
基本原理是通过给别人发送带有恶意脚本代码参数的url,当url地址被打开,特定的代码参数就会被html解析,执行这样就可以获取cookie。
特点:非持久化,必须用户输入带有特定参数的连接才能引起。
xss反射性攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个连接到目标网站的恶意链接来实施攻击。
xss(reflected)主题:
Low
源码分析:
|
服务器只是判断了name参数是否为空,如果不为空就直接打印出来,服务器并没有对name参数做任何过滤和检查
漏洞复现:
直接使用下面的语句尝试
|
medium
源码分析:
|
会见查name参数中是否含有script标签,有则替换为空,这里使用了str_replace函数他区分大小写因此可以用大小写绕过
漏洞复现:
这里使用大小写绕过
|
high
源码分析:
|
preg_replace()函数执行一个正则表达式的搜索和替换。*代表任意字符i代表不区分大小写。就是说所有的script标签被过滤,单我们可以通过其他标签来绕过如img、body等标签的事件或者iframe标签的是如此注入js脚本攻击
漏洞复现:<img src=# onerror=alert(2)>
impossible
源码分析:
|
htmlspecialchars函数用于把预定义的一些字符转换为html实体防止了我们注入html标签。例如我们注入 “”,htmlspecialchars 函数会将 < 和 > 转换成 html 实体而不是当做标签,所以我们插入的语句并不会被执行。同时加入 Anti-CSRF token 防护 CSRF 攻击,进一步提高安全性。
DVWA –XSS(Stored)存储型
存储型:攻击者实现将恶意代码上传或者存储到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码,这就意味者只要页面被访问就会被攻击,因此存储型xss危害更大。存储习型xss的代码存在于网页代码中可以说是永久的。
存储型一般存在于留言品论博客日志等交互出,恶意脚本存储到客户端或者服务器的数据库中。
xss(store)主题:
Low
源码分析:
|
源码中出现了trim函数用法如下:
出现了stripslashes()函数用法如下:
这里用于删除反斜杠,可用于清理数据库中或者从html表单中取回的数据
漏洞复现:
这里对xss方面没有做过滤和检查,而且数据将直接被存储到数据库中,因此存在存储型xss
同样的在message中也可以弹窗。在做其他的时候清楚表
medium
源码分析:
|
message处使用了htmlspecialchars函数,将字符全部转化为了html实体,因此message处无法使用xss攻击
name处做了长度限制,会把script标签转化为空考虑使用大小写或者双写绕过
漏洞复现:
|
high
源码分析:
|
message处与medium难度没有做太多的变化,因此不考虑这里,name处对script标签做了各种过滤,我们考虑换标签img
impossible
源码分析:
|
这里对name和message都是用了htmlspecialchars函数做了过滤,还添加了token值进一步提高了安全性。
DVWA – Weak Session ID(弱会话)
弱会话是指用户访问服务器的时候,一般服务器都会分配一个身份证session id给用户,用于标识。用户拿到session id后就会保存到cookie中,之后拿cookie在访问服务器时,服务器就知道你是谁了。
但session id过于简单就会容易被人伪造。根本不需要知道用户的密码就能访问用户服务器的内容。
low
源码分析:
|
漏洞复现:
如果session中的last_session_id不存在就设为0,生成cookie时就在cookies上dvwasessionId+1
首先点击按钮用burp抓包
将抓到的cookie复制下来:Cookie: dvwaSession=1; PHPSESSID=ha1df1ke8hmua8h2d9pd7j11qb; security=low
然后新打开一个页面,将刚才复制的cookie加入就可以实现直接登录不需要输密码(在这里需要清楚浏览器的cookie值)
medium
源码分析:
|
这里通过时间戳来生成的session,可以通过时间戳转换工具生成时间戳绕过 时间戳生成工具
漏洞复现:
抓包,保存cookie信息
|
打开新标签页清空cookie信息,抓包访问靶场的弱会话地址,修改包中的cookie信息
high
源码分析:
|
发现sessionId,这种使用了md5解密进行尝试发现是个2,猜测可能是low级别上进行md5加密
查看session的值是low的进行md5加密
其余操作步骤和low相同
impossible
源码分析:
|
这里$cookie_value采用随机数+时间戳+固定字符串”Impossible”,再进行sha1运算,完全不能猜测到dvwaSession的值。
DVWA – Insecure CAPTCHA(不安全的验证码)
不安全的验证码(insecure captcha)全程Completely Automated Public Turing Test to Tell Computers and Humans Apart,中文名是全自动区分计算机和人类的图灵测试,关于这一项其实是在验证码的流程出现了逻辑漏洞。
验证流程:
在这里由于访问不到Google的验证码api,过于麻烦还需要翻墙,只需要明白漏洞原理即可。
Low
源码分析:
|
源码分析总共分为两个阶段:
- 对用户的身份进行验证,step为1,验证成功后才能进行密码修改
- step为2,两次输入的密码一致可以进行修改
我们考虑直接跳过第一阶段,输入一密码一致,burp抓包修改step的值进行直接改密码。
medium
源码分析:
|
与Low相比怎加了一个passed_capt,当passed_capt为true时可以修改密码,同样使用抓包修改相关值
high
源码分析:
|
可以看到,验证过程部分步走合在了一个阶段里了,服务器的验证逻辑时当谷歌验证返回的结果是false并且参数ecaptcha_response_field不等于hidd3n_valu3(或者http包头的User-Agent参数不等于(reCAPTCHA)时,就认为验证码输入错误,反之则认为已经通过了验证码的检查。搞清楚了验证逻辑,剩下就是伪造绕过了,由于$resp参数我们无法控制,所以重心放在参数recaptcha_response_field、User-Agent上。
impossible
这个级别的代码增加了token机制防御csrf攻击,利用pdo技术防护sql注入,验证过程是一部分同时需要输入以前的密码,进一步加强了身份认证。
DVWA – Javascript
这里的JavaScript其实指的是JavaScript Attack也就是js攻击。JavaScript是一种基于对象和事件驱动的、具有安全性的脚本语言。是一种解释型语言(代码不需要预编译)。通常JavaScript脚本是通过嵌入html中来实现自身的功能的。
Low
源码分析:
|
我们知道中间的一大堆使用md5生成了加密token,和之前的源码不同在于这次的token实在前端生成的,generate_token()函数的作用是获取phrase参数中的值,将其的rot13加密的结果进行md5加密作为token值
漏洞复现:
medium
源码分析:
|
|
将phrase逆序输出,然后在前后分别添加 XX 作为规律所以当我们输入 success 的话,对应的 token 应该就是XXsseccusXX,这里也就是加密方式替换了而已。
漏洞复现:
依旧使用刚才的方法将加密方式的函数更换为do_elsesomething(“XX”);
high
源码分析:
|
high.js中用了js混淆,打开逆混淆网址,以调整js,获取到正确的js分析执行顺序
漏洞复现:
我们一样在控制台采用token_part_1(“ABCD”,44);和token_part_2(“XX”);
DVWA – CSP Bypass(csp绕过)
csp(内容安全策略)用于定义脚本和其他资源可以从何处加载或执行,本模块根据开发人员开发时常出现的错误来绕过该策略。这些漏洞都不是csp中的实际漏洞,都是实现csp的方式中的漏洞。绕过内容安全策略并在页面执行JavaScript。
内容安全测略(csp),为了缓解大部分潜在的xss问题,浏览器的扩展程序系统引入了csp,通过引入一些相当严格的策略使得扩展程序在默认情况下更安全,开发者可以创建并强制一些规则管理网站允许加载的内容。csp以白名单机制对网站加载或执行的资源起作用,在网页中策略通过http头信息或者meta元素定义。
|
CSP虽然提供了强大的安全保护,但它也使eval()及相关函数被禁用,内嵌的JavaScript代码将不会执行,只能通过白名单来加载远程脚本,如果使用csp保护网站开发者就不得不花费大量时间分离内嵌的js代码和调整。
Low
源码分析:
|
源码定义了一个变量headerCSP放置了一些url,使用scriptsrc指令指向一个外部JavaScript文件,header()函数以原始形式将http标头发送到客户端或浏览器。也就是说源码对http头定义了csp标签从而定义了可接受的外部JavaScript资源的白名单,通过抓包可以知道是那些网站。
pastebin是一个快速分享文本内容的网站,加入文本的内容是一段JavaScript代码,网页就会把改代码包含进来。
漏洞复现:
我们在pastebin写一段js代码
然后将url注入实现攻击:
但没有弹窗弹窗,查询发现
问题暂时没找到解决方法
medium
源码分析:
|
这个级别csp策略尝试使用nonce来防止攻击者添加内联脚本,HTTP头信息中的script-src的合法来源发生了变化。script-src还可以设置一些特殊值,unsafe-inline 允许执行页面内嵌的 script 标签和事件监听函数,nonce 值会在每次 HTTP 回应给出一个授权 token。
unsafe-inline:当csp有Unsafe-inline时, 并且受限于csp无法直接引入外部js, 不过当frame-src
为self, 或者能引入当前域的资源的时候, 即有一定可能能够引入外部js
nonce-source,仅允许特定的内联脚本块。如源码中:nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=’
漏洞复现:
现在就不是从外界导入 JavaScript 资源了,而是直接通过内联 JavaScript 代码,注入时直接令 nonce 为设定好的值即可。<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(1)</script>
high
源码分析:
|
|
可以看到后端代码除了自身源其余外部资源全部过滤,但是前端添加了一个函数solveSum函数没有对参数做任何处理。即在点击网页的按钮使js生成一个script标签,src指向source/jsonp.php?callback=solveNum。document对象使我们可以从脚本中对HTML页面中的所有元素进行访问,createElement()方法通过指定名称创建一个元素,body属性提供对< body >元素的直接访问,对于定义了框架集的文档将引用最外层的< frameset >。appendChild()方法可向节点的子节点列表的末尾添加新的子节点,也就是网页会把 “source/jsonp.php?callback=solveNum” 加入到DOM中。源码中定义了solveNum的函数函数传入参数 obj,如果字符串 “answer” 在obj 中就会执行。getElementById()方法可返回对拥有指定ID的第一个对象的引用,innerHTML属性设置或返回表格行的开始和结束标签之间的HTML。这里的script标签会把远程加载的solveSum({“answer”:”15”})当作js代码执行,然后这个函数就会在页面显示答案。
漏洞复现:
注意到需要向source/jsonp.php传入参数,这个参数没有进行任何的过滤,因此我们可以通过这个参数进行注入。
由于是post提交我们用hackbr添加参数,我们构造参数注入include=<script src="source/jsonp.php?callback=alert('xss');"></script>
impossible
源码分析:
|
|
与high等级不同,impossible等级执行JSONP调用,但不使用callback参数,而是硬编码要调用的函数。CSP设置只允许本地服务器上的外部javascript,不允许内联代码。
DVWA – Open HTTP Redirect
这和pikachu靶场的不安全的url重定向类似
Low
源码分析:
|
漏洞复现:
未作任何处理我们直接在参数中拼接http://xxx.com即可重定向
medium
源码分析:
|
漏洞复现:
这里使用正则对http://和https://头进行检验我们可以让他访问本地的一些文件如phpinfo页面
也可以使用相对网址将页面带到百度将http:或者https去掉直接使用//baidu.com
high
源码分析:
|
漏洞复现:
这里使用strpos函数检测参数中是否有info.php我们可以在参数中添加一个变量指定info.php来绕过
impossible
源码分析:
|
系统不接受页面或 URL 作为重定向目标,而是使用 ID 值来告知重定向页面重定向到的位置。这会将系统限制为只能重定向到它知道的页面,因此攻击者无法修改内容以转到他们选择的页面。
DVWA – Authorisation Bypass
在这里个人理解为越权
Low
源码中啥都没
毫无防备
漏洞复现:
我们换一个权限低的账号直接访问被隐藏的管理源才能访问的页面直接访问到
medium
源码分析:
|
在这里只限定了对html页面的访问但我们直接访问数据页面呢
漏洞复现:
high
源码分析:
|
HTML 页面和用于检索数据的 API 都已被锁定,但是跟新数据我们可以使用一下看看
成功越权使用了管理员的更新功能。
DVWA 学习总结
学习完发现还需要学习很多知识才能完全理解漏洞原理,仍需要多复习和巩固,将欠缺的知识继续补充完整。仍有一些关卡没有复现需要查阅资料进行学习。