前言

此篇文章是因为平时找一些指令要到处翻文章感觉有点麻烦就做了一些知识点的小汇总。

内容包括Linux指令、找ROPgadget指令、64位程序传参寄存器、GDB调试….,pwntools单独放在另一篇文章了感兴趣的师傅可以在博客主页翻翻看

Linux

nc

1
nc 域名 端口号

nc用于连接远程靶机,是Linux中的一个网络工具(还有很多其他用法但不常用就不列举了)

ssh

1
ssh 用户名@题目地址 -p题目端口号

ssh是一种网络协议,用于安全的远程登录到计算机系统

ls

1
ls

ls用于列出当前工作目录下的文件或子目录

cd

1
cd 目标路径

pwd列目录

1
pwd

pwd显示当前工作目录的内容

chown程序提权

1
chmod 777 文件名

该指令用于将程序变为可读可写可执行,即改变程序的权限

file查看文件类型

1
file 文件名

1

dynamically linked为动态链接

static Linking为静态链接

AWDP修复后文件上传

国赛半决打了第一次AWDP结果看不懂怎么传防御了的文件其中涉及一个update.sh文件

update.sh 是一个常见的脚本文件名,通常用于 Linux 或类 Unix 系统中。它的扩展名 .sh 表示这是一个 Shell 脚本文件,即用 Shell 编程语言编写的脚本。Shell 脚本是一种用于自动化任务的脚本语言,通常用于执行一系列命令、管理文件和目录、配置系统设置等。

1
2
3
1 !#/bin/sh                                                                   
2 chmod +x pwn
3 mv pwn /home/ctf/pwn

压缩文件命令

1
tar -czvf update.tar.gz pwn update.sh

虚拟机连不上网?

多半是DNS(域名系统)出问题了

一般我习惯吧DNS设置成8.8.8.8(谷歌的公开提供的公共服务器之一)

当虚拟机连不上网,打不开浏览器先尝试ping 8.8.8.8测试主机之间的连通性(检查网路连接的状态与质量)

1

网络正常的话是这样

不正常的话用这个

1
sudo vim /etc/resolv.conf

以管理员权限用vim修改/etc/resolv.conf这个位置的文件

1

将127.0.0.53修改为8.8.8.8即可(具体原理还没明白)

更改后重启网络服务

1
sudo systemctl restart NetworkManager

vim文本编辑器

a切换为插入模式

:w:保存文件

:q:退出 Vim

:wqZZ:保存并退出

:q!:不保存强制退出

还有很多但是最近只用得到这些就不一一列出了

ROPgadget查找

1
2
3
4
5
6
7
ROPgadget --binary pwn --only 'pop|ret' | grep 'rdi' #控制寄存器的值
ROPgadget --binary pwn --string '/bin/sh' #查找字符串
ROPgadget --binary pwn --only 'leave|ret' | grep 'leave'#查找leave ret指令地址
ROPgadget --binary pwn --ropchain #生成现成的rop利用链直接getshell适用于静态编译的程序
ROPgadget --binary pwn --only 'ret' #查找ret指令的地址
ROPgadget --binary pwn --offset #查看每个gadget在二进制文件中的偏移地址
ROPgadget --binary pwn --no-syscalls #只看主程序的gadget忽略动态链接库中的gadget

对第一条指令详细解释:

ROPgadget --binary pwn --only 'pop|ret'

  • --binary pwn:指定要分析的二进制文件为 pwn
  • --only 'pop|ret':只显示包含 popret 指令的 gadget。

| grep 'rdi'

  • |:管道符,将前一个命令的输出作为下一个命令的输入。
  • grep 'rdi':从上一步的输出中筛选出包含 rdi 的行。

沙盒查询

1
seccomp-tools dump ./pwn

64位程序的传参寄存器

1
2
3
具体64位传参方法如下:
当参数少于7个时,参数从左到右放入寄存器:rdi,rsi,rdx,rcx,r8,r9
当参数为7个以上时,前6个与前面一样,但后面的依次从“右向左”放入栈中,和32位汇编一样

GDB调试

1
2
3
4
5
6
7
8
9
10
11
gdb pwn #开始调试
b 函数名 #在指定函数处打断点
b *地址 #在指定位置处设置断点
n #c语言级的断点定位(走得快一点)
ni #汇编级别的断点定位(走得精细一点)
s/si #s与si的区别和n/ni相同,不同点在于s/si会进入函数内部
fibi #跳出函数
r #运行
c #让程序继续运行
stack 30 #查看此时栈中的内容
x\gx

ASCll表

1

<待续…>