DVWA的练习总结(还在补充,待续)

Brute Force(暴力破解):

先从low开始,在DVWA Security中调整难度,默认打开是impossible。
low:
其实,这个的话,大家因该都会想到,直接爆破肯定能出来,但是还是看下代码,点击右下角的View Source查看当前难度下的源码。
像这种代码,其实都没必要全部弄懂的,只要把关键的部分看懂就行,不过我不怎么懂这些啊,PHP还没学,只知道一点。。。
咳咳,user和pass都是GET方式传参,而且没有什么防护之类的,密码用的md5加密,这样的话,直接就用burp suite抓包爆破即可。
DVWA的练习总结(还在补充,待续)_第1张图片我们再切换medium,再看它的源代码。将这个和之前的low相比较多出了好多代码,emm,其他的我也不懂,我等这里学会了再回来改掉吧。但是还是主要的才是重点。
看到下面有登录成功和登录失败的条件,如果登录失败会sleep两秒,所以,这里用上面的爆破还是可以的,只不过会比之前慢很多,因为在你登录失败后,要等两秒才能再进行登录,相当于一个防止暴力破解的方法,但是还是没有太大的实用效果。
DVWA的练习总结(还在补充,待续)_第2张图片我们再转化为high:
再看以下这个源码,虽然不全,看看开头,相比于之前的,又多了,是个user_token, R E Q U E S T 将 u s e r t o k e n 的 数 值 也 可 能 是 其 他 的 值 导 入 , 后 面 的 _REQUEST将user_token的数值也可能是其他的值导入,后面的 REQUESTusertoken_SESSION是一个弃用变量,应该就是每次使用完后换一个新的值。这就应该是类似于验证码的那样,每次登陆的话应该都会是一个新值,这样就能较为有效的防止暴力破解,登录失败的话,从0-3秒中随机选取一个。
DVWA的练习总结(还在补充,待续)_第3张图片这样的话,我们就抓包来尝试,几次抓包破解如下所示:

我们能够发现,你下一次的响应包里的值会返回给浏览器。这样的话,直接爆破是肯定不行的,要转换一下想法。
整理一下这个的流程。
1、访问这个登录界面,在登录过程中获得user_token
2、发送登录数据包,后台接收,然后验证
3、失败后再次接收一个user_token值,返回给浏览器
4、返回浏览器后再次发送数据包,再获取数值。
这样的话,我们可以考虑直接将后两步退掉,不管这个,一直循环第一步和第二步这个过程,这样,就饶过了这个user_token值。

最后,我们看一下impossible。源码太多,就截取几个关键点吧。

DVWA的练习总结(还在补充,待续)_第4张图片DVWA的练习总结(还在补充,待续)_第5张图片在这里插入图片描述最后这个太长了,emm,简单的说一下吧。
第一、二张图,就是定义的几个初始值,如果你登录三次失败,最后那次之后,就会有个15分钟的禁止登录。
最后那张图,就是将这个值返回给你,告诉你,你有这个时间不能登录。这个好像没有再次失败累加时间。。。
不过这样一类的就很有效的防范了暴力破解的手段。

如果我们以后也要解决这类存在暴力破解的漏洞的话,我们可以按照这种方法,可以很有效的来解决。
不过这种这样的感觉,想要破解的话,可以用切换IP的方式登录,虽然这样也很麻烦,不过以后指不定是不是能够出一个能够自由分配IP的软件也说不定,然后就。。。可能吧,只是想想。

Command Injection(命令行注入):

