20145329 《网络对抗技术》PC平台逆向破解
shellcode注入
实践是在非常简单的一个预设条件下完成的:
(1)关闭堆栈保护
(2)关闭堆栈执行保护
(3)关闭地址随机化
(4)在x32环境下
(5)在Linux实践环境
shellcode概念:
shellcode是一段用来获取交互式shell的机器指令
- 设置堆栈可执行并关闭地址随机化
- 构造要注入的shellcode
'print "\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\x4\x3\x2\x1\x00"' > input_shellcode
\x4\x3\x2\x1为大致估计的数据溢出并将覆盖到堆栈上的返回地址的位置,此处用\x4\x3\x2\x1做标识后面可以据此方便找到并它改为这段shellcode的地址。
打开一个终端注入这段shellcode,此处执行时限不按下回车,等后面调试时再按运行
打开另一终端,ps -ef | grep pwn1:将上一步骤中运行的进程信息显示出来
使用GDB调试进程,用foo函数进行反汇编,查看汇编代码,找到ret
设置断点,继续执行,在另一终端按下回车
查看ESP寄存器的情况
(从图中可以看出esp的值为0x01020304,是我们构造的shellcode中的一部分,此位置即是执行完foo函数后的返回地址,后面是我们注入的shellcode代码,我们需修改0x01020304的值使它指向shellcode的首地址,shellcode地址为紧挨着的地址0xffffd330)接着执行gdb,发生溢出
根据上面调试得出的shellcode地址,重新注入shellcode,成功
体会
指导里面设置了一个坑,让我在实验过程中思考了更多,看指导书,让后阅读别人的博客,最后自己对整个过程的目的、过程、以及为什么掌握了以后,实验就变成了一个结果的学习结果的呈现而不再是学习的过程。
Return-to-lib攻击深入
介绍
return-to-libc 攻击是一种缓冲区溢出的变体攻击。它不需要一个栈可以执行,甚至不需要一个 shellcode。而是我们让漏洞程序调转到现存的代码(如库函数)来实现攻击。
进入32位linux环境,将地址随机化关闭,并且把/bin/sh指向zsh:解除/bin/bash通过使shell程序放弃自己的root权限来防范缓冲区溢出攻击及其他利用shell程序的攻击的防护措施。
编辑漏洞程序“20145329retlib.c”文件,保存在/tmp 目录下
编译“20145329retlib.c”文件,编译时使用–fno-stack-protector 关闭gcc编译器中阻止缓冲区溢出的保护机制。并chmod设置 SET-UID。
编辑读取环境变量的程序“20145329getenvaddr.c”文件
编译
编辑攻击程序“20145329exploit.c”文件,保存到/tmp目录下,0x11111111、0x22222222、0x33333333分别是BIN_SH、system、exit的地址,下面具体执行指令获得实际地址
getenvaddr 程序获得 BIN_SH 地址(0xffffde21)
gdb获得system(0xf7e33850)和exit(0xf7e276c0)地址
修改攻击程序代码里面的BIN_SH、system、exit的地址,修改为上一步中获得的内存地址
删除刚才编译的 20145329exploit 程序和 badfile 文件,重新编译修改后的 20145329exploit.c
运行攻击程序,生成badfile文件,再运行漏洞程序,获得root权限,攻击成功
bin文件夹下删除sh,并将/bin/sh 重新指向/bin/bash,运行攻击程序和漏洞程序,攻击成功,获得 root 权限
20145329 《网络对抗技术》PC平台逆向破解的更多相关文章
- 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验
20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...
- 2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解
2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解 目录 一.逆向及Bof基础实践说明 二.直接修改程序机器指令,改变程序执行流程 三.通过构造输入参数,造成BOF攻击,改变程 ...
- 20145312 《网络对抗》PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验
20145312 <网络对抗>PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验 注入shellcode 实验步骤 1. 准备一段Shellcode 2. ...
- 20155305《网络对抗》PC平台逆向破解(二)
20155305<网络对抗>PC平台逆向破解(二) shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 ...
- 20155311《网络对抗》PC平台逆向破解(二)
20155311<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...
- 20145221《网络对抗》PC平台逆向破解
20145221<网络对抗>PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户 ...
- 20155307《网络对抗》PC平台逆向破解(二)
20155307<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...
- 20145201李子璇《网络对抗》PC平台逆向破解
20145201<网络对抗>PC平台逆向破解 准备阶段 下载安装execstack. 获取shellcode的c语言代码 设置堆栈可执行 将环境设置为:堆栈可执行.地址随机化关闭(2开启, ...
- 20145219《网络对抗》PC平台逆向破解
20145219<网络对抗>PC平台逆向破解 shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 (1) ...
- 20145240《网络对抗》PC平台逆向破解_advanced
PC平台逆向破解_advanced shellcode注入 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外,Shellcode一般是 ...
随机推荐
- 96、facebook Fresco框架库源使用(转载)
各个属性详情:http://blog.csdn.net/y1scp/article/details/49245535 开源项目链接 facebook Fresco仓库:git clone https: ...
- devstack screen 详解
n my previous blog i discussed how to install devstack based openstack. Now if I need to restart ind ...
- synchronized同步语句块
用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个长时间的任务,那么B线程则必须等待比较长时间.在这样的情况下可以使用synchronized同步语句块来解 ...
- LeetCode——Integer to Roman
Description: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the r ...
- IOS中使用轻量级数据库
IOS中使用轻量级数据库 目录 概述 IOS中的轻量级数据库 sqlite的方法 数据库的实用操作 第三方类库 FMDatabase 概述 IOS中的轻量级数据库 sqlite的方法 sqlite3 ...
- .net asp iis服务器如何让外部访问自己的网站
1.控制面板-防火墙-高级设置-入站规则-右侧的BranchCache内容检索,右键启用规则.
- js对字符串进行加密和解密方法!
在做一些微信小程序,或混合 app 的时候,或者是考虑到一些 JS 数据安全的问题.可能会使用到 JS 对用户信息进行缓存. 例如在开发:微信小程序对用户进行加密缓存,开发混合APP对用户信息进行加密 ...
- PHP中文字数限制:中文字符串截取(mb_substr)
一.中文截取:mb_substr() mb_substr( $str, $start, $length, $encoding ) $str,需要截断的字符串 $start,截断开始处,起始处为0 $l ...
- 【ES6】001---module模块------【巷子】
001.前言 什么是模块化开发? 为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了.,下面是某个网站的js引用情况 怎么会有这么多js文件 ...
- asp.net mvc(一) ----------简单封装成通用的List<T>集合
asp.net mvc(一) 这些天开始学习asp.net mvc,用传统的asp.net已经快四的年了,刚开始接触asp.net mvc确认感觉有点不适应,主要体现在asp.net mvc的实现上. ...