DVWA漏洞平台靶场练习 总结 wp

每日学习 每日持续更新ing~

DVWA漏洞平台靶场

Brute Force(暴力破解)

概述:利用暴力破解(跑字典)去获得登录权限

low

漏洞描述:通过get请求获取usename和passwd,可以使用burp的暴力破解或者使用万能密码 'or '1'='1

medium

漏洞描述:后台使用mysqli_real_escape_string()sleep()函数,使用mysqli_real_escape_string()会对一些特殊字符进行转义,防止SQL注入,sleep()用于当登录失败后,执行sleep(),来限制大批量的爆破攻击,加大攻击者的攻击成本。

high

漏洞描述:登录界面添加token校验,在每次登陆前会先校验token值是否一致,但这里的token以type='hide’的方式显示可以在前端源码中被获取到,所以依然存在问题,利用脚本或者工具直接获取到token值进行暴力破解(具体的操作可以参考pikachu靶场wp的防token内的操作)

impossible

防范措施:添加惩罚机制,登陆失败次数大于3就锁定了账号。这样子暴力破解就会非常缓慢,15分钟只能跑3个。所以就相当于没用了。但这种防护机制可能会非常影响用户体验,攻击者会恶意的去将大量的账号进行锁定。只能是面对不同场景使用不同的防御机制。


Command Injection(命令注入)

概述:未对用户输入进行检测和过滤,错误的调用了"危险"函数(类似于eval、system等)

low

漏洞描述:后台直接提供了系统命令执行,将输入的值直接拼接在代码中,未做处理,可以任意系统命令执行

medium

漏洞描述:对输入的内容进行简单检测,会过滤&&,但可以被绕过,例如使用&;&

high

漏洞描述:进行的大量的黑名单检测绕过,但依旧可以找到问题字符串进行绕过,

impossible

防范措施:获取要测试的IP,利用函数根据.将其分割成4个数值,再重新拼接后进行测试


CSRF(跨站请求伪造)

概述:攻击者伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。
主要问题:敏感操作的链接容易被伪造。

low

漏洞描述:修改密码操作,只判断输入的两个值是否相等,相等就修改密码,并且修改参数自己在url中,攻击者构造一个修改地址的链接,给其他用户点击后并会被修改。

medium

漏洞描述:添加请求头的中的Referer字段进行验证,但Referer字段可以自己构造

high

漏洞描述:添加token校验,这样攻击者必须取得用户的 cookie 值才能访问修改密码的页面,然后截取服务器返回的token值。然后再利用CSRF漏洞构造URL进行密码的修改。攻击者可以利用存储型XSS插入到数据库,盗取其他人的cookie

impossible

防范措施:需对身份进行二次认证,添加旧密码验证


File Inclusion(文件包含)

概述:文件包含是指应用程序加载的文件(本地/远程) 可以由用户提交的数据控制,从而导致攻击者控制恶意文件在服务器上执行

low

漏洞描述:后端获取前端传入要访问的文件名后,直接利用include()函数包含文件。

medium

漏洞描述:后端代码加入WAF检测,使用 str_replace()函数 对http://https://进行了过滤,防止远程包含漏洞的产生,也过滤了 ../..\ 防止了进行路径穿越的利用。但利用正则表达式替换(str_replace()函数 )的方式来防止攻击的做法是很容易绕过的–双写绕过。

high

漏洞描述:对包含的文件名进行了限制,必须为 file* 或者 include.php ,但依旧可以利用php伪协议绕过读取,例:file://

impossible

防御措施:使用了白名单过滤的方法,包含的文件名只能等于白名单中的文件,所以避免了文件包含漏洞的产生

File Upload(文件上传)

low

漏洞描述:未对文件上传做限制,并且直接返回文件上传路径,攻击者可以上传任意文件进行getshell。

medium

漏洞描述:对上传文件类型和文件大小进行限制,只允许上传JPG和PNG,但其获取上传文件的信息是利用PHP的全局数组$_FILES()获取,其只检测content-type,可以通过修改只检测content-type绕过(MIME验证)

high

漏洞描述:利用strrpos()函数截取的方式获取文件后缀,并使用getimagesize()获取上传文件大小和文件类型(进行文件头判断),但可以上传图片马进行绕过

impossible