这个就是命令注入。
梳理一下命令注入的流程:
1、是否调用了系统命令
2、函数或者函数的参数是否可控
3、是否拼接注入命令
首先解决个别的问题吧,就是ping的时候存在这么一个乱码的现象。DVWA/dvwa/includes目录下,有个dvwaPage.inc.php文件,打开文件在277行修改,
将UTF-8改为GBK或者GB2312即可。
DVWA的练习总结(还在补充,待续)_第6张图片在这里插入图片描述在这里插入图片描述然后,我们看看这个是不是调用的cmd,如果确定,我们就可以直接利用。看起来很像是在说废话,但是,如果你在别的地方的话遇到这个,你不也得看看。
不过,咱也没好方法,只是在电脑上将cmd打开,然后ping一下,查看对比。
然后继续。
low:
按照惯例,查看源码。emm,什么别的都没发现,没有过滤什么字符,这样就直接用拼接符拼接你想执行的命令。
DVWA的练习总结(还在补充,待续)_第7张图片ping 127.0.0.1 && net user 然后执行。
DVWA的练习总结(还在补充,待续)_第8张图片medium:

查看源码,发现$substitutions,这个是个替换,将&&与;替换为空,这样,相当于过滤掉了&&与;。这样的话,我们就用不了&&来拼接两条命令。
DVWA的练习总结(还在补充,待续)_第9张图片但是我们常用的拼接符也不只是这一个,&也和&&起相同得作用,这里只过滤了&&并没有过滤&,所以我们可以用&来实现命令的拼接。
不过在这个过程发现很有意思的东西,杀毒软件会提示你这些东西执行命令,询问是否阻止,好厉害啊。
DVWA的练习总结(还在补充,待续)_第10张图片high:
还是看一下源码,这里,就过滤了很多字符。
DVWA的练习总结(还在补充,待续)_第11张图片大体上一看,觉得,都过滤了,那还有得玩吗?再仔细看一下,看到那个管道符,第三个,是管道符和一个空格一起,才会被替换成空,那么,我们就可以再管道符后面直接跟命令,不加空格:127.0.0.1|net user,执行。

DVWA的练习总结(还在补充,待续)_第12张图片最后看一下impossible。
这里的源码,已经不是在过滤什么了,而是直接对于IP得格式限制了要求,这样,我们就只能打出正常得IP,除此之外,似乎没有其他的形式来解决这个问题。
DVWA的练习总结(还在补充,待续)_第13张图片小结:
以后如果我们要解决网站关于命令注入得漏洞的时候,不妨也采用这样的形式。一般的话,对于这种问题的思路是两种,一个是限制黑名单,一个是限制白名单,二者相比之下,限制黑名单远不如限制白名单简洁有效。
再来写一下一点拼接符得。
&:是简单得拼接,前后无制约关系
&&:这个只有前面的命令执行成功后,才会执行拼接后的命令。
| :这个是前一个命令的输出,作为后一个命令的输入
|| :这个是只有前一个命令执行失败,才会执行后一个命令。
在一个就是,如果过滤了敏感命令的话,可以尝试在命令中加上" "来过一下看看。
还有一个,如果没有回显得话,可以尝试使用延时命令,来试一下。

CSRF(跨站请求伪造):

low:
这里的源码也没有什么,似乎是一个直接赋值得情况。
DVWA的练习总结(还在补充,待续)_第14张图片

File Inclusion(文件包含):

