2012-10-12

黑客故事1:图形验证码上的SQL注入点


有一次,遇到有人在街上发宣传材料。本以为是什么餐馆开张之类,拿回家一看才发现是个类似网络传销的东西。我当然无意参加,但既然是【网络】传销,就必定得有网站和服务器,于是打开电脑看了看。

网站挺简单,就是一些宣传页。但我觉得肯定得有后台系统。果然没多久就被我找到了,PHP+MySQL做的。登录输用户名+密码,另外还有图形验证码,没有SQL注入漏洞。看来开发者对登录这块还是相当注意的。又看了几个页面,还是没有注入点。我想撤,但又有点儿不甘心。向这种非法组织的服务器下手,基本上是没有法律风险的。他们显然不敢报警。所以我又回到登录界面上。在看HTML代码的时候,图形验证码那部分吸引了我。

我发现他们的图形验证码没有用Session来控制,用的是URL传参,GET方式。也就是说在URL中给出了一个数字,然后服务器上返回一个生成的验证码图片。我在表单中也找到了那个数字,试着刷新了一下页面,数字加了1。用旧的URL还是能拿回原来那幅图片,但一旦该图片中的验证码被【使用】过,就不能再拿到了。

这意味着什么?这意味着验证码与这个数字之间有某种联系,某种对应关系。这个联系可能是Hash出来的,但根据现象,更可能是存下来的。我决定赌一把。果然,验证码图片的URL存在SQL注入点。每次读出来的是存起来的四个字母,然后交给PHP生成图片。

也许开发者认为,就算被注入,入侵者面对着四个字母的图片也干不了什么破坏。但他可能忘了有MID这个函数。我利用这个漏洞确认了admin这个用户名确实存在,也拿到了Hash过的密码。不过接下来我收手了。我想再潜伏一段时间再动手。结果一个月之后,我再去看的时候,这个服务器已经不在了,网站也不在了。大概被警方打掉了吧,可惜!

在这个故事里面,我想强调的是,SQL注入每一个地方都要防!哪怕再小的漏洞,也能造成危害,一个都不能疏忽。

2 条评论:

  1. 貌似上大学的时候在某本 书上看到过 这个 印象最深的 就是最后的 一个月之后再去看 服务器不在了,网站也不在了。

    回复删除
    回复
    1. 这个故事在我原来的Drupal博客中都没有记载过。
      您应该是跟别的故事弄混了,或者也许别人在别的故事中也写过一句类似的话吧。

      删除