PWN-ROP

题目:给出PWN2文件和libc

在这里插入图片描述
发生栈溢出。

查看:

文件类型及其保护方法
在这里插入图片描述
找system和bin_sh都么有
在这里插入图片描述
在这里插入图片描述
所以只能利用libc文件

理论

在这里插入图片描述
在这里插入图片描述

思路

由于libc的延迟绑定机制,需要选择已经==执行过的函数==作为泄漏函数,这里我们选择put()//输出一句话

计算偏移量=92
但是在gdb里得出offset=91,这是错的。
在这里插入图片描述
在ida中查看main函数的汇编代码的一部分,开辟了58h个空间,加上esp的4个一共5C个,也就是十进制92,与上面得出错误的相差1。不知道为什么。。
在这里插入图片描述

构造payload1:==目的:== 得到puts的地址:puts_addr

1
2
payload=
填充满偏移量的长度 + puts的plt地址_p32(puts_plt) + main函数的地址_p32(main) + puts的got地址_p32(puts_got)

==填充满偏移量的长度== =92=5C h ,下同。
==p32(main)== 在ida中查看=0x08048519
在这里插入图片描述
==p32(puts_plt):==
puts_plt=elf.plt['puts']
==p32(puts_got):==
puts_got=elf.got['puts']

//这里elf的用法因为:elf=ELF('./pwn2')

==puts_addr:==
puts_addr=u32(p.recv([0:4]))

打印地址用到的代码是print "puts_addr:"+hex(puts_addr),下同。

构造payload2 ==目的:== 由puts的地址推导出system和’/bin/sh’的地址

1
2
payload=
填充满偏移量的长度 +system地址_p32(system) + 4个‘b’ + '/bin/sh'地址_p32(bin_sh)

==p32(system):==

1
2
3
4
puts_libc=libc.symbols['puts']
libc_base=puts_addr-puts_libc
sys_libc=libc.symbols['system']
sys_addr=libc_base+sys_libc //至此得到了p32(sys_addr)

==p32(bin_sh):==

1
bin_sh_addr=libc_base+next(libc.search('/bin/sh'))      ///至此得到了p32(bin_sh_addr)

//这里libc的用法因为:libc=ELF('libc.so.6')

脚本

在这里插入图片描述
脚本是正确的,但是python 脚本.py之后报错:是最后一句interactive的问题,在别人电脑上就又没有这个问题。。。

/br
/br
/br
/br
一些没用的图:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Github博客——别再fork了,自己新建也不难。

我参考的链接,写的比较详细了
具体步骤和一些细节:
1、下载==node.js==,==git==
建议把这两个东西放到一个文件夹里,按以上顺序下载并安装。
在cmd里面直接输入node -vnpm -v显示版本号说明node.js有了
cmd输入git --version同样出现版本号则git也有了
2、安装==hexo==
在刚才新建的文件夹里单独搞一个文件夹来安装hexo,cmd需要cd到hexo的文件夹。
输入npm install hexo -g开始安装Hexo
输入hexo -v检查hexo是否安装成功
输入hexo init初始化该文件夹
输入npm install安装所需要的组件
输入hexo g首次体验Hexo
输入hexo s在浏览器打http://localhost:4000/,这就是你的博客了
3、将Hexo与Github page联系起来
注册==Github==账号,新建一个博客仓库
在你hexo文件夹的空白处单击鼠标右键,点击Git Base Here,输入git config --global user.name "name"git config --global user.email "email@xxx"来配置自己的用户名和邮箱
输入cd ~/.ssh检查是否有.ssh的文件夹
没有的话输入ssh-keygen -t rsa -C “email@xxx”
输入eval "$(ssh-agent -s)"
输入ssh-add ~/.ssh/id_rsa
在电脑的C:\Users\Administrator.ssh找到id_rsa.pub文件
Github-setting-new ssh key把上述文件内容粘进去,名为blog
输入ssh -T git@github.com,出现Hi~,则添加ssh成功
在这里插入图片描述
重做系统之后又搞了一遍!
4、配置==Deployment==
==我不知道我这步有没有问题!==
打开hexo文件夹,里面有_config.yml,在最后加上两行repository和branch
现在就可以写博客了
怎么写方便呢
你可以使用hexo的编辑器
我是在其他平台上先写,然后导出.md文档,粘到你hexo文件夹下的source/_posts文件夹
打开cmd,cd到hexo下
输入npm install hexo-deployer-git --save
输入hexo d -g
等个几分钟进你github.io的地址就能看到更新的博客了
5、为了其他一些乱七八糟事情的方便最好了解markdown的语法
以及在终端新建博客要输入hexo new post “博客名”
6、Jekyll可以在线写了发;我搞的是Hexo,发的时候麻烦,但是具有很多优越性。