low:
先看源码吧。很简单的,没什么其他东西,如果算的话,那么就是GET方式吧,如果用POST提交的话,是会失败的。还是按流程走一下。
DVWA的练习总结(还在补充,待续)_第15张图片
先来看一下是否存在文件包含漏洞,我们先看一下它的url,下面的三个php,你每点一个,page=后面的内容就会换一个,这样,我们就随意添加一个文件名称进去,当然是不存在的,看他会有什么改变。
DVWA的练习总结(还在补充,待续)_第16张图片然后,我就随意写了个abc.php,然后访问,就发生了下面的这种情况。报错了,说没有这么个文件在这个目录下,还给出了这个的绝对路径。那么,这样我们就能判断它存在文件包含漏洞,那么我们就可以去利用。
DVWA的练习总结(还在补充,待续)_第17张图片知道了绝对路径后,我们就直接访问phpinfo试一试。直接访问还是报错,那么就page=后面加上 …/ 这个是返回上一级目录,我们不知道它的上一级目录到底是什么,所以直接用这个来访问上一级,但是发现还是报错。这就说明phpinfo.php并没有在这个的上一级目录,那么,我们再加一个 …/ 再进入上一个目录,然后就是下面这张图,说明我们访问并执行了,那么phpinfo.php的E:\phpstudy\PHPTutorial\WWW\DVWA-master\phpinfo.php。
那么,low的应该就这样了。
DVWA的练习总结(还在补充,待续)_第18张图片medium:
看一下源码,把array中的东西直接代替为空。
DVWA的练习总结(还在补充,待续)_第19张图片这样,我们之前的那个方法就不行了,我们直接换个方法绕过,直接在page=后面加上 http://?/127.0.0.1/phpinfo.php,通过这个绕过一下,之前的他过滤的我们在中间加上的话,他就把中间的 http:// 给转换成空,这样这就直接绕过了,我们访问本机的地址,然后执行phpinfo.php就可以绕过,你也可以绕过一下 …/./…/./ 来绕过,也是可以的,如下图:
DVWA的练习总结(还在补充,待续)_第20张图片high:
漏洞源码:
这样,上述的两个方法,都没有用,fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。否则,他会直接返回ERROR: File not found!
这样我们就用file协议。
file协议:文件传输协议,访问本地计算机中的文件。基本的格式如下:file:///文件路径,比如要打开F盘flash文件夹中的1.swf文件,那么可以在资源管理器或IE地址栏中键入:file:///f:/flash/1.swf并回车。
DVWA的练习总结(还在补充,待续)_第21张图片这样的话,我们来验证一下看看。
我们直接用file://phpinfo.php 来看一下,这样就不会出现 ERROR: File not found! 的情况了,
DVWA的练习总结(还在补充,待续)_第22张图片通过上面的步骤,我们得到了绝对路径,重复low的步骤就行。
http://localhost/dvwa-master/vulnerabilities/fi/?page=
file://E:\phpstudy\PHPTutorial\WWW\DVWA-master\vulnerabilities\fi…\phpinfo.php
如下图:
这样就成功执行了phpinfo。
DVWA的练习总结(还在补充,待续)_第23张图片还是按老惯例,放一下impossible的源码吧。
impossible:
这个的话,你要访问,只允许访问这下面四个,而且,file这个协议,也只是个文件传输协议,直接打死。如果可以的话,那就把这个协议的问题找出来吧(?)。
DVWA的练习总结(还在补充,待续)_第24张图片一小点总结:文件包含漏洞的话,是攻击者上传含有恶意代码的文件,然后获取文件所在的物理地址,然后留下后门。解决问题的有效方式,还是白名单,真的是屡试不爽啊。

File Upload(文件上传):

low:
DVWA的练习总结(还在补充,待续)_第25张图片我们上传一下。试一试,上传成功。
DVWA的练习总结(还在补充,待续)_第26张图片我们拼接一下地址,得到http://localhost/dvwa-master/hackable/uploads/img.jpg#。
访问到了。
DVWA的练习总结(还在补充,待续)_第27张图片这样我们就尝试其他的。
我们写一个phpinfo.php
DVWA的练习总结(还在补充,待续)_第28张图片
我们访问一下他。访问成功并且成功执行。
DVWA的练习总结(还在补充,待续)_第29张图片这样就证明存在上传漏洞,这样我们上传一句话webshell。

DVWA的练习总结(还在补充,待续)_第30张图片
DVWA的练习总结(还在补充,待续)_第31张图片
DVWA的练习总结(还在补充,待续)_第32张图片
这样就直接调用cmd命令了。http://localhost/dvwa-master/hackable/uploads/cmd.php?cmd=system(‘net user’);

medium:
看源码可以看出,他限制了后缀名,只能是.png和.jpeg
DVWA的练习总结(还在补充,待续)_第33张图片我们上传一下看看,看来只能是说的两种格式。
DVWA的练习总结(还在补充,待续)_第34张图片

Insecure CAPTCHA(不安全的验证码):

SQL Injection(SQL 注入):

