并不是很ez的shellcode是我写的第一道题,我的wp应该没什么人会看,于是我打算写一些我的心得体会反思等,纯wp介绍原理不会太多。
这题花了我很长时间的地方主要是两处,第一是找思路,第二是完全有思路后不会写exp,反映出我的一些问题,第一是看题目不仔细,第二是对pwntools不熟悉
首先看这题的反汇编,mmap开辟了一块rwx的空间,并且让我能写入<=10的字节进去,最后执行这一块的代码,但是很明显是不存在这么小的shellcode的,在这里卡了很久很久,我想了很多办法,一个看似可行的办法是写入跳转指令跳回之前的read函数(因为跳转指令是visible的),并且还能控制rsi的值来调用这个read函数,之后想想实在是不可能,read函数准备工作rsi正好在中间,很难在保证调用时仅改变rsi的值,并且程序还开启了pie,又无法泄露地址,所以,这是不可能的,正当我想放弃之时,我又看了一遍反汇编,找到了他的一个小漏洞,在main函数中,那个计数变量是signed的,但是myread函数是unsigned的,我一开始是真没看到,因为那个unsigned确实不显眼,这样就十分简单了,思路如下
输入-1,再输入可见的shellcode即可(这个我直接抄的网上的)
之后exp我又不会写,我服了,我之前手动运行自己输入是可以的,只要保证shellcode以EOF结尾,不要输入回车被检测到是invalid character,主要还是对python不熟悉,之后好在是写出来了,如下