网站用的是 Django 。
主要目的是限制软件的用户必须在登录的状态下运行被保护的功能,所以只要能够绕过登录运行被保护的功能就证明这个系统依然有漏洞。
客户端是 C++写的,界面库是轮子哥的 GacLib 。
感谢这位老铁给我刷的人气,好家伙,刷了400围观马甲
话说Django有没有那种类似PHP的托管空间啊,我感觉云服务器都不如PHP那种空间性价比高,奈何实在不喜欢PHP……
1
Plague 2021-03-07 10:48:54 +08:00
验证程序注册还要手机号?
|
3
dorothyREN 2021-03-07 11:08:37 +08:00
你这 diango 是用的模板还是自己撸的
|
4
yunsee 2021-03-07 12:00:37 +08:00
csrfmiddlewaretoken
不失效吗?可以拿来重复使用,就失去验证码的意义了。 |
5
yunsee 2021-03-07 12:03:25 +08:00
<script type="text/javascript">
const btn = $("#sendvcode"); let t = 60; let iid; function sendvcode (phone) { $.ajax({ type: "POST", url: "/accounts/register/sendvcode/" + phone, data:{"csrfmiddlewaretoken": "35d0T1TEJnF5F8X17iyXldXJ0d4KDI90knMg8MDQz4RYTvKTHOvHbXAfK4818KoX"}, success: function (data) { alert(data); btn.attr("disabled",true); t = 60; iid = setInterval(countdown, 1000); }, error: function (data) { alert(data); } }); function countdown() { t--; btn.attr("value", t.toString() + "秒后可重新发送"); if(t === 0){ btn.attr("value", "发送验证码"); btn.attr("disabled",false); clearInterval(iid); } } } </script> Token 直接传给客户端 == 没有验证码 |
6
crab 2021-03-07 12:49:17 +08:00
看了下载文件名,不会还上了 vmp 吧?
|
7
chinvo 2021-03-07 13:03:04 +08:00 via iPhone 1
vmp 干掉 80%的用户
防破解本质就是要理解一点:不存在不能被破解的方法,只能是往复杂和恶心人的方向努力。但是切忌造轮子,不然你设计的精妙算法可能就是系统薄弱环节。 |
8
runninghipp 2021-03-07 15:29:38 +08:00
已经是诈骗页面了
|
9
xuanbg 2021-03-07 17:32:19 +08:00
完整的程序到了人家手里,那搓圆还是捏扁就都的随人家的意思了。最简单粗暴也最有效的破解方法就是反汇编找到关键点,直接修改字节码跳过你的验证逻辑。百试不爽。
|
10
IDAEngine 2021-03-07 19:06:28 +08:00
逻辑都在服务端处理就行了,客户端只做显示和计算
|
11
qzhsjz OP @yunsee #5 是这样的,我这次是为了不收集大家手机号,才临时改成接口返回验证码本身,实际上 alert 出来的应该是上层接口返回的“发送成功”、“发送失败”等信息。
如果说的是 csrftoken 的话,这个东西我是用的 Django 自带的,应该每次刷新都是会变的。 |
12
qzhsjz OP @chinvo #7 感谢,我觉得也是。所以尽量没有多造轮子,只是把一些我觉得不太好的轮子以我觉得不错的逻辑重新写了一遍。
|
13
qzhsjz OP @xuanbg #9 理论上讲确实是这样的,实际上这个程序用到的所有密钥(除了服务器私钥)我都是存在客户端里的,但是目前还没有人(也可能是没有足够的动力)找出这些密钥。
|
14
qzhsjz OP @dorothyREN #3 大后台用的还是 Django 模板,因为本身 Django 的那个大后台做得就很精致很完善。用户后台什么的那些都是自己撸的。
|
17
Flymachine 2021-03-08 10:32:48 +08:00
@qzhsjz 你这个加密传输能防重放攻击吗?拦截一次成功的通讯,然后自建虚拟服务器重放这个通讯,是否可以绕过验证?
话说,如果重要流程没有插桩,核心代码没有上云。仅仅只是验证上云没什么用途。 |
18
qzhsjz OP @Flymachine #17 重放攻击是通过加了时间戳的签名去防的,但用于生成签名的密钥依然存放在本地。我是实在不知道客户端有什么安全的地方可以存放密钥,或者说可能客户端本身由于是受对方控制的所以根本无法信任?
|
19
Flymachine 2021-03-08 10:55:32 +08:00
时间戳不靠谱,上强随机数来签名吧。客户端主动上传,数据带强随机数并签名,服务器返回时,必须带上客户端传的强随机数+服务器自己的强随机数并签名。
其实最简单的方式就是核心代码上云,有些重要数据必须是在云上处理后再下发的,而且这个数据不应该是固定的数据。这样就不怕对方搞个虚拟服务器劫持通讯了。 |
20
qzhsjz OP @Flymachine #19 强随机数如果只靠接口参数传送的话,应该实际上还是无法避免重放攻击的吧。我觉得如果这样做的话,应该是使用客户端和服务器端都知道的一个算法去生成才行,就是跟 2FA 验证码一样的思路。但是这样的话算法又无法避免放在客户端,可以被逆了……
|
22
Flymachine 2021-03-08 14:51:04 +08:00
防的是对客户端的重放攻击。如果攻击方想要在不爆破程序的前提下解决这个,就要靠重放服务器验证通过的结果指令。强随机数能保证这样的攻击失效。
至于爆破程序这样的攻击方式...没辙,真没辙。 |
23
ysc3839 2021-03-09 07:00:05 +08:00 via Android
关于“PHP 托管空间”的问题,可以了解一下 Serverless,其实跟以前的 PHP 空间有许多相似之处。
不同 Serverless 服务商支持的语言不同,不过个人调查下来大多数都会支持 Node.js ,所以个人是建议用 Node.js 来写,这样自建或者用 Serverless 都可以。 目前能免费白嫖的 Serverless 平台大概有 Vercel, Netlify 和 Heroku,都支持 Node.js ,其中 Heroku 支持 Python 。不过需要注意的是,这类免费服务一般都不带数据库功能,可以考虑配合 Google Firebase 的数据库。 我没了解过现在还有没有什么免费的 PHP 空间,不过就算有,个人也不推荐花时间学习 PHP 了,感觉语言本身的 API 设计得很奇怪,以及不喜欢感觉传统 CGI 的执行模式。 |