0x01前言
这关其实和pwn关系不大,主要考察的都是linux下一些函数的操作,考察linux的基本功。涉及到的知识点包括一些经典的函数原型、IO重定向、文件描述符、管道、环境变量、socket编程、符号链接等。
这里顺便真心安利一本书,《UNIX环境高级编程》,简称APUE书里介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、 *** IPC、伪终端等方面的内容,还在此基础上结合函数原型介绍了多个应用示例,如果这本书啃透,正常题型linux下的pwn问题都不大。
0x02
登录后直接看源文件
可以看到这里分成了好几关
先看之一关//argv
之一个if要求传入100个参数
第二个if要求第A个(也就是ascii的65)参数的值为’\x00’
第三个if要求第B个(也就是ascii的66)的参数值为’\x20\x0a\x0d’
这题我们写c
这里的execve的原型为:
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);
execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用指针数组来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。
也就是说代码中的execve是用于执行input程序的,而作为传入的参数,最后要以null结尾,对应代码中的args[100]=NULL
看第二部分//stdio
read函数原型为ssize_t read [1] (int fd, void *buf, size_t count);
read()会把参数fd所指的文件传送count 个字节到buf 指针所指的内存中。
而题目源码中的fd的0,2分别对应的是stdin,stderr,这里是读4个字节到buf
然后调用memcmp
memcmp函数的原型为 int memcmp(const void *str1, const void *str2, size_t n));其功能是把存储区 str1 和存储区 str2 的前 n 个字节进行比较
整理一下,代码的逻辑就是从stdin中读4个字节,与\x00\x0a\x00\xff比较,从stderr读4个字节,与\x00\x0a\x02\xff比较
那么问题来了,stdin是标准输入,我们可以直接通过输入来控制,而stderr,该怎么控制呢
答案是IO重定向
这里涉及管道pipe的应用
pipe有两端,一段write写入,一端read读出,这里解题用到的就是把管道的read重定向到某一个流中,从而进程间可以进行通信。
这里我们的思路是父进程fork子进程,子进程write需要的四字节到pipe,父进程把pipe的read重定向到stdin,stderr。通过这种方式我们就可以控制stdin和stderr的内容了
先定义pipe
第三关//env
strcmp()用于字符串的比较,getenv()用来取得参数envvar环境变量的内容。参数envvar为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为envvar=value。
正常情况下肯定没有0deadbeef的环境变量,要想if条件成立,肯定需要我们自己写一个键值对
我们可以使用setenv()增加环境变量
setenv()原型为int setenv(const char *name,const char * value,int overwrite)
函数说明 setenv()用来改变或增加环境变量的内容。参数name为环境变量名称字符串。参数 value则为变量内容,参数overwrite用来决定是否要改变已存在的环境变量。如果没有此环境变量则无论overwrite为何值均添加此环境变量
本地写好源文件
对应代码为
setenv("\xde\xad\xbe\xef", "\xca\xfe\xba\xbe", 1);
这时候execve传入的第三个参数为新环境变量数组,我们声明为environ
第四关//file
打开名为”\x0a”的文件,比较前四个字节是否为”\x00\x00\x00\x00”
这关很简单,我们相应的用写权限打开该文件,写前四个字节即可
第五关//network
代码的意思是以input这个文件作为服务器,监听C端口
通过recv来接收,如果收到的为\xde\xad\xbe\xef,则通过
我们根据对应的代码稍微修改下就可以了
在本地编写完整的代码
通过scp上传
登录后切换到相应的路径编译源文件
直接执行是会报错的,因为当前目录下没有flag文件,我们又没有权限移动它,此时可以考虑使用符号链接的方式,通过绝对路径或者相对路径的形式指向flag。因为对符号链接文件进行读写会表现为直接对目标文件进行操作
这里是让/tmp/yale/flag直接指向/home/input2/flag
然后执行
通关
管道命令(实验主要介绍了选取命令的使用、排序命令的使用以及双向重定向命令。)
http://www.hetianlab.com/expc.do?ec=ECID172.19.104.182014091814152800001
Bleeping Computer 网站披露,网络安全分析师发现 GoDaddy 管理服务器上托管的部分 WordPress 网站,被部署了大量后门,所有网站都具有相同的后门有效载荷。 据悉,这次网络攻击可能影响到许多互联网服务经销商,已知的包括 MediaTemple、tsoHost、123Re...
Google已经为Windows、Mac和Linux用户发布了Chrome 99.0.4844.84,以解决一个在外部被利用的高严重性零日漏洞。浏览器供应商在周五发布的安全公告中说:”Google已经得知CVE-2022-1096的一个漏洞存在于外部。” 99.0.4844.84版本已经在稳定的桌...
近日,应用交付领域(ADN)全球领导者F5公司发布了一项安全警告,其研究团队监测到一个关键漏洞正在被积极利用。漏洞的追踪代码为CVE-2022-1388,CVSS 3.0评分为9.8,危险等级非常高。该漏洞允许未经身份验证的网络攻击者执行任意系统命令,执行文件操作,并禁用BIG-IP上的服务。 根...
包含敏感数据的数千个 Firefox cookie 数据库目前出现在 GitHub 的存储库中,这些数据可能用于劫持经过身份验证的会话。这些 cookies.sqlite 数据库通常位于 Firefox 配置文件文件夹中。它们用于在浏览会话之间存储 cookie。现在可以通过使用特定查询参数搜索 G...
微软今天宣布,它将默认阻止5个Office应用程序中VBA宏脚本的执行,这是近年来影响最大的变化之一。从2022年4月初开始,Access、Excel、PowerPoint、Visio和Word用户将不能在他们从互联网上下载的不受信任的文件中启用宏脚本。 安全研究人员多年来一直要求作出这一改变,这将...
为应对近年来不断增长的勒索软件攻击,越来越多的企业 IT 高管和员工,已经收到了专业人士的相关安全建议。Hitachi ID 刚刚公布了针对北美企业的最新调查报告,其中强调了内外部的 IT 安全措施需求。可知有 65% 的受访者表示,他们有被黑客接近,试图引诱他们参与谋划针对自家企业的勒索软件攻击。...