防御措施:

  • 检验扩展名是否在范围内 ​
  • 图像文件的情况下确认其文件头为图像类型,而不是伪装文件
  • 针对上传文件大小进行约定(防止上传大文件进行DDOS攻击)
  • 服务器端验证(防止前端绕过),重新渲染图片
  • 上传的文件重命名,并将文件地址隐藏

Insecure CAPTCHA(不安全的验证流程)

概述:CAPTCHA是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称。主要是验证流程出现了逻辑漏洞,而不是谷歌的验证码有问题。
在这里插入图片描述
这一模块的验证码使用的是Google提供reCAPTCHA服务,下图是验证的具体流程。
在这里插入图片描述
服务器通过调用recaptcha_check_answer()函数检查用户输入的正确性。

recaptcha_check_answer($privkey,$remoteip, $challenge,$response)

$privkey => 服务器申请的private key

$remoteip => 用户ip

$challenge => recaptcha_challenge_field 字段的值,来自前端页面

$response => recaptcha_response_field 字段的值。

函数返回ReCaptchaResponse class的实例,ReCaptchaResponse 类有2个属性 :

$is_valid 是布尔型的,表示校验是否有效,
$error 是返回的错误代码。

(PS:该靶场实验不需要科学上网)

low

漏洞描述:服务器将改密操作分成了两步,第一步检查用户输入的验证码,验证通过后,服务器返回表单,第二步客户端提交post请求,服务器完成更改密码的操作。但其中存在明显的逻辑漏洞,服务器仅仅通过检查Change、step 参数来判断用户是否已经输入了正确的验证码。修改包数据step=2即可修改成功

medium

漏洞描述:Medium级别的代码在第二步验证时,参加了对参数passed_captcha的检查,如果参数值为true,则认为用户已经通过了验证码检查,然而用户依然可以通过伪造参数绕过验证。

构造:更改step参数,增加passed_captcha参数,绕过验证码。

high

漏洞描述:服务器的验证逻辑是当$resp(这里指谷歌返回的验证结果)是false,并且参数recaptcha_response_field不等于hidd3n_valu3(或者http包头的User-Agent参数不等于reCAPTCHA)时,就认为验证码输入错误,反之则认为已经通过了验证码的检查。

构造:在POST数据中添加recaptcha_response_field=flase,并且在http包头添加:User-Agent=hidd3n_valu3

impossible

防御措施:

  • 判断验证码的方式只有 $resp->is_valid
  • 增加了Anti-CSRF token 机制防御CSRF攻击
  • 利用PDO技术防护sql注入,验证过程在一起,验证码无法绕过
  • 要求用户输入之前的密码,进一步加强了身份认证。

SQL Injection(sql注入)

low

漏洞描述:没有对参数做任何的过滤,直接带入数据库进行查询,存在字符型sql注入

medium

漏洞描述:使用mysqli_real_escape_string()函数处理提交的参数,会转义字符串中的特殊字符,但可以使用16进制方式绕过 0x75

high

漏洞描述:查询提交页面与查询结果显示页面不是同一个,也没有执行302跳转,这样可以防御一般的自动化SQL注入工具(例如:sqlmap),分析源码可以看到,对参数没有做防御。在sql查询语句中限制了查询条数,虽然添加了LIMIT 1,但通过#可以直接将其注释掉。

impossible

防御措施:PDO的预处理方式避免sql注入

PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。
PDO 提供了一个数据访问抽象层,可以允许使用多种数据库,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。

PDO可以使用预处理的方式处理SQL语句

类似于:select admin from uses where id =?

PDO不会将用户输入与sql语句拼接,从原理上防御了sql注入


SQL Injection Blind(SQL 盲注)

概述:网站存在SQL注入,但无报错信息,只会放回少量信息,或者无法直接获得数据库信息,需要算术运算符通过判断对值进行一一比较

low

漏洞概述:对参数id没有做任何检查、过滤,存在明显的SQL注入漏洞,同时SQL语句查询返回的结果只有两种,User ID exists in the databaseUser ID is MISSING from the database,利用payload: 1' and ascii(sql语句)=n # 进行每位字符串的一一判断

medium

漏洞概述:利用mysql_real_escape_string函数对特殊符号进行转义,同时前端页面设置了下拉选择表单,希望以此来控制用户的输入。burp抓包修改参数攻击即可,特殊字符转义问题用16进制编码绕过

