仅供个人学习参考

flag

有时候flag文件没有放在当前目录下
用以下指令查找flag位置

1
find -name flag

strcmp

strcmp的特性是遇到’\x00’就停止比较字符串,可以考虑0截断绕过

pwntools

十六进制转十进制

1
2
python3
0xa //直接输入十六进制数,然后回车

十六进制转字符

1
2
python3
chr(0x41) //输出为'A'

打印某函数的got表地址

1
2
elf = ELF("./filename")
elf.got['function']

打包成字符串并发送

1
send(str(data))

p32/p64: 打包一个整数,分别打包为32位或64位
u32/u64:解包一个字符串,得到整数

关于p64(p32)

%s就得用p32/p64 传输数据
p打包函数是将整数打包为相对应位数的地址表示方式
u解包函数就是把\x\x码重新变为整数

  在使用 p64 函数或者其他打包函数时,确保该函数是一个整数,而不是字节串或者其他非整数类型的数据。
  如果该函数是以字节串形式表示的十六进制地址(如 b’0x7ffc52917000’),需要先将其转换为整数再进行处理。

1
2
3
4
5
6
7
8
9
10
11
from pwn import *

# 假设 buf 是一个字节串表示的十六进制地址
buf_bytes = b'0x7ffc52917000'

# 将字节串表示的十六进制地址转换为整数
buf_int = int(buf_bytes, 16)

#使用p64打包函数
p64(buf_int)

发送和接受数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
conn.send(data) #发送数据
conn.sendline(data) #发送一行数据,相当于在数据后面加\n
#接收数据,numb制定接收的字节,timeout指定超时
conn.recv(numb = 2048, timeout = default)
#接受一行数据,keepends为是否保留行尾的\n
conn.recvline(keepends=True)
#接受数据直到我们设置的标志出现
conn.recvuntil("Hello,World\n",drop=fasle) ##drop=true 时接受的数据会去除引号内的内容,返回的数据为字符串类型
##若要做计算,需转为如int 类型
int(conn.recv(),16) ## 16意为16进制
conn.recvall() #一直接收直到 EOF
conn.recvrepeat(timeout = default) #持续接受直到EOF或timeout
#直接进行交互,相当于回到shell的模式,在取得shell之后使用
conn.interactive()

hex

1
2
3
4
5
6
7
8
9
10
>>> e = ELF('/bin/cat')
## 在Python 3中,print是一个函数,而不再是一个语句,所以正确的语法是使用括号将要打印的内容括起来
>>> print (hex(e.address)) # 文件装载的基地址
0x400000
>>> print (hex(e.symbols['write'])) # 函数地址
0x401680
>>> print (hex(e.got['write'])) # GOT表的地址
0x60b070
>>> print (hex(e.plt['write'])) # PLT的地址
0x401680

IDA

*选中伪代码,右键可将其复制到汇编代码中

gdb

b main的时候gdb查找不到函数的,是因为main函数被删符号表,体现就是在ida中main函数不是粗体字,ida只是凭借逻辑识别他为main函数

syscall和函数传参

*x86
返回值:eax
syscall:int 0x80
syscall调用号:eax
syscall参数:ebx ecx edx esi edi ebp
函数参数:stack
*x86_64
返回值:rax
syscall:syscall
syscall调用号:rax
syscall参数:rdi rsi rdx r10 r8 r9
函数参数:rdi rsi rdx rcx r8 r9 stack
*arm32(aarch32)
返回值 : r7
syscall : svc 0
syscall调用号: r7
syscall参数: r0 , r1 , r2 , r3 , stack
函数参数: r0 , r1 , r2 , r3 , stack
*arm64(aarch64)
返回值 : x0
syscall : svc 0
syscall调用号: x8
syscall参数: x0 , x1 , x2 , x3 , x4 , x5
函数参数: x0 , x1 , x2 , x3 , x4 , x5 , x6 , x7 , stack