安全攻防技能30讲
何为舟
前微博安全研发负责人
立即订阅
2938 人已学习
课程目录
已更新 12 讲 / 共 30 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 别说你没被安全困扰过
免费
安全基础概念 (5讲)
01 | 安全的本质:数据被窃取后,你能意识到问题来源吗?
02 | 安全原则:我们应该如何上手解决安全问题?
03 | 密码学基础:如何让你的密码变得“不可见”?
04 | 身份认证:除了账号密码,我们还能怎么做身份认证?
05 | 访问控制:如何选取一个合适的数据保护方案?
Web安全 (6讲)
06 | XSS:当你“被发送”了一条微博时,到底发生了什么?
07 | SQL注入:明明设置了强密码,为什么还会被别人登录?
08 | CSRF/SSRF:为什么避免了XSS,还是“被发送”了一条微博?
09 | 反序列化漏洞:使用了编译型语言,为什么还是会被注入?
10 | 信息泄漏:为什么黑客会知道你的代码逻辑?
11 | 插件漏洞:我的代码看起来很安全,为什么还会出现漏洞?
安全攻防技能30讲
登录|注册

10 | 信息泄漏:为什么黑客会知道你的代码逻辑?

何为舟 2019-12-30
你好,我是何为舟。
你平时在 Debug 的时候,一定首先会去查看错误信息。根据错误信息,你能够了解究竟是什么情况引发了什么样的错误。同样地,黑客也能够通过错误信息,推断出你的后台代码逻辑。那么,黑客究竟是怎么做的呢?接下来,我们就一起看一下这个过程。

为什么错误信息会泄漏代码逻辑?

当黑客在登录某个页面时,在用户名位置输入一个单引号,在密码位置输入一个“g”之后,就会出现如下的错误信息。
An Error Has Occurred.
Error Message:
System.Data.OleDb.OleDbException: Syntax error (missing operator) in query expression 'username = ''' and password = 'g''. at
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling ( Int32 hr) at
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult ( tagDBPARAMS dbParams, Object& executeResult) at
从这个错误信息中,我们可以看到,网页最终执行了一个 SQL 语句,这个 SQL 语句的部分内容为username = ''' and password = 'g'。因此,后台的大致逻辑应该是下面这样的。
第一,错误信息反馈的是 Syntax error,即语法错误。在密码位置输入单个字母“g”肯定不会引起错误,所以,这个 SQL 语句是因为多了一个单引号导致的报错。而如果使用了 PreparedStatement 等方法,是不会产生这个错误的。因此,后台的 SQL 查询应该是直接采用的字符串拼接,且没有过滤单引号。
第二,错误信息中显示了部分的 WHERE 条件是username = '' and password = ''。这又是一个登录的逻辑,所以,只要用户名和密码正确,这个 SQL 语句会返回黑客需要的用户信息。因此,后台的 SQL 语句应该是形如 select from where 的格式。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《安全攻防技能30讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(4)

  • qinsi
    还有旁路信息泄漏。以上面的用户登录场景为例,对于无效用户和有效用户的登录请求,如果服务端处理耗时不一样也会泄漏信息。又比如padding oracle攻击,只要服务端返回的信息可以区分解密成功与否,就可以在没有密钥的情况下经过有限次尝试枚举出解密后的信息

    作者回复: 你好,感谢你的留言。旁路泄露确实也比较重要。其实间接的泄露方式还有很多,比如robots.txt里面的url路径等。这些在平常都很难意识到问题的存在,更多的是吃一堑长一智~

    2019-12-30
    1
  • leslie
    直接泄漏没有,不过间接泄漏估计不好说,注释和抛错做过了居然会引发间接泄漏的风险。看来后面要好好检查调整相关的策略了。谢谢老师的分享。

    作者回复: 错误信息一般还是会暴露比较多的代码信息的,最好能做统一处理,返回一个静态的错误页面,或者错误码,都行。

    2019-12-30
  • 小晏子
    想到了著名的B站事件,源代码上传到github,感觉这个很大一部分原因是工程师对github理解的不到位,以为是个人仓库,别人看不到,这块应该加强培训,在入职的时候就应该培训,尤其对于年轻的工程师,安全意识太薄弱。

    作者回复: 其实类似的事件很多,大小公司都有。毕竟这么多工程师,很难保证哪个人不注意就传上去了。因此,除了加强培训管理,扫描也是很必要的。

    2019-12-30
  • Cy23
    每个目录没有默认页面的都创建空index.php,禁止返回错误信息给客户,模糊返回校验错误提示信息
    2019-12-30
收起评论
4
返回
顶部