DVWA浅谈

之前经常研究过这个,但是总是没有进行个系统的整理。
DVWA现在有14个模块
之前详细了解过的就简写了,不了解的就好好深入一下子。
brute force顾名思义就是暴力破解这里就介绍下工具吧,burpsuite的几种攻击吧,然后对代码进行一下观察就带过了。
第一种:
Sniper标签 这个是我们最常用的,Sniper是狙击手的意思。这个模式会使用单一的payload【就是导入字典的payload】组。它会针对每个position中$$位置设置payload。这种攻击类型适合对常见漏洞中的请求参数单独地进行测试。攻击中的请求总数应该是position数量和payload数量的乘积。

第二种:
Battering ram – 这一模式是使用单一的payload组。它会重复payload并且一次把所有相同的payload放入指定的位置中。这种攻击适合那种需要在请求中把相同的输入放到多个位置的情况。请求的总数是payload组中payload的总数。简单说就是一个playload字典同时应用到多个position中

第三种:
Pitchfork – 这一模式是使用多个payload组。对于定义的位置可以使用不同的payload组。攻击会同步迭代所有的payload组,把payload放入每个定义的位置中。比如:position中A处有a字典,B处有b字典,则a【1】将会对应b【1】进行attack处理,这种攻击类型非常适合那种不同位置中需要插入不同但相关的输入的情况。请求的数量应该是最小的payload组中的payload数量

第四种:
Cluster bomb – 这种模式会使用多个payload组。每个定义的位置中有不同的payload组。攻击会迭代每个payload组,每种payload组合都会被测试一遍。比如:position中A处有a字典,B处有b字典,则两个字典将会循环搭配组合进行attack处理这种攻击适用于那种位置中需要不同且不相关或者未知的输入的攻击。攻击请求的总数是各payload组中payload数量的乘积。
Low:
基本没有做任何防御。同时还可以被sql注入攻击。
在这里插入图片描述

Medium:
加入了SQL字符转义逻辑,避免了SQL注入攻击,但是不能防御暴力破解。在这里插入图片描述

High:
加入了Token机制,每次登录页面都会随机生成Token字串,那么无脑爆破就不可能了,因为Token是完全随机的。
但是如果用更复杂的方法,每次先抓取当前页面Token值再随即进行字典式爆破,仍可以实现破解,需要编码进行解决。
在这里插入图片描述

Impossible:
加入了账号锁定机制,数次登录失败后,账号会锁定,那么暴力破解就行不通了。当输入错误3次,锁定15分钟的可靠方式防止了爆破,同时采用PDO(PHP Data Object,PHP数据对象)机制更为安全,不会在本地对SQL进行拼接。当调用prepare()时,将SQL模板传给MySQL Server,传过去的是占位符“?”,不包含用户数据,当调用execute()时,用户的变量值才传递到MySQL Server,分开传递,阻止了SQL语句被破坏而执行恶意代码。在这里插入图片描述
Command Injection(命令行注入)
是指程序中有调用系统命令的部分,例如输入ip,程序调用系统命令ping这个ip。如果在ip后面加一个&&、&、|、||命令拼接符号再跟上自己需要执行的系统命令在这里插入图片描述
首先咱们解决一下乱码问题在DVWA\dvwa\includes目录下找到dvwaPage.inc.php文件中所有的”charset=utf-8”,修改”charset=gb2312”,即可、
然后咱们就主要进行一下代码审计
Low
在这里插入图片描述

代码分析:在包含注入命令数据提交后可根据回显结果是否包含执行命令结果特征进行判断是否存在注入命令漏洞,例如在输入命令中包含id的数据,查看响应结果是否包含uid和gid,观察以下代码,我们发现,没有进行任何过滤,我们只需要通过“&&”“&”“|”就可以完成注入
相关函数
stristr(string,search,before_search)
stristr函数搜索字符串在另一字符串中的第一次出现,返回字符串的剩余部分(从匹配点),如果未找到所搜索的字符串,则返回 FALSE。参数string规定被搜索的字符串,参数search规定要搜索的字符串(如果该参数是数字,则搜索匹配该数字对应的 ASCII 值的字符),可选参数before_true为布尔型,默认为“false” ,如果设置为 “true”,函数将返回 search 参数第一次出现之前的字符串部分。

php_uname(mode)
这个函数会返回运行php的操作系统的相关描述,参数mode可取值”a” (此为默认,包含序列”s n r v m”里的所有模式),”s ”(返回操作系统名称),”n”(返回主机名),” r”(返回版本名称),”v”(返回版本信息), ”m”(返回机器类型)。
可以看到,服务器通过判断操作系统执行不同ping命令,但是对ip参数并未做任何的过滤,导致了严重的命令注入漏洞。
Medium级别
在这里插入图片描述

这里我们可以看见先对于Low级别而言这里多了一些代码,这段代码的作用就是对输入的字符进行判断若出现‘&&’或‘;’字符则用‘’代替。这样就在一定程度上隔绝了用此类连接符连接的命令注入。这是明显的黑名单做法,可还是不能有效的阻挡命令注入。
High
在这里插入图片描述