high

漏洞描述:添加了LIMIT 1限制,但可以通过 # 将其注释掉

impossible

防御措施:PDO的预处理方式避免sql注入


Weak Session IDs(弱会话IDs)

概述:当用户登录后,服务器会创建一个会话(session),会话中会保存用户的状态和相关信息,之后访问页面无需登录,只需要携带Sesion就可访问。

漏洞成因:
因为sessionID作为特定用户访问站点所需要的唯一内容。当sessionID能被轻易猜解,则攻击者将可以轻易获取访问权,SessionID一旦在生命周期内被窃取,就等同于账户失窃。同时由于SessionID是用户登录之后才持有的认证凭证,因此黑客不需要再攻击登陆过程(比如密码)。

限,无需录直接进入特定用户界面,进而进行其他操作。

low

漏洞描述:从服务端的代码端可以看出,SessionID只是从0开始累加,所以可以较容易的猜测出别人的SessionID。并且在session判断中,如果last_session_id不存在就设置为0,否则就在上次session ID基础上加1。这样是非常脆弱的设置session方法,很容易被利用。

medium

漏洞描述:基于时间戳生成dvwaSesion,是经过连续的收集后就很容易发现其中的规律。并且通过设置时间戳,可以诱骗受害者在某个时间点进行点击登录

high

漏洞描述:这里将cookie的值进行了md5计算,并且还设置了期限之类进一步增加SessionID的安全性,但不足的是进行md5加密的内容只是对从零开始的整数进行加密,若有经验的人在多次尝试后,很容易看出来其中的规律。

impossible

防御措施:采用随机数+时间戳+固定字符串的方式再进行SHA1()加密,使猜测破解机率大大减小。


DOM模型xss

概述:基于javascript基础上,但区别于反射型xss和存储型xss,他是不与服务端进行交互是·,DOM模型的code是可见的,而基于服务端的反射、储蓄则是不可见的。DOM模型通过HTML的框架来实现对各个结点的操作(使用特点的代码获取到html标签并执行需要的命令)

low

漏洞描述:没有任何的保护性措施,页面本意是叫我们选择默认的语言,但是对default参数没有进行任何的过滤,查看源码可以查看其DOM模型,获取default并在html标签中插入一个一个新的<option></option>并拼接上value='deafault参数内容'

medium

漏洞描述:这里它过滤了<script>标签,但可以尝试使用<img>等标签

payload:</option></select><img src=1 οnerrοr=alert(1)>

high

漏洞描述:使用白名单限制输入,提示是:需要找一种方法在本地运行你的JS代码而无需经过服务器端的处理,这里可以应用 # 号,URL栏的 # 号之后的内容并不会发送至服务器端,JS应用该符号实现在页面创建加载过程中定向到指定的页面内容上。

payload:English#</option></select><BODY ONLOAD=alert(document.cookie)>

impossible

防御措施:对URL中获取的内容进行编码,以防止JS代码注入执行。


反射型xss

low

漏洞描述:代码直接引用了name参数,并没有任何的过滤与检查,存在明显的XSS漏洞

medium

漏洞描述:使用str_replace函数将输入中的<script>删除,但这种防护机制可以被轻松绕过(例如:双写绕过、大小写混合绕过)。

high

漏洞描述:使用黑名单过滤输入,preg_replace()函数用于正则表达式的搜索和替换,

impossible

防御措施:使用htmlspecialchars()将特殊字符全部转义


存储型xss

low

漏洞描述:对输入的name,message做了防止sql注入的过滤,但并没有对输入的字符串进行安全性过滤和处理。从而产生了xss的漏洞问题。

trim()函数,用于去除字符串左右两侧的空格
stripslashes()函数,用于去除字符串中的反斜杠
mysqli_real_escape_string()对sql语句中的特殊字符进行转义。

medium

漏洞描述:对message参数使用addslashes()在预定义字符之前添加反斜杠的字符串。但name参数依然没有进行校验

high

漏洞描述:使用正则表达式过滤了<script>标签,但是却忽略了img、iframe等其它危险的标签,name参数依旧存在存储型XSS。

impossible

防御措施:对输入的参数使用htmlspecialchars()函数进行转义


Content Security Policy Bypass(浏览器的安全策略)