low:
看源码,差不多就是直接带入,不过一般我们注入的时候都是判断是否存在注入。
DVWA的练习总结(还在补充,待续)_第35张图片我们先输入一下数字,看有啥回显。
DVWA的练习总结(还在补充,待续)_第36张图片看来就是每个数字对应着一组信息了。那么,我们输入一个\来判断是否存在注入。报错了,那么就说明存在注入,我们就可以进行注入了。

在这里插入图片描述三种注入POC:
…where user_id = $id -----> where user_id = 1 or 1=1
…where user_id =’ i d ′ − − − − − > w h e r e u s e r i d = ′ ∗ 1 ′ o r ′ 1 ′ = ′ 1 ∗ ′ . . . w h e r e u s e r i d = " id' -----> where user_id = '*1' or '1'='1*' ...where user_id = " id>whereuserid=1or1=1...whereuserid="id" -----> where user_id = “1" or “1”="1
看源码的话,是单引号的那种,我们呢,还是每一个都试试看看效果。
DVWA的练习总结(还在补充,待续)_第37张图片DVWA的练习总结(还在补充,待续)_第38张图片DVWA的练习总结(还在补充,待续)_第39张图片补一下注释符:
#:单行注释,url编码为%23 – :单行注释,短线后面有一个空格 /**/:多行注释
接下来报一下字段数,二分法。
我们先试一下五,一般情况下这个是不会很大的,如果五的话是正常的回显,那么,你在反向加一下弄个10试试就行。
DVWA的练习总结(还在补充,待续)_第40张图片
然后再试一下3,发现3也不行,那么试一下2,回显正常,那么,他就有2个字段。
DVWA的练习总结(还在补充,待续)_第41张图片两个字段的话,我们判断它是否是都存在回显点。
1’ union select 1,2–
就会显示下面的情况,如果你觉得东西多的话,你可以把1换成字符串,或者大的数就行。还有一点就是,一定不要忘记再-- 后面加空格啊,要不是会报错的啊!
这样你就可以再这两个回显点处,爆出你想知道的东西了。
DVWA的练习总结(还在补充,待续)_第42张图片我们来查一下数据库的信息,目录和数据库名称。
1’ union select @@datadir,database()-- 这个@@代表着系统变量。
DVWA的练习总结(还在补充,待续)_第43张图片这样我们就知道了数据库的名称,然后,我们查询表名。
1’ union select 1,table_name from information_schema.tables where table_schema=‘dvwa’–

DVWA的练习总结(还在补充,待续)_第44张图片这样得到表名,users,然后我们查询列名。
1’ union select 1,column_name from information_schema.columns where table_name=‘users’–
DVWA的练习总结(还在补充,待续)_第45张图片查询用户名和密码:
1’ union select user,password from users–
我们获取的用户密码是hash值,用md5查询就行。
DVWA的练习总结(还在补充,待续)_第46张图片用load_file()可以查看文件目录。
同样,最好的就是我们能够通过这个写入webshell,这样我们需要web目录的物理路径。构造错误的SQL语句来获取web目录,但是我不会。。。希望有大佬看到了能告诉一下小子我。
直接就去找它的绝对路径吧,就当是爆出来了。
E:\phpstudy\PHPTutorial\WWW\DVWA-master\vulnerabilities\sqli\source\low.php
用select … into … outfile … 语句来写入webshell
1’ union select “”,“webshell” into outfile ‘E:\phpstudy\\WWW\DVWA-master\cmd.php’–
然后就出现了个这么个东西:The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
去特喵的吧,过了,不干了。按理来说这样应该就写进去了,然后你再访问就行。嗯嗯,结束。

medium:
放源码:
DVWA的练习总结(还在补充,待续)_第47张图片提交方式变了,编程列表的方式,我们先选一个1提交看一下,这换2的话,也是这个,那就是不是get方式提交,用POST试试。(虽然是由源码,但是如果我们试的话,不是不知道吗)。
DVWA的练习总结(还在补充,待续)_第48张图片用POST提交方式打开的话,就是这样,改一下id后面的值的话,能够改变值。
DVWA的练习总结(还在补充,待续)_第49张图片这时候,我们在这里无论使用 ‘ 或者是 “ 的方式,都不行,那就试试没有引号的,成功了。
4 or 1=1
DVWA的练习总结(还在补充,待续)_第50张图片但这里会有一个问题,比如说我们查询‘DVWA’这个的时候,单引号会被转义,就会失败,我们可以用HEX编码这样的话,就可以了。在遇到‘ “的话,就可以用HEX编码来绕过。
其他的,就和low一样了,就不演示了。

