“查询注入”(SQL注入) | 云防线技术博客

“查询注入”(SQL注入)

来源:本站原创 网站安全 超过围观 0条评论

说起sql注入,相信大家都不陌生,但是并不是所有人都清楚怎么利用和防范。

 

1它的危害

A successful SQL injection exploit can read sensitive data from the database, modify database data (Insert/Update/Delete), execute administration operations on the database (such as shutdown the DBMS), recover the content of a given file present on the DBMS file system and in some cases issue commands to the operating system.——引自Owasp

说白了Sql注入就是利用精心构造的语句获取DB中敏感信息,执行管理员权限等。

 

2 原理和攻击方式

Sql注入的原理就在于对用户输入的参数未做处理导致。

例如:php中的sql如下:

SELECT * FROM $tablename WHERE fcomdyid=’$comdyID’

如果我们输入comdyID=’%20or%20’1’%3D’1

那么实际的sql语句为:SELECT * FROM $tablename WHERE fcomdyid= ‘ ‘ or ‘1’=’1

这是一个恒为true的条件,于是db中该表下所有记录都被搜索了出来。

1)构造恒成立的条件。

按照输入参数来看,Sql的注入类型有:

整数型:select * from [table] where id=10

字符型:select * from [table] where id=’10’

搜索型:select * from [table] where id like ‘%10%’

2)通过分号执行更多的语句

如SELECT * FROM $tablename WHERE fcomdyid= ‘ ‘;delete * from [table];

3)通过注释符号来终止注入的字符串

因为传入的参数在执行前有可能被追加其他内容,所以用注释标记“–”来提前终止注入的字符串,使后面的内容不再执行。

SELECT * FROM $tablename WHERE fcomdyid= ‘ ‘;delete * from [table]– balbalba;

4)实施存储过程攻击——未深入了解

危险的存储过程有:  xp_regread/xp_regwrite/xp_loginconfig 等

 

3 预防

1),字符转义。最重要是不要让单引号的标签“’”被恶意闭合。

2),限制用户输入,尽量使其选择输入内容,而不是输入内容。

3),最小授权原则。在MySQL Injection White Paper 一文中有详细介绍如何针对SELECT, INSERT, UPDATE 和 DELETE四种操作创建不同权限的用户。

4 简单例子

之前我写过一个查询db中商品数据的小工具,因为是自己用的,所以也没考虑多少安全问题。

简单的一试,就查出了db中的所有内容。

333

备注:

Php默认会对参数进行转义,那样就检查不到这样的效果。可以在php.ini中设置magic_quotes_gpc = Off即可。

版权信息:原创文章:云防线
本文链接:http://blog.cloudfence.cn/?p=136转载请注明转自云防线
如果喜欢:点此订阅本站