pwn

0x1.连接

1 r = remote('目标IP或Url',端口号)
2 r = process('./文件名')
3 r = ssh(user='',address='',port=,password='')

0x2.数据交互

1 r.send(data) : 发送数据。
2 r.sendline(data) : 发送一行数据,相当于在数据末尾加\n。
3 r.interactive() : 在取得shell之后使用,直接进行交互,相当于回到shell的模式。
4 r.recv(numb=字节大小, timeout=default) : 接收指定字节数。
5 r.recvall() : 一直接收直到达到文件EOF。
6 r.recvline(keepends=True) : 接收一行,keepends为是否保留行尾的\n。
7 r.recvuntil(delims, drop=False) : 一直读到delims的pattern出现为止。
8 r.recvrepeat(timeout=default) : 持续接受直到EOF或timeout。
9 r.sendafter(some_string,data) : 接收到some_thing后发送你的playload
10 shellocode = asm(shellcraft.sh()):生成system(/bin/sh)的shellcode
11 shellcode.ljust(num,char):如果shellcode长度不够,额外空间填充’char‘
12 context(os='linux', arch='amd64', log_level='debug')

0x3.objdump

1 objdump -d -M intel 文件名 :以intel语法反汇编可执行的节

 0x4.ROPgadget

查找可存储寄存器的代码
ROPgadget --binary rop  --only 'pop|ret' | grep 'eax'
查找字符串
ROPgadget --binary rop --string "/bin/sh"
查找有int 0x80的地址
ROPgadget --binary rop  --only 'int'

 


 

通过ida的ebp定位不一定准确,这一行and指令导致ida计算ebp偏移失败
pwn_第1张图片
Linux x86是通过int 0x80进行系统调用的(类似于windows 32位的int 0x2e),(syscall用于64位,sysenter用于一些比较新的32位系统).系统调用号传入eax,
got表是存放加载后得api地址,plt是一个调用的中转。
process('./p',env={"LD_PRELOAD":"./libc_path"})在python中指定libc

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/DreamoneOnly/p/11365254.html

你可能感兴趣的:(pwn)