链接见标题。
![](https://img.haomeiwen.com/i15648737/d20fb0884cff4a53.png)
作为一个新新手,看到第一行的时候就开始感到诧异,为什么题目会给出flag的路径呢。
接下来看第二句,说只有open,read和write这三个系统调用可以用。
现在还是一头雾水,那么下载下来看看吧。
![](https://img.haomeiwen.com/i15648737/845761320a3db617.png)
有RELRO和Stack的保护。这两行是什么意思呢?
RELRO:
RELRO会有Partial RELRO和FULL RELRO,如果开启FULL RELRO,意味着我们无法修改got表
Stack:
如果栈中开启Canary found,那么就不能用直接用溢出的方法覆盖栈中返回地址,而且要通过改写指针与局部变量、leak canary、overwrite canary的方法来绕过
from link 作者:HacTF
用IDA打开,并F5:
![](https://img.haomeiwen.com/i15648737/2286eac34df76077.png)
逻辑大概就是,主动读取shellcode,然后主动执行这个shellcode。
这么直接??我试了试直接注入,结果失败。这时视线转到orw__seccomp()这个函数上。我们搜索一下seccomp是什么。
seccomp 是 secure computing 的缩写,其是 Linux kernel 从2.6.23版本引入的一种简洁的 sandboxing 机制。在 Linux 系统里,大量的系统调用(system call)直接暴露给用户态程序。但是,并不是所有的系统调用都被需要,而且不安全的代码滥用系统调用会对系统造成安全威胁。seccomp安全机制能使一个进程进入到一种“安全”运行模式,该模式下的进程只能调用4种系统调用(system call),即 read(), write(), exit() 和 sigreturn(),否则进程便会被终止。
from link 作者:你身边的那个TA
ok,现在我们就理解了题干的“只有open,read和write这三个系统调用可以用。”是为什么了。
题目已经给出了一个flag的路径,所以我们只需要将shellcode写成对open,read和write的调用就行了。
那么现在难题又来了,这shellcode该如何调用呢?我们之前只会复制粘贴啊?
不会就学啊!link
或者看别人的wp:) link
还有个选择,学一下pwntools的shellcraft link
然后把shellcode注入就可以了。
flag = FLAG{sh3llc0ding_w1th_op3n_r34d_writ3}
网友评论