安全攻防技能 30 讲
何为舟
前微博安全研发负责人
34681 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
开篇词 (1讲)
安全攻防技能 30 讲
15
15
1.0x
00:00/00:00
登录|注册

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

人工审计
代码检测
屏蔽信息
防护措施
避免源码泄露
避免返回信息过于明确
避免关键注释信息出现在线上代码
防护手段
信息泄露的危害
上传代码到GitHub
版本管理工具中的隐藏文件
返回信息泄露
注释信息泄露
避免错误信息泄露
错误信息中的敏感信息
总结
直接泄露方式
其他泄露方式
错误信息泄露代码逻辑
思考题
为什么黑客会知道你的代码逻辑?

该思维导图由 AI 生成,仅供参考

你好,我是何为舟。
你平时在 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/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

黑客通过错误信息、注释信息和返回信息泄露代码逻辑,以及直接泄露方式,推断出服务代码的逻辑。文章指出了错误信息泄露代码逻辑的原因和解决方法,包括正确配置文件和黑盒检测。同时介绍了注释信息和返回信息的泄露方式,以及相应的避免方法。此外,文章还提到了直接泄露方式,包括版本管理工具中的隐藏文件和上传代码到GitHub上的问题,并提出了相应的防护措施。总体来说,文章内容丰富,涵盖了黑客攻击的多种方式和相应的防范措施,对读者了解代码逻辑泄露问题具有一定的指导意义。信息泄露漏洞虽然容易理解,但危害不容小觑,因为所有攻击的第一步都是从信息泄露开始的。黑客通过泄露的信息推断出应用的整体架构和逻辑。除了黑客主动发起攻击导致的信息泄露外,还有很多非技术原因导致的信息泄露。因此,相应的防护手段包括屏蔽信息、代码检测和人工审计。文章提供了一张知识脑图,方便读者查缺补漏,加深记忆。最后留下一个思考题,鼓励读者回忆公司或负责的应用是否发生过类似的信息泄露事件,以及对公司或应用造成的影响和解决方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《安全攻防技能 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

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

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

    2019-12-30
    18
  • 律飛
    网上看了看,内容真不少呀!列举几个: 1.Apache样例文件泄露 apache 的一些样例文件没有删除,可能存在cookie、session伪造,进行后台登录操作。 2.字段加[] 造成信息泄露 数据包的所有参数都可能存在,把参数变为数组即可报错出网站绝对路径。 3.修改请求方法 将get方法改为put 程序就报错,泄漏网站绝对路径。 4.tomcat tomcat 后缀改成大写,会显示源码,只要把jsp文件后缀名改为大写就可以 5. war文件信息泄露 war文件信息泄露是指部署在war文件由于配置不当,导致其整个报文件以及其他重要的配置文件信息泄露,例如可以直接浏览目录,获取其下面的配置文件:WEB-INF/jdbc.properties,jdbc.properties为数据库链接配置文件。包含数据库链接的账户和密码等重要信息。 学了这几节课下来,知道开发过程中处处隐藏杀机啊。请教老师,作为公司管理人员和开发人员,除了制定安全制度,提高安全意识外,学习本门课外,平时如何高效地获取相关安全信息呢?

    作者回复: 对个人而言,可以关注一些安全论坛,了解最新的技术。对公司而言,一般都会建立安全响应中心,用来收集外界的情报。总之,这是这是一个长期发展运营的过程。

    2020-01-07
    7
  • 靠人品去赢
    我擦,错误提示太清晰也会有信息泄露的问题,但是感觉这种摸索起来也太“细”了吧。 而且感觉实际上大多数大家的业务逻辑什么的都差不多。

    作者回复: 对于攻击者来说,基本都是通过这种细节入手来打开大门的。业务逻辑差不多,但实现逻辑千差万别,因此收集到足够多的细节信息是攻击的基础。

    2020-12-28
    1
  • 小老鼠
    旁路一般是小网站吧

    作者回复: 不限大小,任何网站都有可能发生。

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

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

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

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

    2019-12-30
  • 张文伟
    https://github.com/madneal/gshark
    2023-11-05归属地:上海
  • 迈向架构师
    还有水平越权呢
    2023-02-19归属地:广东
  • Snooker
    间接泄露-返回信息: 通过抓包梳理业务流程的接口调用、查看接口返回信息,通常会发现很多非必要调用接口或接口重复调用、接口非必要信息返回。 另外面向企业办公的通讯工具:钉钉、企业微信,在一定程度上避免了信息泄露。
    2020-08-25
  • COOK
    错误信息,异常信息,和代码管理工具都会泄露,发布之前要做好检查
    2020-03-29
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部