high:
查看源码:
isset()在php中用来检测变量是否设置,该函数返回的是否布尔值,即true/false。
$_SESSION:在使用上是为了能够在服务器端保存一个能够跨页面使用的变量
DVWA的练习总结(还在补充,待续)_第51张图片然后看界面,是这样的,你点击那个绿字,就会额外弹框,每当你在这里输入数字的时候,他都会保存并发送到原网址,然后输出结果。
DVWA的练习总结(还在补充,待续)_第52张图片
DVWA的练习总结(还在补充,待续)_第53张图片我们直接试试,因为这东西看起来就只是换了个输入值的地方,这样的话,和low是一样的了。
不过这样的话,用工具跑就和麻烦点了,如果用sqlmap跑的话,因为返回的网页不是一个,那么,就用–second-order加上返回的那个网址就行了
DVWA的练习总结(还在补充,待续)_第54张图片DVWA的练习总结(还在补充,待续)_第55张图片impossible:
这个就直接限制了,只有是数字才可以,emm这个就这样了。
DVWA的练习总结(还在补充,待续)_第56张图片

SQL Injection(Blind)(SQL盲注):

这个的话,数据库执行结果不会直接显示到页面上,页面只会显示真假两种状态,所以,很刺激,和扫雷玩是的。

low:
看源码也是,只是返回ID是不是在这。
DVWA的练习总结(还在补充,待续)_第57张图片先试一下把,输入个1。看来就是只返回是不是在这里。

DVWA的练习总结(还在补充,待续)_第58张图片那么我们在输入个0看看是不是存在。结果就是不存在了。
DVWA的练习总结(还在补充,待续)_第59张图片
这样的话,我们之前的那三种就换一点
…where user_id = $id -----> where user_id = 1 and 1=2
…where user_id =’ i d ′ − − − − − > w h e r e u s e r i d = ′ ∗ 1 ′ a n d ′ 1 ′ = ′ 2 ∗ ′ . . . w h e r e u s e r i d = " id' -----> where user_id = '*1' and '1'='2*' ...where user_id = " id>whereuserid=1and1=2...whereuserid="id" -----> where user_id = “1" and “1”="2
这样后面就是真and假=假,一 一尝试
先尝试第一种,发现没有插入进去,因为他返回为真。
DVWA的练习总结(还在补充,待续)_第60张图片那么再尝试第二种,发现报错了,那么,这个就注入进去了,说明存在这种注入方式的漏洞。

DVWA的练习总结(还在补充,待续)_第61张图片那么,现在的重点就是来获取数据,不过我们要获取猜解字符串的长度,用length(str)就可以获取字符串长度(字符串)
接下来,就是猜了,先猜测一下这个数据库的长度是多少。
1’ and length(database())>1 –
DVWA的练习总结(还在补充,待续)_第62张图片返回正常,那就说明数据库长度大于1,那么我们稍微加点数来猜测。
1’ and length(database())>5 –
DVWA的练习总结(还在补充,待续)_第63张图片不行,就这事数据库的长度小于5,我们就二分法猜就行。最后猜解出长度是4,因为这个长度不大于4,却大于3.

