日报标题:原来这就是黑客们「干坏事」时候的基本修养 知乎用户,thu lv7 SQL 首先说明几点基本背景知识: 1. 不管是代码还是数据,它在计算机底层看来,都不过是二进制字节流而已,没有区别; 2. 与程序交互往往意味着数据的输入,黑客就可以写一段代码输入进去; 3. 这就是“远程代码执行”漏洞了,感觉大部分漏洞都可以归类于此。他本质上就是:使用某个输入数据的时候,因为各种各样的原因,把这段数据作为可执行程序运行了,然后就会出现写这个输入的黑客希望的结果了; 然后具体讨论这个案例。 第一步是 SQL 注入,网站里最常见的注入攻击之一。 由于网站需要存储数据,通常而言都会使用数据库,而数据库的查询通常而言都会使用 SQL 语句。 关于 SQL 的介绍参见 SQL。 这里提到的"注入点",其实就是"提交一个特殊数据让网站执行有害 SQL 语句"的点。 例如: 可能网站功能是输入名字查询信息,假设输入的数据在后台是$data, 那么写得不好的后台可能会执行 select * from info where name = '$data', 正常情况可能就是 select * from info where name = 'thyyyy', 然而黑客可以写这么一个输入: abc' or 'a'='a 这样的话 语句变成了 select * from info where name = 'abc' or 'a'='a',就变成查询到全部数据了。 更实际的 SQL 注入会有更复杂的情况,以上只是举例。 总之,他找到这样的点之后,就可以执行他需要的语句,然后显示出本无法看到的数据库内容了。 第二步是找到管理员权限, 这里他是利用上面的注入,查询出数据库里的用户数据,然后得到了 admin 密码的 MD5 值。 md5 的介绍参见 MD5, 简单来说 md5 是一个不可逆的函数,会把密码映射成一个没有规律的字符串,原则上讲这样是可以保护密码的。 但它毕竟是一个确定的函数,因此 input 和 output 是对应的,因此机智的黑客们就想到,可以造一个表预先存好一些密码对应的 md5,这样就可以反查。 这个叫彩虹表:彩虹表 因此利用这样的根据,使用了简单密码的话,还是很容易就被查表破解,于是这里管理员密码就被拿到了。 第三步就是利用管理员权限去黑网站了, 不过管理员权限不是万能的,所以这里答主提到一句没有上传点,也就是说功能受限。 这里他提到使用一个工具叫做“菜刀”打开了他的权限,这个工具我不太熟悉,了解的知友可以帮我补充一下。 这里简单查了一下,它的核心原理应该还是远程代码执行,通过给网站提交有害的 PHP 代码,达到提升权限做各种各样事情的能力。 做到这一步,网站里所有文件都可以被修改了,那就意味着“黑进去一个网站”了。 以上根据个人浅薄的知识回答,望各位指正~ 阅读原文