vunl
很明显的栈溢出,不过程序开了NX,所以需要rop
exp
主要利用int执行read write函数,由于程序里没有open函数,所以需要找一个地方使得eax为5之后int调用open。
程序里有关于alarm,可以调用alarm(5),在调用alarm(随意),使得eax为5,然后再int 8,就执行了open。
read的时候,可以发现由于
type | value |
---|---|
standard input | 0 |
standard outpue | 1 |
standard error | 2 |
之后程序只要打开设备,分配返回的fd就从3开始依次增加。
所以这里可以通过read(3, buf, bytes)来取得flag,然后write写道管道里读取