DVWA题目:
1、Brute Force
①easy
先随便输入密码和账号使用burpside抓包进行爆破
抓包之后转到intruder选择集束炸弹进行爆破。
最后得到的结果为:
账号:admin
密码:123
②media
源代码中通过了对密码和账户的查询增强了安全系数,之后通过sleep( 2 )使得输入密码错误时会休眠两秒,但操作上与easy无异
③high
2、Command Injection
①easy
查看题目,我们得知题目要求我们ping一个命令,我们带入127.0.0.1的ip地址,例如:
随即得到答案
②medium
难度升级之后,我们先查看源码:
发现,过滤了”&&“和“;”,因此会使得很多命令被限制,但依旧很多可以参考的代码,我们依旧可以使用之前的代码·:
③high
产看源码:
注意,此处的黑名单中设置了“| ”说明并不是彻底将“|“连接符禁用,而是漏过了" |".最终得到:
3、CSFR
①easy:
进入题目,我们看到题目的目标是让我们实现对于密码的修改,,首先看到要求输入一次密码和确认一次密码,输入两次不同时看到URL为:
所以将两个一致即可看到修改密码成功
②media
当进入题目时,我们查看源码进行分析,可以得到media加上了对用户请求头的中的Referer字段进行验证。即用户的请求头中的Referer字段必须包含了服务器的名字。
所以在我们直接在Hackbar依据easy输入时会显示:
所以我们需要通过burpside抓包进行添加Refere的操作,首先复制url信息到新的页面抓包:
可以看到在进行这一系列操作之后显示了密码已修改
③high
4、File Inclusion
①easy
先查看源码,文件的要求是GET类型我们分析可知他并未过滤任何文件,所以先建立一个文件包含<?php system('ipconfig');?>的内容或者其他内容,之后我们将?page通过这个输入文件地址,就可以通过漏洞见到内容
②media
与简单难度比较,我们查看源码:
可以看到,此时对于文件的输入形式进行可限制
③high
分析后台源代码,我们看到这个题目的所有输入必须是以“file*”的形式且不能有“include.php”。所以,我们用flie://来进行绕过即:(1.txt是我自己随便建的一个txt文件)
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file://E:\PHPstudy\phpstudy_pro\WWW\DVWA\1.txt
结果即为:
5、File Upload
①easy
首先我们得知这个题目是针对文件上传的题目,所以,首先我们先写一个一句话木马:
将文件带入之后,我们解决了easy的难度。
②media
分析源码,我们发现,这个文件的类型接受的是.jpg格式或者是.png格式,所以,我们只需将文件的后缀修改一下即可
即:
③high
直接查看源码,我们发现网页只接受.jpe等类型的文件,所以我们写一个一句话木马,随后尝试上传:
结果显示为:
得知直接上传的方式不行,并且源码中getimagesize函数更是限制了上传文件的文件头必须为图像类型,所以我们只能借助工具上传
6、Insecure CAPTCHA
①easy
首先查看代码
发现这个程序中是分两种,当step输入不同会带入不同的代码运行,所以我们需要用抓包从而来修改上传的step。
抓包后我们看到此时step=1将我们的step换位2即可。
②media
当查看源码时,我们发现,step2中包含了一个新的判断条件:
就是判断是否passed_captcha通过,所以我们需要用burpside抓包来修改:
将step=2,并且添加passed_capecha=ture,从而实现绕过。
③high
7、SQL Injection
①easy
首先判断是否存在SQL注入漏洞:
随后输入 1 and 1=2:
当我们注入“1’”时发现:
则可以证明是存在注入点的,并且是以单引号闭合的。
随后判断数列:
说明数列数位2.
现在我们开始尝试注入;看到两个显回之后获取数据库中的表:
随后获取表中的字段名:
获取字段:
最后输入筛选
1’ union select user, password from users#
即可
②media
中级的难度有所提高,限制了我们的输入,我们用burpside抓包然后发送到repater,找到id的输入点,进行修改,首先先查看列数:
得知列数为3;
之后查看列表名:
随后查表即可:
id=1 union select user, password from users#
③high
当我们查列表时,发现此时出现问题,尝试其他:
判断数列数为2;
接着查表名:
最后即可得到结果,用1’ union select user,password from users#爆破即可
8、SQL Injection (Blind)
①easy
当我们尝试输入1 与1‘的时候,我们会发现发生错误所以我们只能依据这个来进行判断,所以开始操作;
输入1时,我们得到结果为真
之后输入1’得到MISSING的结果
随后输入1 and 1=1和1 and 1=2得到的结果均为真
输入1’ and 1=1 #显示存在
输入1’ and 1=2 #不存在
因此可得这个题目存在SQL注入漏洞
之后我们要判断数据库长度:
当我们输入
1’ adn length(database())=4#
时,我们看到的结果为存在,说明此时的数据库长度为4;
之后确定数据库名:
通过1’ and ascii(substr(databse(),1,1))来确定数据库的名称
1’ and ascii(substr(databse(),1,1))>95
1’ and ascii(substr(databse(),1,1))<122
多次重复从而得到数据库的名称
1’ and (select count (table_name) from information_schema.tables where table_schema=database())=x #
当我们切换x的值,最后当x=2时得到值;
之后我们确定表的长度:
1’ and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=x #(x为大于1的整数)
当x=9时,得到User ID exists in the database.
之后继续:
②media
与之前的SQL注入一致,先用burpside抓包,操作与easy难度下一致
③high
high难度也是一致从另一个界面中进行注入;
9、Weak Session IDs
①easy
先查看源码,分析代码,我们得知:
-
当后台收得到的请求时POST请求时会进行判断是否在last_session_id之中
-
如果存在那么就使得它=0,之后会从0开始执行++的操作
-
最后通过setcookie()函数创建一个叫dvwaSession中的内容输入到cookie_value这个变量中
所以我们需要查看页面的此时的cookie
获得此时的cookie之后从加载页面:
使用hackbar来进行访问登录成功
②media
查看源码我们看到此时的cookie是根据时间来确定的,我们首先用burpside抓包查看cookie
抓包到Repeater之后,我们send查看此时的cookie:
复制下来之后我们转到时间戳转换工具,得到:
③high
老样子,先看源代码有什么改动的地方:
首先,还是先通过
$_SERVER[‘REQUEST_METHOD’]
判断是否为POST请求,
之后,用
if (!isset ($_SESSION[‘last_session_id_high’]))
来判断是否设置了$_SESSION[‘last_session_id_high’]的值,如果没有则将他设置为0
之后,用“++”的操作进行累加,把结果通过MD5加密之后进行赋值给cookie_value,最后用setcookie()函数来设置一个cookie。且过期时间为一个小时,路径为
“/vulnerabilities/weak_id/”,域名为 $_SERVER[‘HTTP_HOST’] 的值,禁用安全标志和 HTTPOnly 标志。
那么,我们先来抓包获取cookie:截取dvwaSession进行md5解密:
10、XSS (DOM)
①easy
因为easy难度下没有对输入的内容进行限制先尝试点击select按钮我们得到上传的defualt的值为English所以我们可以通过这个进行编辑XSS代码:
随即得到结果
②media
当我们查看源码时,我们发现此时"<script"被禁止,所以我们不能用
<script>
,尝试使用
<img src="1" onerror="alert(1)">
发现结果并没有显示出
查看网页源码:
发现虽然插入了代码,但是没有在option之中所以无法起作用,所以直接构造<option>
语句直接插入:
http://127.0.0.1/DVWA/vulnerabilities/xss_d/?default=><option><img str="1" οnerrοr=alert(666)>
但是此时只有">"被插入,其他部分任然没有最后插入成功
③high
先看代码我们发现此时只允许除了English之外的其他的语言通过,我们可以先之前一样将语句插入
http://127.0.0.1/DVWA/vulnerabilities/xss_d/?default=English#%3C/option%3E%3C/select%3E%3CBODY%20ONLOAD=alert(document.cookie)%3E
可以看到我们在English之后添加了#,在url中#后边的内容不会发送到服务端,从而可以实现绕过。
11、XSS (Reflected)
①easy查看源码,发现时$_GTE类型的,所以我们可以直接通过输入框进行输入然后就会运行:
②media
查看源码,我们发现
<script>
被过滤掉了,所以我们尝试事件绕过:
即:输入一段代码使得插入一个链接从而使得JS代码可以运行从而达到效果:
<a href = 'javascript:alert(666)'>click</a>
③high
查看源码,我们发现:“<”、“s”、“c”、“r”、“i”、“p”、"t"均被限制所以我们不能够出现这几个字母与字符
我们采用<img>
的方式进行插入,使得最后带入成功。
<img src=1 οnerrοr=alert(666)>
12、XSS (Stored)
①easy
发现题目中没有对于输入内容的限制,所以可以构造代码:
<script>alert=("666")</script>
②media
查看源代码,我们发现,此时的题目过滤了
<script>
所以我们不能直接使用所以我们需要通过burpside抓包来修改;
在输入name和message之后从burpside抓包,将name修改为:<sc<script>ript>alert(/name/)</script>
从而绕过
③high
查看源码,我们发现此次的限制相较于之前更加严苛,但是忽略了img、iframe等其他标签,所以我们还是可以像上一道题一样,抓包之后进行改包:
最终得到结果
13、CSP Bypass
①easy
对于这类题目我们需要借助其他的网页来实现注入:
创建一个包含JS代码并且可以运行的网页:
复制网页代码:
从而实现攻击
②media
查看源码,我们注意到注释的东西正是可以直接用的代码,我们尝试输入:
输入后,我们随即得到了:
14、JavaScript
①easy
进入界面,我们首先尝试输入提示的success,发现我们得到的结果为错误,之后我们尝试从编辑器中查看源码:
但是发现源码进行过加密,利用开发者工具进行调试,发现即使发送参数是 success 在传到 generate_token 函数中时 phrase 还是变成了 ChangeMe
随后我们只能调用 JS 加密函数获得正确 token:
随即用burpside抓包通过修改token来实现:
②media
查看源码,我们发现输入的规格为:
所以我们加密的规格是:
当我们发现,我们不论输入什么都会变为:
因此我们需要将获取到的真正的token从而来使得结果正确:
③high
查看源代码:
解码后,我们来查看源码:
从中我们看到有三个三种函数我们调用,我们调用函数来生成token:
但真正有用的是token_part_1和token_part_2
js中用来3个函数来计算token分别为:
1、 token_part_2()传入参数字符串’YY’和token值拼接并调用sha256
2、 token_part_3()将token值和字符串’ZZ’拼接并调用sha256()加密,从而得到最终的token;
目前最重要的是搞清楚他们执行的顺序
1、 首先将phrase 的值清空document.getElementById(“phrase”).value = “”;
2、由于setTimeout函数有300毫秒延时,所以先执行了token_part_1(“ABCD”, 44)
3、在执行2.然后再执行了 token_part_2(“XX”)
4、token_part_3被添加在提交按钮的click事件上,也就是点提交会触发执行最后执行所以最后因该是:
所以争取的执行步骤应该是:在输入框输入 success 后,再到控制台输入token_part_1(“ABCD”, 44)和token_part_2(“XX”)这两个函数,最后点击按钮执行token_part_3();
15、Authorisation Bypass
①easy
我们查看源码:
发现并没有限制,我们尝试直接访问/vulnerabilities/authbypass/,尝试访问,可以访问成功。
②media
③high
16、Open HTTP Redirect
①easy
首先查看源码:
我们分析可知,题目是可以通过GET到redirect的内容从而进行跳转到相关地址,也就是规定了输入的内容,而输入成其他的内容则会跳转至500报错
所以我们可以输入:
?redirect=跳转网页URL
?redirect=https://blog.csdn.net/stronelu?spm=1010.2135.3001.5421
②media
我们见到,http和https均被过滤,因此想要跳转至其他页面,我们必须单独重新单独建立一个文件,将文件地址导入到redirect中。
将文件上传之后,通过访问文件即可
③high
一样首先通过redirect输入,之后查看是否包含了文件info.php并使用strpos()来检查,随后用header定向,最后跳转。
由代码审计得,在构造参数时是指包含字符串info.php即可
例如:
?redirect=https//www.baidu.com/?已定义参数=info.php