前言

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

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

Linux常用指令

nc

1
nc 域名 端口号

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

ssh

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

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

ls

1
ls

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

pwd列目录

1
pwd

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

chown程序提权

1
chown 777 文件名

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

虚拟机连不上网?

多半是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 的行。

64位程序的传参寄存器

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

GDB调试

启动

1
gdb pwn

打断点

1
2
b function #在指定函数处打断点
b line_number #在指定行号处设置断点

<待续…>