代码分析:在包含注入命令数据提交后可根据回显结果是否包含执行命令结果特征进行判断是否存在注入命令漏洞,例如在输入命令中包含net user的数据,查看响应结果是否包含administrator
high等级的命令行注入过滤的东西比较多,但是他在过滤的时候有bug。
这个BUG就是‘| ’替换为空格,后面还有一个空格,所以‘|’就可以利用(源码中是“| ”,所以我们可以用“|”)
我们输入192.168.29.76|dir
impossible
在这里插入图片描述
代码分析
1.isset函数用来检测变量是否设置,并且不能是 NULL。
2.用户可以完全控制该参数,传参时给Submit赋值即可满足条件继续执行。
3.用户输入部分使用stripslashes()函数过滤,函数删除字符串内所有反斜杠。
4.explode()函数以.为分割,把字符串切成数组。
5.is_numeric()检测string是否为数字或数字字符串。这样命令中仅能包含数字。
6.Generate Anti-CSRF token,生成反CSRF令牌。给命令盲注带来一定难度。

File Upload(文件上传)
File Upload,即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都曝出过文件上传漏洞。之前的博客里有对upload-labs的详细对抗经历,在这里就不多废话了。
low 直接上传一字马然后菜刀截URL
medium限制了大小同时对后缀有了限制,咱们改下后缀如上操作在burp抓包改包就好了
high采用%00截断的方法可以轻松绕过文件名的检查,但是需要将上传文件的文件头伪装成图片如图
在这里插入图片描述
impossible

在这里插入图片描述
在这里插入图片描述

in_get(varname)
函数返回相应选项的值
imagecreatefromjpeg ( filename )
函数返回图片文件的图像标识,失败返回false
imagejpeg ( image , filename , quality)
从image图像以filename为文件名创建一个JPEG图像,可选参数quality,范围从 0(最差质量,文件更小)到 100(最佳质量,文件最大)。
imagedestroy( img )函数销毁图像资源
可以看到,Impossible级别的代码对上传文件进行了重命名(为md5值,导致%00截断无法绕过过滤规则),加入Anti-CSRF token防护CSRF攻击,同时对文件的内容作了严格的检查,导致攻击者无法上传含有恶意脚本的文件。

XSS(Reflected)(反射型跨站脚本)
xss 中文名是“跨站脚本攻击”,英文名“Cross Site Scripting”。
xss也是一种注入攻击,当web应用对用户输入过滤不严格,攻击者写入恶意的脚本代码(HTML、JavaScript)到网页中时,如果用户访问了含有恶意代码的页面,恶意脚本就会被浏览器解析执行导致用户被攻击。
同样在前面博客有过详解的靶场
low直接输入js脚本即可
medium大小写绕过
high

可以看到,通过使用htmlspecialchars函数,解决了XSS,但是要注意的是,如果htmlspecialchars函数使用不当,攻击者就可以通过编码的方式绕过函数进行XSS注入,尤其是DOM型的XSS。

XSS(DOM)
XSS(DOM)是一种基于DOM树的一种代码注入攻击方式,可以是反射型的,也可以是存储型的,所以它一直被划分第三种XSS
与前两种XSS相比,它最大的特点就是不与后台服务器交互,只是通过浏览器的DOM树解析产生,除了js,flash等脚本语言也有可能存在XSS漏洞

Low:
Payload:?default=
Impossible:Don’t need to do anything, protction handled on the client side
推荐一篇文章对这个讲的特别详细https://www.jianshu.com/p/001daa7cf1f5
XSS(stored)
Stored Cross Site Scripting(XSS)存储型跨站脚本攻击会把用户输入的数据存储在服务器端。如果web应用程序从恶意用户处收集了输入数据并将这些数据存储在数据库中以供以后使用,就会发生储存式跨站点脚本。
low老样子没有过滤直接js语句
medium
addslashes() 函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。可以看到,由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码,但是对于name参数,只是简单过滤了字符串,仍然存在存储型的XSS。因为name在前端对 字符数进行了限制可以通过抓包改包进行
high如上的老套路只不过这里用的是标签事件,继续burp抓包改包
impossible 。。。
SQL Injection(Blind)
首先要了解盲注与普通SQL注入的区别
在这里插入图片描述
对于基于布尔的盲注,可通过构造真or假判断条件(数据库各项信息取值的大小比较,如:字段长度、版本数值、字段名、字段名各组成部分在不同位置对应的字符ASCII码…),将构造的sql语句提交到服务器,然后根据服务器对不同的请求返回不同的页面结果(True、False);然后不断调整判断条件中的数值以逼近真实值,特别是需要关注响应从True<–>False发生变化的转折点。

对于基于时间的盲注,通过构造真or假判断条件的sql语句,且sql语句中根据需要联合使用sleep()函数一同向服务器发送请求,观察服务器响应结果是否会执行所设置时间的延迟响应,以此来判断所构造条件的真or假(若执行sleep延迟,则表示当前设置的判断条件为真);然后不断调整判断条件中的数值以逼近真实值,最终确定具体的数值大小or名称拼写。

