pwn溢出做题思路:
理论参考大佬级别入门博客:https://www.jianshu.com/p/187b810e78d2
实战参考博客:https://blog.youkuaiyun.com/qq_38204481/article/details/80099622
相关理论知识:https://www.cnblogs.com/ichunqiu/p/11196219.html
。
。
1.先nc目标的端口,运行程序,查看和记录程序的作用。
将文件放进Linux下,然后file 文件查看文件是动态的链接,
还是静态的链接;是64位,还是32位的。
2.提高得到二进制文件的权限,再然后查看程序的保护措施:checksec+文件名
NX是文件堆栈不可执行,Stack是栈溢出保护
3.再运用相对应位数的ida,(特别注意可能存在ida版本型号的不对,无法打开文件的问题),
对程序反编译,先查找关键的字符串,然后再对程序运用f5反编译主函数,找到可以利用的漏洞。
语句查看{cyclic -l xxxxxxxxxxx(地址)},cycylic 100,还gdb ./
例如:溢出的,首先先找到可以利用溢出的代码,然后计算相对应得栈的大小,
然后构造对应的payload,例如:payload = 'a' * 0x14 + 'bbbb' + p32(success_addr)
4.剩下的就是经验了,和相关的知识,多刷点题,总结遇见的知识点。
。
。
gdb ./文件名
chomd +x 名字
pattern_create 256
pattern_offset 地址
from pwn import*
p= process(“程序地址”) 执行程序
p.sendline(内容) 向程序发送指定内容
p.interactive() 切换到用户交互模式
p32(把地址拆成32位地址形式)
。
。
。
接触pwn才两个月的我:
个人觉得学pwn首先应该是对LEA指令的学习,也就是那些mov指令、call指令、xor指令、cmp指令,jnz指令等,这些LEA指令的作用有个了解,也应该对栈和堆的知识有所了解。然后就是对编译过程的了解,这样就更好的发现程序的漏洞。然后再注重实战,多做pwn题,复现1day漏洞,多复现漏洞,对常见漏洞原理有个了解,为以后挖漏洞埋下伏笔。也要善于利用工具,但还是要懂原理,为啥会有漏洞,啥是漏洞。
。
。
。
后续所学:
从c到可执行文件
Intel 和 AT&T 语法
shellcode 编写与利用
file,checksec
栈、函数调用、寄存器
栈溢出
gdb动态程序分析