170910 WarGames-Utumno(2)
来源:互联网 发布:算法谜题 pdf 下载 编辑:程序博客网 时间:2024/06/07 00:15
1625-5 王子昂 总结《2017年9月10日》 【连续第342天总结】
A. WarGames-utumno
B.
int __cdecl main(int argc, const char **argv, const char **envp){ int v4; // [sp+14h] [bp-Ch]@4 if ( argc ) { puts("Aw.."); exit(1); } strcpy((char *)&v4, argv[10]); return 0;}
程序很简单,需要另argc=0后通过argv[10]溢出v4
查了一下如何令argc=0,在StackOverflow上看到了有提问:https://stackoverflow.com/questions/8113786/executing-a-process-with-argc-0
估计也是这个题目?
在最后提到了通过execv函数令argv指针为空指针即可,源码:
#include <stdio.h>#include <unistd.h>int main( void ) { char *argv[]={ NULL }; execv( "/utumno/utumno2", argv ); return ( 0 );}
尝试写了一下 发现可以实现
反馈Segmentation fault
不过这样的话,argv[10]就不可能是参数了,回忆一下main的参数设置,实际上是env的第十个值(argv和env之间有一个NULL分隔)
那么接下来的问题就是构造env使其溢出到返回地址,以及找到payload的地址
ShellCode的构造问题
虽然IDA已经反汇编出v4的长度是0xC,似乎shellcode的分布只需要12(v4)+4(ebp保护值)+4(返回地址)+nop sled+payload就好
但是分析一下汇编就会发现,仍然存在老朋友:堆栈指针对齐
偏移范围在0-15个字节,因此还是要动态调试一下:
进入gdb,加载上述的noarg程序,直接运行可以得到segmentation fault的出错值
然后断main再运行
先断在noarg的main,c过掉以后就断在了utumno2的main了
查看argv参数,再查看第十个指针的值,发现出错值于12+4+8后
也就是说,对齐产生的偏移有8个字节
环境变量的存储结构
用env命令可以查看环境变量,结合分析内存可以知道
环境变量是以”name=value/0”的形式存储的,新插入的环境变量是无序的(至少不是先后和字母顺序)
这样的话,就只好以人海战术搞定了
本身系统的环境变量数量大概在十五个左右,批量创建二十(也可以更多)个环境变量后再用env命令确认第十个环境变量是否为我们创建的ShellCode
至于返回地址,我是粗暴地靠着大量的Nop Sled(每个Code中1000个Nop,20个Code)
这时候ShellCode中的返回地址基本可以在a段往后瞎写了(0xffffa000-0xffffdfff)
轻松getshell:
utumno2@utumno:~
./n whoami
utumno3
$ cat /etc/utumno_pass/utumno3
zuudafiine
C. 明日计划
utumno
- 170910 WarGames-Utumno(2)
- 170911 WarGames-Utumno(3)
- 170909 WarGames-Utumno(0-1)
- utumno - 2
- 170904 WarGames-Behemoth(2)
- 170825 WarGames-Narnia(1-2)
- Wargames:Vortex Level 2
- WarGames-Natas(16)
- Wargames:io.smashthestack Level 2
- WarGames-leviathan(0-7)
- 170817 WarGames-Natas(15)
- 170821 WarGames-Natas(26)
- 170823 WarGames-Narnia(0)
- 170828 WarGames-Narnia(3)
- 170829 WarGames-Narnia(4)
- 170830 WarGames-Narnia(5)
- 170831 WarGames-Narnia(6)
- 170901 WarGames-Narnia(7)
- iOS学习笔记-135.RunLoop03——Runloop相关类1_基础
- VirtualBox下扩容vdi文件
- bzoj 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场(DFS)
- 数据库主键和外键
- 模板函数的分离编译
- 170910 WarGames-Utumno(2)
- PCA的数学原理(通俗易懂)
- oralce之 10046对Hash Join分析
- 【IOS笔记】分页功能
- 理解边缘检测,从0基础开始,数学知识是重点
- 02:陶陶摘苹果
- Makefile----wildcard用法
- Spring boot security问题
- 自己使用XListView