jarvisoj_level0
拿到题之后先在命令行里查看文件,是一个64位的。把他放在64位的ida下f5看一下伪代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hTJ57A2u-1609934613627)(C:\Users\li\Desktop\临时\QQ截图20210106184228.png)]
其实只是一句hello world,没有什么太多信息。可以看一下返回的vulnerable_function函数里是什么。然后逐个检查,最后看见了这个callsystem函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-amSGiGpL-1609934613629)(C:\Users\li\Desktop\临时\QQ截图20210106190358.png)]
现在可以确定,通过栈溢出把返回的地址改成callsystem的地址就好
格式:垃圾文件填满缓冲区(一堆a就行)+ callsystem的地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rtOfAN2m-1609934613631)(C:\Users\li\Desktop\临时\第一个脚本.png)]
第二行在建立远程链接,第三行是需要128个a覆盖buf,这里我们用128个A覆盖buf,用p64打包这个函数地址。后面就是利用漏洞发入端口了成功了之后拿flag就好。
关于栈溢出
函数运行会开辟一个栈空间,在函数执行内部指令的时候我们是无法拿到函数控制权的。但是在函数发生调用或结束调用时,程序控制权会在函数状态之间发生跳转,这是就可以通过修改函数状态来进行攻击。
当缓冲区对输入不设限制时(例如C语言中的gets函数),导致输入的信息覆盖了函数返回的地址。在这时如果覆盖了地址的消息同样是一个有效的地址,让程序跳转至攻击指令那么就可以实现攻击程序了。
让程序跳转至攻击指令那么就可以实现攻击程序了。