PWN-bof

题目给出一个PWN文件和两个netcat端口

解题步骤

1、ubuntu

->下载PWN文件,找到文件所在位置打开终端-> file命令
查看文件
看到是一个32位的ELF文件

2、回win10 ,分析漏洞类型

把pwn文件拖进32位的ida
拖进
查看main函数的反汇编代码
在这里插入图片描述
sub_8048573
在这里插入图片描述
用到read函数,看一下汇编代码
在这里插入图片描述

3、解题方法

构造payload=’a’个数+返回地址,有/bin/sh的要加上’b’个数+/bin/sh的地址
a的个数为开辟的28个空间+4个ebp的空间(32位)
返回地址:发现main函数可以直接调用system函数(sub_ 804854A),在ida中找到plt的system的起始地址。

在这里插入图片描述
b的个数是4
在ubuntu里查看/bin/sh的地址
在这里插入图片描述
则payload=’a’32+p32(add1)+’b’4+p32(add2)

4、运行脚本

在ubuntu中新建一个.py文件,按以下格式写脚本。
在这里插入图片描述
在虚拟机调试,可以查看文件及flag
在这里插入图片描述

《软件安全》

一、基础知识

CPU:控制器、运算器(算数,逻辑单元)、寄存器、内部总线。其中寄存器存放了(计算机的)操作系统的关键的==数据结构==的入口,这些信息是==软件漏洞==和==恶意代码==分析的基础信息。因此==寄存器结构==是我们分析的重点。

一-1)IA-32的CPU寄存器

指令指针寄存器 EIP

存储当前执行的指令的地址,系统进行寻址-取指令-译码-执行

通用数据寄存器

EAX-EDX用于存储数据和运算结果;16位:AX-DX;1-8:AL;9-16:AH
ECX:存储循环处理指令的循环次数
EAX,EDX:乘除法隐含操作数

地址指针寄存器 ESP(顶) EBP(底)
变址指针寄存器 ESI(源操作数) EDI(目的)
段寄存器

代码段CS 数据段DS 堆栈段SS 附加段ES FS GS

标志位寄存器 控制寄存器

一-2)IA-32的CPU的工作模式

CPU初始化:实模式, PE==0 ;不支持多线程

操作系统启动:PE==1,开始保护模式;内存分页,权限分级,多线程
戳111111111

二)反汇编

1确定反汇编的代码区域,区分程序的代码段和数据段
2读取程序代码入口的==二进制机器指令(机器码)==,通过查表找出与之对应的汇编语言助记符,看指令状态提取操作数。
3对其汇编语言等价形式进行格式化,输出反汇编代码

三)windows操作系统基础

可移植的可执行文件PE文件(.exe .com .dll .ocx .sys)组成

DOS头
PE头:主要定位信息 IMAGE_NT_HEADER

Signature;FileHeader;OptionalHeader三个字段

区块表:结构数组:关联的区块信息,位置长度等
区块数据:代码区块,导入表,导出表

二、程序切片

一)