DVWA的练习总结(还在补充,待续)_第64张图片那么就猜解字符串了,substr(espression,start,length)—>获取子字符串(原始字符串,子串开始位置,字串长度)
不过,用这个方法的话,你要挨个字母的去试,跟暴力破解是的,但是,很费劲,我们可以不用这个方法。
ascii(string) 获取第一个字符的ASCII数值(字符串),单字符ASCII码范围:0-127,这样我们用二分法来猜就行。
1’ and ascii(substr(database(),1,1))>64 –
这样大于64,再往上猜,96,也存在,那么一直这么猜,最后猜到了是100,我们一直这样做,获取字符,他们分别是
1’ and ascii(substr(database(),1,1))=‘d’
1’ and ascii(substr(database(),2,1))=‘v’
1’ and ascii(substr(database(),3,1))=‘w’
1’ and ascii(substr(database(),4,1))=‘a’
DVWA的练习总结(还在补充,待续)_第65张图片
这样数据库的结果就是database()=‘dvwa’
sql盲注分类,布尔类型和延时类型
if(expr1,expr2,expr3) 如果expr1为真,返回expr2,否则返回expr3
sleep(N) 休眠(N秒)
来试一下延时注入,1’ and sleep(if(length(database())=4,3,0))–
可以看到它的响应时间,是超过三秒的,说明,注入成功了。
DVWA的练习总结(还在补充,待续)_第66张图片如果不确信,那么就让它为假,来试一下,1’ and sleep(if(length(database())=2,3,0))–
还不够1秒,那么说明,是执行了。

