jsrpc联动jsEncrypte插件

admin 2025年6月9日02:26:49评论8 views字数 3136阅读10分27秒阅读模式
这里是学了小迪最新一期js逆向课程,然后自己根据小迪老师的思路摸索出来的。
大佬勿喷
最好是先去了解一下jsrpc怎么用再来看这篇文章。
jsrpc链接
演示网站的数据包:
输入的账号密码验证码直接全部加密了
jsrpc联动jsEncrypte插件
jsrpc链接
通过jsrpc技术直接链接上去,解密成功(中间怎么链接的可以看看别的文章)
jsrpc联动jsEncrypte插件

升级改造

因为用插件自带的js脚本难以实现请求一个url返回数据,所以直接用python脚本去替换 这个js代码,直接用这个python脚本去链接这个burp插件。
使用方法就是  --host  burp插件的对应的ip地址一般默认为 127.0.0.1   --port 默认为 1664。

python ganjsrpc.py --host 127.0.0.1 --port 1664

这里基本上不需要做什么修改,就需要修改这里的接口鉴权的东西。下面这里面的参数

    params = {            'group''xiaodi',            'name''xiaodisec',            'action''pass',            'param': payload        }

完整代码

import json
import logging
import argparse
from http.server import ThreadingHTTPServer, BaseHTTPRequestHandler
from urllib.parse import urlparse, parse_qs
import requests

ASCII_ART = '''
                                                                      ,-.----.                     
                                                        ,---,   .--.              __  ,-.    /               
                    ,----._,.                        ,-+-. /  |.--,`|  .--.--.   ,' ,'/ /||    :    |          
                   /   /  ' /   ,--.--.    ,--.'|   ||  |.  /  /    '  '  | |' ||    | . :   ,---.   
                  |   :    |  /         |   |  ,"  |'--`_ |  :  /`./  |  |   ,'.   : |: |  /     
                  |   | .  . .--.  .-. | |   | /  | |,--,'||  :  ;_    '  :  /  |   |   : /     / '  
                  '   .   . |  ," .--.; | |   | |  |/ :  | '      `. |  | '   |   : .  |.    ' /   
                  '   .   . |  ," .--.; | |   | |  |/ :  | '      `. |  | '   |   : .  |.    ' /   
                   |   :   : |  ,     .-./'---'   |   :    :  `--'---'             `---'.|        /      
                     `----'        /  `--`---'                             /                   
                                                                 `---`     `----'       `--`-'                     
                                                                                         `--`-'                         

                                                   -- Author  嵩艺
'''

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='[%(asctime)s] %(levelname)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S'
)

# 加密请求函数
def encrypt_payload(payload: str) -> str:
    """向加密服务发送请求并返回加密结果"""
    try:
        base_url = "http://127.0.0.1:12080/go"
        params = {
            'group': 'xiaodi',
            'name': 'xiaodisec',
            'action': 'pass',
            'param': payload
        }

        response = requests.get(base_url, params=params)
        response.raise_for_status()
        json_data = response.json()
        return json_data.get('data', '')

    except requests.exceptions.RequestException as e:
        logging.error(f"请求加密服务失败: {e}")
        return ''
    except (json.JSONDecodeError, KeyError) as e:
        logging.error(f"解析响应失败: {e}")
        return ''

# HTTP请求处理类
class EncryptHandler(BaseHTTPRequestHandler):
    """处理HTTP请求的类"""

    # 禁用默认的日志
    def log_message(self, format, *args):
        return

    def do_POST(self):
        """处理POST请求"""
        try:
            content_length = int(self.headers['Content-Length'])
            post_data = self.rfile.read(content_length).decode('utf-8')
            form_data = parse_qs(post_data)
            payload = form_data.get('payload', [''])[0]

            if payload:
                encrypted_payload = encrypt_payload(payload)
                logging.info(f"加密请求: {payload} -> {encrypted_payload}")

                self.send_response(200)
                self.send_header('Content-type', 'text/plain')
                self.end_headers()
                self.wfile.write(encrypted_payload.encode('utf-8'))
            else:
                self.send_error(400, 'Missing payload parameter')

        except Exception as e:
            logging.error(f"处理请求时出错: {e}")
            self.send_error(500, 'Internal Server Error')

    def do_GET(self):
        """处理GET请求"""
        self.send_response(200)
        self.send_header('Content-type', 'text/plain')
        self.end_headers()
        self.wfile.write("^_^nrhello jsEncrypter!".encode('utf-8'))

def run_server(host: str, port: int):
    """启动HTTP服务器"""
    server_address = (host, port)
    httpd = ThreadingHTTPServer(server_address, EncryptHandler)

    logging.info(f"[*] jsEncrypterPython start!")
    logging.info(f"[+] address: http://{host}:{port}")

    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        logging.info("[*] 接收到中断信号,服务器正在关闭...")
        httpd.server_close()

if __name__ == "__main__":
    print(ASCII_ART)
    parser = argparse.ArgumentParser(description='Python实现的JS加密服务')
    parser.add_argument('--host', default='127.0.0.1', help='服务器监听地址')
    parser.add_argument('--port', type=int, default=1664, help='服务器监听端口')
    args = parser.parse_args()

    run_server(args.host, args.port)
链接成功

jsrpc联动jsEncrypte插件

然后爆破

由于burp没有对password对应值遍历然后再对整体爆破的模块只能选择这种方式

jsrpc联动jsEncrypte插件
jsrpc联动jsEncrypte插件

最终效果

jsrpc联动jsEncrypte插件

原文始发于微信公众号(嵩艺):jsrpc联动jsEncrypte插件

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月9日02:26:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   jsrpc联动jsEncrypte插件https://cn-sec.com/archives/4147285.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息