美文网首页
记一次sql注入实践

记一次sql注入实践

作者: spring_coderman | 来源:发表于2019-10-28 18:42 被阅读0次

今天开发代码的时候发现自己的sql全是拼接的,不是where a = ?的那种,细思恐极啊,于是进行了一场sql注入实践。虽然失败了,但是还是得出了一些宝贵的经验。

首先从一个基础的分页查询语句开始分析:

Select r.a,r.b from role r where r.name like ‘role%’ order by r.create_time desc liimit 0,10;
说明:用户在界面输入的是role,其他都是stringbuilder拼接的。

一开始尝试使用如下输入:’delete from x ‘
那sql语句变成如下形式:
Select r.a,r.b from role r where r.name like ‘’delete from x ’%’ order by r.create_time desc liimit 0,10;
看到的现象是前端没有查询到数据,给了弹框提示,但是分页条显示undefined.

后来从网上查到sql 的like 注入可以是下面的形式:
%' AND 1=1 AND '%'='
那sql语句则变成如下形式:

SELECT r.a,r.b FROM role r WHERE r.name LIKE '%' AND 1=1 AND '%'='%' ORDER BY r.create_time DESC liimit 0,10;

这样的话一眼就看出来这是个正常的sql语句,并且可以被注入,是不是有点小儿科或者感到惊恐。放到数据库里执行应该是没有问题的。
那怎么才能更有威胁性呢,看如下sql语句:
SELECT r.a,r.b FROM role r WHERE r.name LIKE '%' AND 1=1 ;DELETE FROM rule WHERE 1=1 ; AND '%'='%' ORDER BY r.create_time DESC liimit 0,10;
那现在只要稍加修改就可以变成下面的形式:
SELECT r.a,r.b FROM role r WHERE r.name LIKE '%' AND 1=1 ;DELETE FROM rule WHERE 1=1 ;SELECT * FROM role r WHERE 1=1 AND '%'='%' ORDER BY r.create_time DESC liimit 0,10;
到此一个sql注入语句就出现了,这样的sql在可视化界面里是可以执行通过的,那用户实际输入的内容是什么呢,如下:
%' AND 1=1 ;DELETE FROM rule WHERE 1=1 ;SELECT * FROM role r WHERE 1=1 AND '%'='
当这个构造好的sql到应用程序里面会发生什么呢?
当然在我的服务器里报错了,报错日志显示sql语法不对,从delete开始到后面的构造部分。原因就在于PreparedStatement在起作用,具体原理不再叙述。
到这里就结束了,我没有在前端发起的注入内容删除数据。

为啥用户会这么输入呢??
当然是有人恶意攻击咯,如果真猜出你的数据库表名并准备实施攻击的话,那是不是要过一遍自己写的代码或者检查一下有没有用PreparedStatement预编译呢?

或者这是你自己进行的测试,如果你想有PreparedStatement的话是不是就万事大吉了。
答案是否定的,黑客可不会这么low.他们想这么做的话一定有办法。
虽然你的系统在内网,你的应用访问量不多,等等,但是我们必须要知道这种威胁的存在,并且防患于未然。
那最好的方式是什么呢?
1.从产品层面来说要规避用户输入特殊字符(不要相信前端输入的数据),因为正常用户不会输入这么复杂的文本来测试你的程序,我们要做的就是正常请求,正常返回。
2.从技术上来说可以将输入的特殊字符转译。(这个工作可以在前端做,也可在后端)
3.从技术组件来说要从底层使用PreparedStatement进行预编译。

相关文章

  • 记一次sql注入实践

    今天开发代码的时候发现自己的sql全是拼接的,不是where a = ?的那种,细思恐极啊,于是进行了一场sql注...

  • 常用sql注入语句

    转载链接 渗透常用SQL注入语句大全(网上收集) 记一次通过fckeditor入侵提权拿服务器 常用sql注入语句

  • web常见漏洞的成因和修复

    1.SQL注入 漏洞描述:SQL 注入攻击( SQL Injection ),简称注入攻击、SQL 注入,主要用于...

  • 笔记:web漏洞

    SQL注入 SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,...

  • 谈谈sql注入之原理和防护(-)

    谈谈sql注入(二)谈谈sql注入(三)谈谈sql注入(四)所谓SQL注入,就是通过把SQL命令插入到Web表单提...

  • 小迪16期-20170226

    第二天:Sql注入集锦篇 1.Sql注入之access注入 2.Sql注入之mysql注入 3.Sql注入之mss...

  • 第四章 SQL 注入

    要点 SQL注入 SQL注入防护 一、SQL注入 SQL注入:黑客会通过构造一些恶意的输入参数,在应用拼接 SQL...

  • PHP代码安全之SQL注入

    PHP代码安全之SQL注入 1、什么是SQL注入? SQL攻击(英语:SQL injection),简称注入攻击,...

  • 谈谈sql注入之语句构造手法(二)

    谈谈sql注入(一)谈谈sql注入(三)谈谈sql注入(四)SQL注入的手法相当灵活,在注入的时候会碰到很多意外的...

  • SQL注入三部曲-初级

    目录 什么是SQL注入SQL注入产生的原因SQL注入攻击方式如何进行SQL注入SQL注入三部曲 1.渗透攻防WEB...

网友评论

      本文标题:记一次sql注入实践

      本文链接:https://www.haomeiwen.com/subject/rezbvctx.html