mysql c语言 sql注入_【注入攻击】SQL注入(不完整总结)

注入攻击

数据与代码分离,可以说是专门为解决注入攻击而生的

注入攻击的本质:用户输入的数据当作代码执行

两个关键条件:一、用户能够控制输入;二、原本程序要执行的代码,拼接了用户输入的数据

1 SQL注入

典例:

var ShipCity;

ShipCity = Request.form(“ShipCity”);

var sql = “select * from OrdersTable where ShipCity = ‘” + ShipCity + “’”;

正常输入: Beijing

select * from OrdersTable where ShipCity = ‘Beijing’;

恶意输入: Beijing’; drop table OrdersTable--

select * from OrdersTable where ShipCity = ‘Beijing’;drop table OrdesTable—’;

SQL注入过程中,如果网站的Web服务器开启了错误回显,则会为攻击者提供极大的便利,比如攻击者在参数中输入一个单引号,引起执行查询语句的语法错误,服务器直接返回错误信息,那么我们就可能从错误信息中知道用的什么数据库,甚至版本、或者查询语句的构成。

1.1盲注(Blind Inject)-----------------应对服务器关闭了错误回显

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

Example

原始URL与SQL

SELECT title,description,body FROM items WHERE ID=2

条件判断

1.2Timing Attack

MySQL中的BENCHMARK()函数:BENCHMARK(count, expr)

利用BENCHMARK函数可让同一个函数执行若干次,使得返回的时间比平时要长;通过时间长短的变化,可以判断出注入语句是否执行成功。

Example: 构造的攻击参数id为:

1170 UNION SELECT IF(SUBSTRING(current,1,1)=CHAR(119),BENCHMARK(500000,ENCODE(‘MSF’,

‘by 5 seconds’ )),null) FROM (SELECT Database as current) as tbl;

不同的数据库都有类似的函数:

MySQL

BENCHMARK(10000000,md5(1)) or SLEEP(5)

PostgreSQL

PG_SLEEP(5) or GENERATE_SERIES(1,1000000)

MS SQL Server

WAITFOR DELAY ‘0:0:5’

2数据库攻击技巧

不同的数据库,SQL注入的技巧有所不同

2.1常见的攻击技巧

如果Mysql的版本是4,则会返回TRUE

id =5 union all select 1,2,3 from admin                     //确认表名admin是否存在

id =5 union all select 1,2,passwd from admin          //确认admin表中pssswd是否存在

2.2命令执行

2.3攻击存储过程

2.4编码问题

2.5SQL Column Truncation

3正确地防御SQL注入

3.1使用预编译语句

3.2使用存储过程

3.3检查数据类型

3.4使用安全函数

4其他注入攻击

4.1XML注入

4.2代码注入

4.3CRLF注入

5小结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值