准备工作
checksec好家伙能开的开完了(pwnta是我写的一个shell脚本,里面有checksec之类的省的一个一个输了,反正每次都要用)
进ida看看
可以发现明晃晃的有个system摆在这
漏洞及利用思路
system上方有个scanf,此函数是典型的危险函数,不会限制输入位数。
关键就是那两个if语句的理解,因为是做完后写wp,我就直接说结论了
其实最关键也就是这个代表什么,这几个连着的符号怎么理解
这里是对var的单个元素取至后将它强转为指向八字节数据(qword的解释)的指针,指针存储的地址还是var[13],然后对这个地址解引用,从改地址开始取出64bit的数据(qword指针就该取这么多)
所以这个部分代表的就是var[13]对应地址开始的一个64位的数据
所以第一个if就是要这段数据不是0,第二个就是要它等于17LL,也就是用64位的数据去表示这个17,而64位的17我们正好就可以用p64(),也就不需要我们自己换算
再前13个dword随便填填(为什么是dword点一下var就知道了)
至此就可以构造payload: