V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
whalegia
V2EX  ›  问与答

如何 hack/防止被 hack 线上服务?

  •  
  •   whalegia · 2017-05-25 02:51:49 +08:00 · 2008 次点击
    这是一个创建于 2765 天前的主题,其中的信息可能已经有所发展或是发生改变。

    组里面在做的服务准备上线了,上线之前有一个内部安全检查。就是大家随机交换自己实现 /维护的服务,尝试去 hack 别人写的 services。

    服务具体是 Restful APIs,有面向客户端的,也有面向其他内部服务的。如果能看到或者拿到不应该看到的内容,文件,那么就认为服务有漏洞。 不过漏洞当然不局限与这些,压力和表现测试也是一部分。

    因为是内部组安全检查,所以能直接看到源码。

    请问大家有没有什么 hack 经验呢……我还蛮迷茫的,不知该从何入手。当然也担心自己写的东西会不会太不健壮…… orz

    谢谢。。。

    第 1 条附言  ·  2017-05-25 08:34:17 +08:00
    诚心诚意认真热情童叟无欺声情并茂求助
    第 2 条附言  ·  2017-05-27 13:47:17 +08:00
    Hacking day 结束了。本着认真负责的原则分享一下几个内部定级为 P0/P1 的故障吧。

    背景:
    我们服务不涉及用户名和密码的保存。防 DDOS 攻击和容灾备份是买的别人的服务。
    服务的 endpoint 本身有 throttling 设置,使用的数据库也有 throttling 限制。
    本身有单元测试,还有每隔一段时间的外部 ping 测试。
    感觉整体非常靠谱了,然后还真是发现了好多问题……

    1. 没有检查用户 id 长度。
    这个真的很意外,好像大家都忘了。可以生成非常长的用户 id。

    2. 一个群的群主可以再没有其他 admin 的情况下把自己降级为非 admin,然后退出此群。
    会导致这个群没有 admin 永远留在数据库里删不掉。

    3. 我们有一个 endpoint,是会上传大文件的。上传大文件是根据文件 id == x 生成一个链接,然后使用这个链接上传。
    如果用户 B 使用一个新文件 Y,但是设法找到用户 A 的文件 id x,把新文件重新命名为 x,那么上传这个文件会标记为是用户 A 上传的。

    4. 一些特殊字符是做忽略处理了,会导致数据库中留下一些 id 为 null 的文件,无法删除。


    总结的时候,组织活动的小哥说:大家找到这么多问题,我真的很高兴……哦不对,我一点也不高兴。
    还是蛮好玩的哈哈哈哈

    (完)
    11 条回复    2017-05-27 13:47:59 +08:00
    whalegia
        1
    whalegia  
    OP
       2017-05-25 08:31:58 +08:00
    不要这样,来点人好不好。
    neighbads
        2
    neighbads  
       2017-05-25 09:10:38 +08:00   ❤️ 1
    专业的人干专业的事。。。
    hcymk2
        3
    hcymk2  
       2017-05-25 09:26:04 +08:00   ❤️ 1
    先上 sqlmap .
    mcfog
        4
    mcfog  
       2017-05-25 09:41:36 +08:00   ❤️ 1
    黑盒上各种工具扫
    白盒就靠经验了,比较简单的思路是先找到危险方法调用,分析传入参数的来路(其实也有工具能实现自动),或者找对方的 escape 的地方,灯下黑效应,错误的 escape 可以直接用,或者“自以为 ”全都 escape 了的部分绕过后容易有弱点
    whalegia
        5
    whalegia  
    OP
       2017-05-25 10:44:45 +08:00
    @hcymk2 虽然 sql 注入我不太懂,但是我们的数据库操作指令都被封装在逻辑关系下面了。也就是说任何的 request 都要先被逻辑分析一遍,再和数据库接触。
    所以这样的话也要考虑 sql 注入吗?

    @mcfog 谢谢谢谢。我非常新手啊……所以可能问的问题会比较傻。分析传入参数的来路是指?我们服务收到 request 先做的是 user authorization 验证,如果用户不存在或者不合法请求就直接拒绝了。所以是要考虑能否绕过 auth 验证吗?
    escape 我也不懂……什么是 escape ?
    hcymk2
        6
    hcymk2  
       2017-05-25 11:01:27 +08:00   ❤️ 1
    @whalegia
    SQL 是否能被注入和是否封装在逻辑关系下面其实没有关系.
    https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/09.4.md
    lyragosa
        7
    lyragosa  
       2017-05-25 11:11:22 +08:00   ❤️ 1
    我也完全不知道应该怎么弄,连百合……啊不,白盒都不知道。

    我也老觉得自己的网站一堆漏洞,奈何不知道从哪里着手测试,果然不是当黑客的料
    c0878
        8
    c0878  
       2017-05-25 11:41:19 +08:00   ❤️ 1
    也可以买第三方的入侵检测测试
    realpg
        9
    realpg  
       2017-05-25 15:10:51 +08:00   ❤️ 1
    现在我们 PHP 的靠谱程序员都捕会写出可能被注入的漏洞了……
    feng1234
        10
    feng1234  
       2017-05-25 18:18:25 +08:00   ❤️ 1
    http://www.freebuf.com/articles/web/135278.html 可以参考这个,给了一个方向
    whalegia
        11
    whalegia  
    OP
       2017-05-27 13:47:59 +08:00
    认真负责的我更新了总结。
    Why am I so responsible. 表扬我自己。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1014 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:06 · PVG 05:06 · LAX 13:06 · JFK 16:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.