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

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

DVWA漏洞平台靶场

文章目录

  • DVWA漏洞平台靶场
    • Brute Force(暴力破解)
      • low
      • medium
      • high
      • impossible
    • Command Injection(命令注入)
      • low
      • medium
      • high
      • impossible
    • CSRF(跨站请求伪造)
      • low
      • medium
      • high
      • impossible
    • File Inclusion(文件包含)
      • low
      • medium
      • high
      • impossible
    • File Upload(文件上传)
      • low
      • medium
      • high
      • impossible
    • Insecure CAPTCHA(不安全的验证流程)
      • low
      • medium
      • high
      • impossible
    • SQL Injection(sql注入)
      • low
      • medium
      • high
      • impossible
    • SQL Injection Blind(SQL 盲注)
      • low
      • medium
      • high
      • impossible
    • Weak Session IDs(弱会话IDs)
      • low
      • medium
      • high
      • impossible
    • DOM模型xss
      • low
      • medium
      • high
      • impossible
    • 反射型xss
      • low
      • medium
      • high
      • impossible
    • 存储型xss
      • low
      • medium
      • high
      • impossible
    • Content Security Policy Bypass(浏览器的安全策略)
      • low
      • medium
      • high
      • impossible
    • JavaScript Attacks
      • low
      • medium
      • high
      • impossible

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 (全自动区分计算机和人类的图灵测试)的简称。主要是验证流程出现了逻辑漏洞,而不是谷歌的验证码有问题。
DVWA漏洞平台靶场练习 总结 wp_第1张图片
这一模块的验证码使用的是Google提供reCAPTCHA服务,下图是验证的具体流程。
DVWA漏洞平台靶场练习 总结 wp_第2张图片
服务器通过调用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标签中插入一个一个新的并拼接上value='deafault参数内容'

medium

漏洞描述:这里它过滤了

high

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

客户端点击按钮,会在 html 中创建

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

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

你可能感兴趣的:(web漏洞靶场)