对于基于报错的盲注,搜寻查看网上部分Blog,基本是在rand()函数作为group by的字段进行联用的时候会违反Mysql的约定而报错。rand()随机不确定性,使得group by会使用多次而报错。

low
在这里插入图片描述
1.判断是否存在注入,注入的类型
不管输入框输入为何内容,页面上只会返回以下2种情形的提示:
满足查询条件则返回"User ID exists in the database.",不满足查询条件则返回"User ID is MISSING from the database.";两者返回的内容随所构造的真假条件而不同,说明存在SQL盲注。
在这里插入图片描述
2.猜解当前数据库的名称判断数据库的长度用二分法思路
在这里插入图片描述
然后之后判断数据库名称的组成元素,这个需要根据ASCII来判断,在下目前没那么强的实力以后会写一篇博客进行总结的
在这里插入图片描述
然后同上操作,猜出数据库的名字
3.猜解数据库的表名
1)猜解表的个数
在这里插入图片描述
2)猜解表名
`

1.查询列出当前连接数据库下的所有表名称

select table_name from information_schema.tables where table_schema=database()

2.列出当前连接数据库中的第1个表名称

select table_name from information_schema.tables where table_schema=database() limit 0,1

3.以当前连接数据库第1个表的名称作为字符串,从该字符串的第一个字符开始截取其全部字符

substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)

4.计算所截取当前连接数据库第1个表名称作为字符串的长度值

length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))

5.将当前连接数据库第1个表名称长度与某个值比较作为判断条件,联合and逻辑构造特定的sql语句进行查询,根据查询返回结果猜解表名称的长度值

1’ and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))>10 #
`
然后再猜解表名称的字符组成
4.猜解表中的字段数目

# 判断[dvwa库-users表]中的字段数目
(select count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=xxx
# 判断在[dvwa库-users表]中是否存在某个字段(调整column_name取值进行尝试匹配)
(select count(*) from information_schema.columns where table_schema=database() and table_name='users' and column_name='xxx')=1
# 猜解第i+1个字段的字符长度
length(substr((select column_name from information_shchema.columns limit $i$,1),1))=xxx
# 猜解第i+1个字段的字符组成,j代表组成字符的位置(从左至右第1/2/...号位)
ascii(substr((select column_name from information_schema.columns limit $i$,1),$j$,1))=xxx 

其实综上就是一个对SQL理解加深之后凭借经验的猜测,在我看来只要加深理解其实就还可以吧。。。。

medium其实跟上面一样只是加了个前端的过滤可以在Firefox关掉JavaScriptunable来解决也可以直接用burp进行抓包改包

high对于LIMIT 1的限制输出记录数目,可以利用#注释其限制;服务端可能会随机执行sleep()函数,做执行,则延迟的时间是随机在2-4s,这样会对正常的基于时间延迟的盲注测试造成干扰。因此可以考虑用基于布尔的盲注进行测试:
impossible就先看看吧,也看不懂。。。

SQL注入
SQL Injection,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。SQL注入漏洞的危害是巨大的,也是非常常见的方式,很贴近实际,比如学校的网站。。

这时候推荐自动化注入神器sqlmap之后博客也会介绍一下
关于sql注入之前的文章还是写的比盲注详细的,所以在这里就不多废话了
方法就是
1.判断是否存在注入,注入是字符型还是数字型

2.猜解SQL查询语句中的字段数

3.确定显示的字段顺序

4.获取当前数据库

5.获取数据库中的表

6.获取表中的字段名

7.下载数据
low medium high 全可以用sqlmap解决,记得带cookie
JavaScript attack老实说没搞懂,之后好好问问吧
CSRF
CSRF(跨站请求伪造),全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。今天早上有人讲了下csrf和xss的联动很有意思,之后会写一篇博客讲一讲

file inclusion(文件包含漏洞)
File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。这个东西在上一篇也有比较详细的介绍。
`可以看到,服务器端对page参数没有做任何的过滤跟检查。

服务器期望用户的操作是点击下面的三个链接,服务器会包含相应的文件,并将结果返回。需要特别说明的是,服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。点击file1.php后,而现实中,恶意的攻击者是不会乖乖点击这些链接的,因此page参数是不可控的。

漏洞利用
1.本地文件包含

构造url

http://192.168.153.130/dvwa/vulnerabilities/fi/page=/etc/shadow

报错,显示没有这个文件,说明不是服务器系统不是Linux,但同时暴露了服务器文件的绝对路径C:\xampp\htdocs。

构造url(绝对路径)

http://192.168.153.130/dvwa/vulnerabilities/fi/page=C:\xampp\htdocs\dvwa\php.ini

成功读取了服务器的php.ini文件

构造url(相对路径)

http://192.168.153.130/dvwa/vulnerabilities/fi/page=…\xampp\htdocs\dvwa\php.ini

加这么多…\是为了保证到达服务器的C盘根目录

就先讲这么多,新版的DVWA比旧版的多了好几个模块,这次这是初步了解一下,下次还是要继续try的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值