dvwa初体验

(主要只是对Low等级而言)

Burp Force

解析:暴力破解用户名和密码

方法1:bp爆破

最常规常见的方法,主要是运用bp抓包后发送到爆破模块用字典进行爆破即可

(找了个看起来很全的字典GitHub - arthur0081/Blasting_dictionary: 爆破字典

这是破解方法所对应的一些适用条件:QQ截图20210521201711

low就很轻松爆出,新手狂喜

QQ截图20210521204045

方法2:sql注入绕过

之后再看到其他博客才知道能这样爆,因为是自己了解sql注入太少所以不清楚能这样玩,毕竟sql注入我感觉挺难的。。应该是用在很多复杂的网站挖漏洞这种,而且sql注入漏洞应该是大赛中考虑最多的

这里再了解下定义吧:

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中**事先定义好的查询语句的结尾上添加额外的SQL语句**,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

那首先就可以查看源码康康有没有过滤掉用户名和密码(因为没怎么学php语法然后sql语句也没记住太多所以确实看不太懂就是了)

<?php

if( isset( $_GET[ 'Login' ] ) ) { // 获取用户名和密码 $user = $_GET[ 'username' ];

// Get password
$pass = $_GET[ 'password' ];
$pass = md5( $pass );

// 查询验证用户名和密码
$query = "SELECT * FROM users WHERE user = '$user' AND password = '$pass';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

if( $result && mysqli_num_rows( $result ) == 1 ) {
// 输出头像和用户名
$row = mysqli_fetch_assoc( $result );
$avatar = $row["avatar"];

//登陆成功
​ echo "<p>Welcome to the password protected area {$user}</p>";
​ echo "<img src=\"{$avatar}\" />";
}
else {
​ // 登录失败
​ echo "<pre><br />Username and/or password incorrect.</pre>";
}

((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

因为用户名和密码都没有进行过滤所以不安全,然后直接sql语句进行测试

admin’ or ‘1’=’1,这个在数据库中对应select * from *where username=’admin’ or ‘1’=’1’语句,or语法是一真则真,因为’1’=’1’是恒成立的,where语句后面也就都为真,所以我们能够直接绕过验证,成功登录。

顺便复习下GET和POST方法

GET 方法

GET 用于从指定资源请求数据。

GET 是最常见的 HTTP 方法之一。

查询字符串(名称/值对)是在 GET 请求的 URL 中发送的

POST 方法

POST 用于将数据发送到服务器来创建/更新资源。

通过 POST 发送到服务器的数据存储在 HTTP 请求的请求主体中

抓包后可以知道网站用的是GET或者是POST方法。

参考:菜鸡的渗透学习之路:DVWA暴力破解 - FreeBuf网络安全行业门户

Command Injection

解析:命令行注入,通过输入恶意代码进行远程代码操控,即ctfhub里RCE模块(远程命令/代码执行漏洞)的题目。

首先了解一下ping:Ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。应用格式:ping空格IP地址

这一块的内容还挺多的,也挺新:

命令的链接符号
1.每个命令之间用;隔开
说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
2.每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
3.每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。

  1. | 是管道符号。管道符号改变标准输入的源或者是标准输出的目的地。

  2. & 是后台任务符号。 后台任务符号使shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。

    基本的漏洞利用:window和linux系统都可以用&&来执行多条命令

    所以这个题就直接按照题解,直接得到信息

    image-20210521211237230

File Upload

解析:文件上传漏洞,是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。主要是用一句话木马通过各种绕过上传到服务器然后用蚁剑连接即可拿到权限。

low等级很简单并无任何白名单黑名单

QQ截图20210523200955

直接传一句话木马用蚁剑连就行了

QQ截图20210523201200

XSS

解析:跨域脚本攻击,向被攻击网站注入恶意脚本,恶意脚本获取到数据发送到另外一个域的网站上。XSS攻击需要具备两个条件:需要向web页面注入恶意代码;这些恶意代码能够被浏览器成功的执行。主要作用是拿到cookie

XSS(Reflect)

反射型xss:基本原理就是通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特定的代码参数会被HTML解析和执行

虽然也不会,不过也得跟着看看源码:QQ截图20210523202059

只是判断了name是否为空,不为空就输出name。就存在xss漏洞

直接上xss测试语句QQ截图20210523201706

(很神奇)

XSS(Store)

又是新东西,先了解下定义:储存型xss,把恶意脚本存储到被攻击者的网站的数据库。其他人访问数据库中的恶意脚本代码后,浏览器执行恶意脚本,被攻击。存储式攻击不止一次攻击,并且被攻击的人不止一个,影响范围大。

这个东西

大概思路就是说,攻击者在评论处输入xss测试语句,点击提交后这段脚本存入到数据库就能执行

然后又是跟着看源码的时候:

' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '' ); //mysql_close(); } ?>

没有过滤掉message和name,直接在message处打上测试语句就行

QQ截图20210523202903

QQ截图20210523203304

(神奇)

XSS(DOM)

又是不知道的东西啊!了解下先:

DOM型XSS其实是一种特殊类型的反射型XSS,DOM是文档对象模型balbalbala那一堆东西我也不懂是啥,先不做过多的了解。。。

直接看着做

先看源码(好干净啥也没有?)

然后default也没过滤于是直接在url构造xss就行了

QQ截图20210523204739

QQ截图20210523204801

(有意思)

SQL注入

解析:sql普通注入可以根据报错提示,进行sql语句注入从而直接爆出我们想要的信息,比如数据库版本、数据库名、用户名、操作系统版本等,一般用手注和sqlmap自动注。

sqlmap自动注入(GET方法)

新手的我果然还是比较喜欢先尝试用工具嘻嘻

QQ截图20210528193432

got a 302 redirect to,,不能直接用,需要带上cookie,去抓包拿cookie,然后那就把cookie带上进行输入对应的sqlmap命令就能看到东西了,就是这么霸道。

基础命令如下:

*-p参数只对指定的参数进行注入,在上述命令中指定了对username参数进行注入
-p username
-v:显示详细的信息,有1-6级,默认为1
-f参数查看指纹信息
–technique 看情况选
B : 基于Boolean的盲注(Boolean based blind)
Q : 内联查询(Inline queries)
T : 基于时间的盲注(time based blind)
U : 基于联合查询(Union query based)
E : 基于错误(error based)
S : 栈查询(stack queries)
–technique 看情况选******

–dbs:查看目标数据库系统的所有库 -D
–tables -T表名
–columns -C字段名
*–dump 内容**

先看所有库

python2 sqlmap.py -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=m42j35b05uii73jgpe3am21he0" --dbsQQ截图20210528194000

也可以看相应的表,这里查看了dvwa的表

python2 sqlmap.py -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=m42j35b05uii73jgpe3am21he0" --dbs -D dvwa --tables

QQ截图20210528194217

然后看users的字段和里面的内容

python2 sqlmap.py -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=m42j35b05uii73jgpe3am21he0" --dbs -D dvwa --tables users --columns --dump

QQ截图20210528194823

啥都能看到了!sql注入危害性可大。

手动注入

比较适用于所有的情况

还不熟悉sql语句,查看题解敲。

先起手式测试注入点:(联合查询注入) 1’ union select user, password from users#

QQ截图20210528200222

然后闭合 1’ or ‘1’ =’1

QQ截图20210528200405

low等级毫无任何过滤直接成功注入,拿到所有信息,结束。

SQL盲注

解析:盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。难度比普通注入大很多。

类型大体分为布尔盲注,时间盲注,报错盲注

详情参考SQL注入之盲注简单总结 - Zane_S - 博客园 (cnblogs.com)

sqlmap注入

直接一套操作秒爆出表,sqlmap果真是相当厉害又方便

python2 sqlmap.py -u "http://127.0.0.1/DVWA/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=m42j35b05uii73jgpe3am21he0" --technique B --dbs --batch

QQ截图20210528202422

这个爆的时候是一个表一个表的冒出来,符合盲注特点。

要查东西也和普通注入的时候一样的命令就行

手动注入

DVWA-SQL Injection(Blind)(SQL盲注) - 简书 (jianshu.com)

一套按照题解可以搞出来。