QClaw + 自定义Python工具
QClaw + 自定义Python工具关于 QClaw 的相关信息,可以从官网查看,本文主要是记录一下将之前 Python 写的一个日志分析工具,封装成 QClaw 可接受的skill,并且安装到 QClaw 中使用。
skill安装简单粗暴的方式
看一下文件结构
1234567891011121314linux-skill/├── SKILL.md # 技能说明文档└── scripts/ ├── ssh_log/ │ ├── ssh_analyzer_pro.sh # SSH 日志分析主脚本 │ └── ssh_analyzer.sh # 简化版 ├── linux_backdoor_emergency/ │ ├── linuxbackdoor.sh # 完整后门扫描脚本 │ ├── backdoor_scan.sh # 单项扫描脚本 │ └── linux_backdoor.sh # 备用脚本 └── func/ ├── ssh_con ...
OpenClaw 使用本地 Ollama 调用 qwen3 大模型
OpenClaw使用本地Ollama调用qwen3大模型这次依旧是虚拟机(Linux)运行OpenClaw server,然后物理机运行Ollama,本地模型使用qwen3:30b
虚拟机:Linux kali 6.16.8+kali-arm64
物理机:Darwin bogon 25.3.0 Darwin Kernel Version 25.3.0
Ollama安装Ollama官网
官网给了一个直接Ollama加载OpenClaw的方法,但是在安装ollama的本地检测是否部署了openclaw,然后启动,这里因为openclaw和ollama不在同一台机器上,所以不用这种方法。
安装好后下载模型,我这里用的是qwen3:30b,因为本地模型肯定是不如在线模型好,尽量选参数量大一点的
然后设置里面打开网络访问,OpenClaw要求模型上下文窗口≥16000 tokens,而Ollama拉取的基础模型默认上下文窗口仅4096 tokens,所以需要将上下文窗口扩展至32768 tokens
OpenClaw配置OpenClaw 需要一个API Key来识别 Ollama 服务。由 ...
Linux(kali) 部署 OpenClaw
Linux(kali) 部署 OpenClaw官网
主机 MacOS m1
虚拟机 Kali 2025-04
1Linux kali 6.16.8+kali-arm64 #1 SMP PREEMPT Kali 6.16.8-1kali1 (2025-09-24) aarch64 GNU/Linux
一、命令行安装官网一键安装脚本curl -sSL https://openclaw.ai/install.sh | bash
二、进入安装向导进入安装向导
123◆ I understand this is personal-by-default and shared/multi-user use requires lock-down. Continue? │ ● Yes / ○ No
第一步默认个人使用,选Yes
类似于安装模型吧,选Manual
本地测试的话就选Local gateway
一个默认的工作空间
...
SSH日志分析
ssh日志分析一、可以登录 SSH 的账号数量查看ssh配置文件
1cat /etc/ssh/sshd_config
允许登录的组是SSHD_USER和root,然后查看组的用户
1cat /etc/group
可以看到有两个用户,一个是toor,一个是root
二、SSH日志中登录成功的日志条数ssh日志文件路径/var/log
解压gzip -d auth.log.2.gz
查看日志文件内容,筛选成功的用户
1grep "Accept" auth.log auth.log.1 auth.log.2 | wc -l
三、登录次数最多的用户加一个筛选
1grep "Accepted" auth.log.1 auth.log.2 | awk '{print $9}' | sort | uniq -c | sort -nr
四、SSH日志中登录失败次数最多的用户以及登录使用的ip是什么12grep "Failed" auth.log auth.log.1 auth.log ...
xxe利用总结
XXE利用方法总结CTF 中,XXE 是常出现在:
XML 文件上传
SOAP 接口
RSS 订阅
配置文件解析
图片/文档元数据解析(如 .docx, .svg)
XXE 利用前提
条件
说明
服务接收 XML 输入
如 POST /upload、GET /xml
使用不安全的 XML 解析器
如 Python xml.etree, Java DocumentBuilder
未禁用 DTD/外部实体
默认解析器常开启 external entities
有回显 / 无回显
决定利用方式
有回显 XXE基础利用模板12345<?xml version="1.0"?><!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd">]><root>&xxe;</root>
服务器返回:
123<root>root:x:0:0:root:/root:/bin ...
伪终端绕过tty限制
过程复现记一道CTF题目的sudo提权方法,伪终端绕过tty限制
获取权限的步骤省略,直接
先sudo -l看一下,普通sudo无法提权
然后执行ps -ef查看是否有root权限运行的进程
1script -q -f -c bash -li -c "echo mRSUAlI | sudo -S -v >/dev/null 2>&1; sleep infinity" /dev/null
这条命令用script启动一个伪终端(PTY),嵌套调用bash启动交互式终端,输出字符串 mRSUAlI作为sudo的密码,然后sudo -S -v从标准输入读取密码,不执行命令,只是验证并缓存sudo权限。
因为sleep infinity让这个会话保持了睡眠,所以复用这个语句仍然有sudo权限
分析这里可以看到直接执行sudo -n whoami这个命令还是不行,返回了sudo: sorry, you must have a tty to run sudo
因为在/etc/sudoers文件当中,设置了requiretty,是 sudo 的一个安 ...
AI Agent Note (智能体创建)
之前实现了大模型对工具的调用,现在实现初始化一个智能体,然后对工具进行调用。
这里有一个问题,智能体是基于大模型对工具进行调用,这二者有什么区别?
这是一个非常关键、也是很多人容易混淆的问题。大模型调用工具和智能体调用工具看起来都能触发外部函数/接口,但它们的行为模型、执行流程、决策机制和适用场景完全不同。
LLM 只做一次决策:选哪个工具 + 给参数 → 工具执行 → 直接返回结果。它本身不会思考“下一步该怎么办”。
Agent 是可以持续推理、规划、循环执行的系统,它会根据工具结果重新思考、再调用工具、多轮执行并最终形成任务完成闭环。
理论先摆在这,,,下面创建一个智能体,然后实现调用工具进行数学计算,最后与前面大模型调用工具进行对比。
智能体创建初始化智能体12345678from app.bailian.commom import create_calc_tools, llm, chat_prompt_templateagent = initialize_agent( tools=create_calc_tools(), llm=llm, agent ...
AI Agent Note (绑定自定义工具)
绑定自定义工具一、工具函数123def add(a, b): print("调用了函数add:") return a + b
二、将工具函数转换为LangChain Tool对象引入from langchain_core.tools import Tool,通过这个可以把函数转化为大模型能够理解的工具
123456789def add(a, b): print("调用了函数add:") return a + badd_tools = Tool.from_function( func=add, name="add", description="两个数相加")
三、大模型和Tool对象绑定12llm_with_tools = llm.bind_tools([add_tools])chain = chat_prompt_template | llm_with_tools
四、调用大模型123resp = chain.invoke(input={" ...
AI Agent Note (LangChain调用通义千问大模型)
Using LangChain to call Tongyi Qianwen0x03、Chain calling of LLMIn previous article, we firstly get the prompt, than we use prompt to call LLM.
Here is another method to call LLM. We combine the prompt template with LLM, and name it chain.
123# Chain calling of LLMchain = few_shot_prompt_template | llmprint(chain)
Than, we use chain calling.
12resp = chain.stream(input={"text": "This is chain calling of LLM"})Resp(resp)
AI Agent Note (0x02)
0x02、Prompt TemplateString Prompt TemplateOnly use to plain text
1234567# Prompt Templateprompt_template = PromptTemplate.from_template("Today's {something} is very nice")# Prompt Template pass params, change template to promptprompt = prompt_template.format(something="equity market")resp = llm.stream(prompt)Resp(resp)
The program paradigm of Prompt Template is:
Creating Prompt Template
Passing params to Prompt Template, change the template to prompt
Env of ...