DVWA的练习总结(还在补充,待续)_第67张图片benchmark(count,expr)—>重复计算(次数为count,表达式)
用这个函数同样可以验证。 1’ and benchmark(if(length(database())=4,100000000,0),md5('asdf"));–

DVWA的练习总结(还在补充,待续)_第68张图片1’ and benchmark(if(length(database())=3,100000000,0),md5('asdf"));–

DVWA的练习总结(还在补充,待续)_第69张图片cast(expression as data_type)—>数据类型转换(表达式 as 新的数据类型)
ifnull(expr1,expr2)---->如果expr1是null,返回恶心拍r,否则返回本身
mid(expression,start,length)---->获取子字符串(原始字符串,子串开始位置,子串长度)
ord(string)—>获取第一个自负的ASCII数值(字符串)
这个还是用sqlmap跑快,手工很麻烦,但是,我的sqlmap好久没用,不知道为啥出现了错误,等以后补上把吧。

medium:
现在这个是数字型的注入。
DVWA的练习总结(还在补充,待续)_第70张图片这个样子的话,用hackbar看无论选哪个,都是地址栏不变的,那么,肯定不是GET传递,别说前面看了源码,只是按照一个思路走走,然后看是不是POST。
DVWA的练习总结(还在补充,待续)_第71张图片接下来换数字的话,果然是显示不一样的,那么就是POST方式。这样的话,就和前面是一样的了,就不多写了。
DVWA的练习总结(还在补充,待续)_第72张图片
high:
这个和回显那个差不多,两个页面。
DVWA的练习总结(还在补充,待续)_第73张图片1’ and ‘1’=‘2’–
注入成功。这样路数和前面的就一样了。
DVWA的练习总结(还在补充,待续)_第74张图片

impossible:
DVWA的练习总结(还在补充,待续)_第75张图片

Weak Session IDs(弱会话ID)

XSS (DOM)(DOM型跨站脚本攻击)

攻击代码在url里,输出在DOM节点中

XSS (Reflected)(反射型跨站脚本攻击)

XSS是客户端代码的注入,通常注入的代码是JavaScript,命令注入,SQL注入等为服务端的代码注入。
攻击代码在url里,输出在HTTP响应中。

low:
如果输入不为空,那么hello你输入的。
DVWA的练习总结(还在补充,待续)_第76张图片DVWA的练习总结(还在补充,待续)_第77张图片我们输入个标签试试,。
DVWA的练习总结(还在补充,待续)_第78张图片我们看到了标签没有输出,然后审查一下元素,发现写的标签在这里。这应该就表明了,我们能注入HTML标签。
DVWA的练习总结(还在补充,待续)_第79张图片
这样,我们就直接写吧,。这样我们就弹窗了。
DVWA的练习总结(还在补充,待续)_第80张图片我们审查元素,看到写了进去,就说明了存在XSS注入漏洞。
DVWA的练习总结(还在补充,待续)_第81张图片
弹窗函数,不止一个,
alert()用于显示带有一条指定消息和一个 OK 按钮的警告框。
confirm()用于显示一个带有指定消息和 OK 及取消按钮的对话框。
prompt()用于显示可提示用户进行输入的对话框。
如果其中一个被过滤的话,我们可以试试别的。
我们先建议一个cookie.php,
http://127.0.0.1/cookie.php
内容如图所示:

攻击js

如果执行成功的话,最终这个cookie会在127.0.0.1的cookie.txt中。
这个时候,我们把这个脚本写进去,运行的话,并不能成功,我们还需要把这个给编码一下。
最终是执行了,就是这个画面。
DVWA的练习总结(还在补充,待续)_第82张图片然后我们访问一下,127.0.0.1/cookie.txt,然后就成功发送到我们的txt文本中。
DVWA的练习总结(还在补充,待续)_第83张图片最后就是劫持会话了,然后利用cookie登录就行。

DVWA的练习总结(还在补充,待续)_第84张图片右键编辑,将cookie值输入进去,然后
DVWA的练习总结(还在补充,待续)_第85张图片直接访问index.php,这样就登录成功了。
DVWA的练习总结(还在补充,待续)_第86张图片medium:
这个的话,一眼就能看到把
DVWA的练习总结(还在补充,待续)_第87张图片其他的,就和low差不多了。

high:
看这个源码,是把scrip的全部都给禁用了。
DVWA的练习总结(还在补充,待续)_第88张图片我们用low或者是medium中的方法,都是这个样子。这样子,script标签肯定是不能用了,但我们还可以用别的。
DVWA的练习总结(还在补充,待续)_第89张图片
img标签,也可以插入XSS代码,这个是网页中插入图片的标签。

这样就成功弹窗了。
DVWA的练习总结(还在补充,待续)_第90张图片除了img标签,还有iframe标签。它可以在一个HTML中嵌入一个HTML内容。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190607160328284.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNjk1NjU0,size_16,color_FFFFFF,t_70)impossible: 我们看到了htmlspecialchars这个函数。来看一下这个。 它可以HTML编码五个实体化。
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >

DVWA的练习总结(还在补充,待续)_第91张图片

XSS (Stored)(存储型跨站脚本攻击)

攻击代码在数据库里,输出在HTTP响应中。

low:
这个好多啊,看不懂。
DVWA的练习总结(还在补充,待续)_第92张图片我们直接输入就行了。这时候,你发现名字这,有数量限制,审查一下元素,发现最多允许10个,我们改大点,100个把。
DVWA的练习总结(还在补充,待续)_第93张图片DVWA的练习总结(还在补充,待续)_第94张图片可以看到我们这个已经可以写上去了。成功弹框。
DVWA的练习总结(还在补充,待续)_第95张图片DVWA的练习总结(还在补充,待续)_第96张图片我们写多了后会一直弹很多窗,我们点在这里插入图片描述
然后重置一下就可以了在这里插入图片描述

medium:

DVWA的练习总结(还在补充,待续)_第97张图片使用大小写混合的,成功。
DVWA的练习总结(还在补充,待续)_第98张图片但是弹窗一次,我们找源码,发现只有name那里写入,message哪里没有写入。

high:
DVWA的练习总结(还在补充,待续)_第99张图片
成功注入。
仍然是只有name注入成功,message被过滤。

DVWA的练习总结(还在补充,待续)_第100张图片

DVWA的练习总结(还在补充,待续)_第101张图片
impossible:
还是使用了htmlspecialchars这个函数。
stripslashes这个函数,是删除反斜杠。
mysql_escape_string()是用来预防数据库攻击的。

DVWA的练习总结(还在补充,待续)_第102张图片小小总结一下:
对于输入的过滤名单,使用白名单且要在服务端做。
对于输出的过滤,如果是输出到HTML中,进行HTML编码,如果是输出到JS中,进行JS转义。

CSP Bypass(CSP旁路)

JavaScript(JS攻击)

你可能感兴趣的:(DVWA的练习总结(还在补充,待续))