概述:一种声明机制,允许Web开发者在其应用程序上指定多个安全限制,网站通过发送一个 CSP 头部,来告诉浏览器什么是被授权执行的、什么是需要被禁止的。(主要用来防止XSS攻击)

实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。

CSP类型

(1)Content-Security-Policy
配置好并启用后(允许加载的网站),不符合 CSP 的外部资源就会被阻止加载。

(2)Content-Security-Policy-Report-Only
表示不执行限制选项,只是记录违反限制的行为。它必须与report-uri选项配合使用。

CSP的使用方式
(1)在HTTP Header上使用(首选)

"Content-Security-Policy:" 策略
"Content-Security-Policy-Report-Only:" 策略

(2)在HTML上使用,使用<meta>标签

<meta http-equiv="content-security-policy" content="策略">
<meta http-equiv="content-security-policy-report-only" content="策略">

PS:Meta 标签与 HTTP 头只是行式不同而作用是一致的,如果 HTTP 头与 Meta 定义同时存在,则优先采用 HTTP 中的定义。

如果用户浏览器已经为当前文档执行了一个 CSP 的策略,则会跳过 Meta 的定义。如果 meta 标签缺少 content 属性也同样会跳过。

具体CSP可以参考,这里不过多记录

low

漏洞描述:通过查看响应包或者网站源码(不是F12)可以看到定义了几个受信任的站点,只能允许这几个站点的脚本才可以运行。但https://pastebin.com网站是一个快速分享文本内容的网站,可以通过引入加载一些危险的代码。也可以造成CSRF攻击
在这里插入图片描述

medium

漏洞描述:不允许加载其他域,但添加了unsafe-inline:允许使用内联资源,那么可以内置构造JavaScript, 仅允许特定的内联脚本块,需要加nonce=“TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=”

payload:<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(1)</script>

high

漏洞描述:cps设置为只信任自己的域名,查看high.js的请求逻辑可以发现

客户端点击按钮,会在 html 中创建 <script src=“http://x.x.x.x:yyyy/vulnerabilities/csp/source/jsonp.php?callback=solveSum”</script>

但因为 script 不同于 ajax,所以可以跨域发送, 服务器就根据 callback 请求,返回
solveSum({“answer”:“15”}) , 就会调用 high.js 中的solveSum()。

而通过修改callbackd的参数就可以造成xss,例:callbackd=alert(document.cookie)//

POST数据 <script src="source/jsonp.php?callback=alert(document.cookie);"></script>

impossible

防御措施:url中没有callback,也只允许访问本站资源


JavaScript Attacks

概述:网站会利用前端JS代码进行一些加密功能

low

漏洞描述:前端"Submit the word “success” to win." 但输入success会提示:Invalid token,token错误,查看源码,可以直接在前端源码中发现生成token的脚本,利用md5(rot13(phrase))生成token值,当token=md5(rot13(‘success’))即可成功,利用浏览器的控制台自己构造md5(rot13('ChangeMe'))测试发现传入的token一直是ChangeMe,那么自己构造success的token,利用burp抓包修改token即可成功。

medium

漏洞描述:查看源码,发现没有token生成的方法,但有个引用medium.js文件的链接,其实生成token的代码

token是由do_something(e+document.getElementById("phrase").value+"XX")产生,自己写一段JS去获取token

function do_something(e){
	for(var t="",n=e.length-1;n>=0;n--)t+=e[n];
	return t
}
alert(do_something("XX"+'success'+"XX"));

high

漏洞描述: 这里JS 经过了混淆,通过网站:http://deobfuscatejavascript.com/ 可以解密

构造JS在控制台获得success的token值

function do_something(e) {
    for (var t = "", n = e.length - 1; n >= 0; n--) t += e[n];
    return t
}
var token;
function token_part_3(t, y = "ZZ") {
    token = sha256(token + y);
	alert('token_part_3_final-----'+token);
}
function token_part_2(e) {
    token = sha256(e + token);
	 alert('token_part_2-----'+token);
}
function token_part_1(a, b) {
   token= do_something("success");
   alert('token_part_1-----'+token);
}
token_part_1("ABCD", 44);//模拟加载时执行
token_part_2("XX")//模拟过300ms,其实就是页面渲染完成后执行
token_part_3()//模拟提交时执行

impossible

防御措施:前端所有输入都不能相信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值