每日3道PWN(第一天)

环境准备

我现在用的是kali

现阶段工具:checkesc、IDA、比较完善的python环境

下载工具的话,我这里不提供了

buuctf——test_your_nc1

参考wp:

BUUCTF PWN-----第1题:test_your_nc_buuctf test_your_nc-CSDN博客

查看的资料:

checksec安装和简单介绍 - LuoSpider - 博客园 (cnblogs.com)

因为啥也不会,先按大佬思路来

checeksec 

前期先学这几个参数

1.Relro:Full Relro(重定位表只读)
  Relocation Read Only, 重定位表只读。重定位表即.got 和 .plt 两个表。
2.Stack:No Canary found(能栈溢出)
  Canary, 金丝雀。金丝雀原来是石油工人用来判断气体是否有毒。而应用于在栈保护上则是在初始化一个栈帧时在栈底(stack overflow 发生的高位区域的尾部)设置一个随机的 canary 值,当函数返回之时检测 canary 的值是否经过了改变,以此来判断 stack/buffer overflow 是否发生,若改变则说明栈溢出发生,程序走另一个流程结束,以免漏洞利用成功。 因此我们需要获取 Canary 的值,或者防止触发 stack_chk_fail 函数,或是利用此函数。
3.NX: NX enable(不可执行内存)
  Non-Executable Memory,不可执行内存。了解 Linux 的都知道其文件有三种属性,即 rwx,而 NX 即没有 x 属性。如果没有 w 属性,我们就不能向内存单元中写入数据,如果没有 x 属性,写入的 shellcode 就无法执行。所以,我们此时应该使用其他方法来 pwn 掉程序,其中最常见的方法为 ROP (Return-Oriented Programming 返回导向编程),利用栈溢出在栈上布置地址,每个内存地址对应一个 gadget,利用 ret 等指令进行衔接来执行某项功能,最终达到 pwn 掉程序的目的。
4.PIE: PIE enable(开启ASLR 地址随机化)
  Address space layout randomization,地址空间布局随机化。通过将数据随机放置来防止攻击。

对了,还能看出是64位的

我简单理解就是No Canary found(可以使用栈溢出)这个关闭,就用栈溢出思路解题

NX: NX enable(不可执行内存)开了NX防护(堆栈不可执行),简单解释就是存入的数据不能被执行

PIE: PIE enable(开启ASLR 地址随机化)这个就说明能不能可以随意调用地址(可以是函数的地址)来解题

这一题就是

64位。能用栈溢出。不能执行内存,就是里面已经有的缓存数据。不能随意地址转换

64位IDA打开后就是这样,可以看见/bin/sh,双击

找到函数所在地址(位置),main函数,我们进行查看

双击main函数,按f5

就是system()的执行漏洞,用linux直接nc就行

nc node4.buuoj.cn 29096

问题

问:为什么直接nc buuctf的域名+端口就可以进行命令执行?

nc 192.168.10.1 8080,这就相当于进行正向反弹shell

对方主机开放了8080端口,你(攻击机)主动去连接他,他(目标靶机)执行shell,生成一个简单的交互环境

我们来看一下这个system('/bin/sh')的作用(我少加了一个分号,修改之后就好了)

问:什么是正向反弹shell?和(反向)反弹shell的区别?

正向反弹shell(Reverse Shell): 在正向反弹shell攻击中,受害者的系统会连接到攻击者控制的系统上。简单来说,受害者的系统会发起对攻击者系统的连接,并将一个交互式shell或命令执行权限转移给攻击者,这样攻击者就能够远程控制受害者的系统。

反向反弹shell(Bind Shell): 与正向反弹shell相反,在反向反弹shell攻击中,攻击者的系统会连接到受害者的系统上。攻击者会在自己的系统上启动一个监听程序,然后等待受害者系统主动连接过来。一旦连接建立,攻击者就可以远程控制受害者的系统。

给你的pwn文件就是靶机的漏洞利用点

buuctf——rip

参考wp:

”BUUCTF之pwn题解(一些栈题+程序分析)_buuctf pwn-CSDN博客

CTF buuoj pwn-----第2题:rip_buuoj rip-CSDN博客

初学pwn-BUUCTF(rip)_buuctf rip-CSDN博客

按思路来,第一步checksec一下

tip:可以直接checksec文件夹哦,更方便。

命令是checksec --dir=pwn题目

结论:64位。有栈溢出。可以执行内存。可以地址转换。

嘶~真杂,打开看看,按f5

代码大概意思:

定义了一个变量数组s,大小15

接着,程序通过 gets 函数从你的(标准)输入中读取一行字符串,并将其存储在 s 数组中

输出s

结论:只要是变量,就可以栈溢出

问:什么是栈溢出?

ai回答:

栈溢出是指向栈中写入了超出限定长度的数据,溢出的数据会覆盖栈中其它数据,从而影响程序的运行。栈溢出是一种常见的安全漏洞,攻击者可以利用栈溢出漏洞来执行恶意代码。攻击者通常会向程序中输入超出预期的数据,从而导致栈溢出。为了防止栈溢出,可以使用一些技术,例如堆栈保护、地址随机化等。

下面是一个栈溢出的例子,假设有一个函数,它接收一个字符串作为参数,并将其复制到一个缓冲区中:

void copy_string(char *dest, char *src) {
    char buffer[10];
    strcpy(buffer, src);
    strcpy(dest, buffer);
}

如果传递给该函数的字符串长度超过了10个字符,那么就会发生栈溢出。攻击者可以利用这个漏洞来执行恶意代码,例如覆盖函数返回地址,从而控制程序的执行流程。

双击箭头指的s

可以发现是15个空间大小,也可以从下面的0x000000000F看出是15个空间大小

我们再去查一下漏洞利用的点,就是栈溢出后,执行什么东西来得到flag

shift+f12查看string window

tip:在IDA中使用Shift+F12快捷键可以打开字符串窗口,该窗口用于显示程序中包含的所有字符串。字符串窗口可以帮助你查看和分析程序中的字符串常量。

双击进入

结论:使用栈溢出,填充s数组,使其导致栈溢出的漏洞,溢出的执行的东西就是fun函数,也就是需要我们溢出后指向fun函数的地址,这个最后的地址也叫返回地址

0x401186就是地址

或者

构造exp

from pwn import *
nc=remote("node4.buuoj.cn",29857)
# 第一种写法
# payload = 'a' * 23 + p64(0x401185).decode("iso-8859-1") +  p64(0x401186).decode("iso-8859-1")#A和a都是随意的

# 第二种写法
payload = b'a'*23+p64(0x40118A)     #输入payload来进行操作以拿到程序的shell
# 其中 b是bytes的缩写,是bytes类型,p64是打包函数,把地址转换为b类型的二进制形式

nc.sendline(payload)
nc.interactive()
  • 0x40118A的由来
    在IDA中,打开fun函数, 可看到fun()函数开始的地址为0x401186, "/bin/sh"指令执行的地址为0x40118A

两种方法:

1.标红的

2.右键悬着text view

  • p64()函数是将字符串转二进制流

两种方法都可以,已经尝试

第一个方法很有意思,可以研究研究

第二个方法是直接指向了system函数

第一个方法是指向了fun这个函数

但是那个博主没成功,修改后,给出了这样的解释,

执行脚本之后,发现并没有获得shell权限。遇到这个问题,就很奇怪,明明是没有什么问题,很简单的一个练习。只能求助于百度。搜索之后发现64位系统中,需要地址对齐之后才可以执行system。这里需要在fun函数的地址之前加一个retn的地址,在IDA-view里随便找一个retn的指针都可以。具体的原理还没理解,不过这样可以解决地址对齐的问题。

意思就是401186不动,再加一个就行,但是经过我的尝试,这个两个地址必须符合几个条件

401186必须在最后,401185修改的区间在40118[5-8|A-B],因为只有

问题

问:什么是偏移量?

偏移量(Offset):偏移量是指变量或数据相对于某个基地址的位置偏移量。它表示了变量或数据在内存中的位置

问:为什么15个空间大小后还要+8个?代码片段中多出的8个大小的空间是哪一部分?


在main函数中,双击s,s占据了15个db,再加上"s"[saved registers]的8个db,一共23个db.

根据代码片段中的表示方式,我们可以看到 +0000000000000000 s 后面的 db 8 dup(?) 定义了一个名为 r 的字符数组,并且分配了8个未初始化的元素。所以,这8个大小的空间是属于字符数组 r 的。

warmup_csaw_2016

wp参考:

[BUUCTF-pwn]——warmup_csaw_2016-CSDN博客

buuctf|warmup_csaw_2016 1_嚚_瘖的博客-CSDN博客

[BUUCTF]PWN------warmup_csaw_2016_pwn warmup_csaw_2016_HAIANAWEI的博客-CSDN博客

Buuctf——warmup_csaw_2016 - mu'a - 博客园 (cnblogs.com)

从题海中入门(三)warmup_csaw_2016 - FreeBuf网络安全行业门户

checksec一下

没有说明位数,但是用32位打开报错提示用64位打开.有栈溢出

分析main代码

看最后的return,发现最后可以被溢出的是变量v5,且该参数没有没做处理。

双击查看v5,得出偏移量40+8

我敲,感谢大佬,我陈哥,pwn神教我认识偏移量

我来回答你为什么要加8,首先v5的总偏移量是0x40,这是ida算好的

然后请看图

tip:

64位的pwn文件rbp是0x8,也就是8

32位的是0x4,也就是4

v5为了溢出,要先填满0x40,然后加上rbp的这个8,就到了ret,ret就是用来指向返回的地址,然后你就指向system的哪个函数地址就行了

tip:

RBP 寄存器的值指向当前函数的栈帧底部。不好理解,就按上面我写的理解就行。

RET 是指令中的缩写,代表函数返回(return)指令。当函数执行完毕时,执行 RET 指令将控制权返回给调用该函数的代码。

shift+f12看到cat flag.txt

意思就是说,不在有执行环境,变成了直接找到flag,刚好也能栈溢出,那我们直接只想这个地址就行

双击cat flag.txt他找到所存在的函数

双击进入函数按f5

和上一题一样

发现0x400611是压参数的地方,将其作为返回地址

tip:压参数

我的理解是:将参数压入栈,栈是一个小的存储空间,用0x400611标识

构造exp

from pwn import *
nc=remote("node4.buuoj.cn",29727)
# 第一种写法
#payload = 'a' * 0x48 + p64(0x400611).decode("iso-8859-1") +  p64(0x400611).decode("iso-8859-1")
#payload = 'a' * 0x48 + p64(0x400611).decode("iso-8859-1")#这个也可以

# 第二种写法
payload = b'a'*(0x40+8)+p64(0x400611)     #输入payload来进行操作以拿到程序的shell,0x40+8=0x48
# # 其中 b是bytes的缩写,是bytes类型,p64是打包函数,把地址转换为b类型的二进制形式

nc.sendline(payload)
nc.interactive()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/217639.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++作业1

提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 要求使用C风格字符串完成 代码&#xff1a; #include <iostream>using namespace std;int main() {string str;cout << "请输入一个字符串:" &…

sagment-anything官方代码使用详解

文章目录 一. sagment-anything官方例程说明1. 结果显示函数说明2. SamAutomaticMaskGenerator对象(1) SamAutomaticMaskGenerator初始化参数 3. SamPredictor对象(1) 初始化参数(2) set_image()(3) predict() 二. SamPredictor流程说明1. 导入所需要的库2. 读取图像3. 加载模型…

IntelliJ IDEA的下载安装配置步骤详解

引言 IntelliJ IDEA 是一款功能强大的集成开发环境&#xff0c;它具有许多优势&#xff0c;适用于各种开发过程。本文将介绍 IDEA 的主要优势&#xff0c;并提供详细的安装配置步骤。 介绍 IntelliJ IDEA&#xff08;以下简称 IDEA&#xff09;之所以被广泛使用&#xff0c;…

Kubernetes存储搭建NFS挂载失败处理

搞NFS存储时候发现如下问题&#xff1a; Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 5m1s default-scheduler Successful…

【web安全】RCE漏洞原理

前言 菜某的笔记总结&#xff0c;如有错误请指正。 RCE漏洞介绍 简而言之&#xff0c;就是代码中使用了可以把字符串当做代码执行的函数&#xff0c;但是又没有对用户的输入内容做到充分的过滤&#xff0c;导致可以被远程执行一些命令。 RCE漏洞的分类 RCE漏洞分为代码执行…

如何基于Akamai IoT边缘平台打造一个无服务器的位置分享应用

与地理位置有关的应用相信大家都很熟悉了&#xff0c;无论是IM软件里的位置共享或是电商、外卖应用中的配送地址匹配&#xff0c;我们几乎每天都在使用类似的功能与服务。不过你有没有想过&#xff0c;如何在自己开发的应用中嵌入类似的功能&#xff1f; 本文Akamai将为大家提…

C语言中如何取一串比特中的特定位的比特

#include <iostream> #include <bitset> using namespace std; /* 向右的移位操作相当于丢掉最后的几位&#xff0c;然后剩下的位数进行“与”运算即可。 */ int main() {int a 0x2FB7; //0x2FB70010 1111 1011 0111char end3 (a >> 4) & 0x07; //取a…

从零开始搭建博客网站-----框架页

实现效果如下 发布的功能还没有实现&#xff0c;仅仅实现了简单的页面显示 关键代码如下 <template><div class"layout"><el-header class"header"><div class"logo">EasyBlog</div></el-header><el-c…

室内外融合便携式定位终端5G+UWB+RTK

一、介绍 便携式定位终端主要用于提供高精度的位置数据&#xff0c;支持室内UWB定位和室外北斗系统定位功能&#xff0c;支持5G公网和5G专网通信功能&#xff0c;便携式定位终端中超宽带(UWB)和实时动态(RTK)技术的集成代表了精确位置跟踪方面的重大进步。这款UWBRTK便携式定位…

SpringBootWeb案例_02

Web后端开发_05 SpringBootWeb案例_02 1.新增员工 1.1需求 在新增用户时&#xff0c;我们需要保存用户的基本信息&#xff0c;并且还需要上传的员工的图片&#xff0c;目前我们先完成第一步操作&#xff0c;保存用户的基本信息。 1.2 接口文档 基本信息 请求路径&#xff…

springboot + vue 企业级工位管理系统

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

【23-24 秋学期】NNDL 作业13 优化算法3D可视化

编程实现优化算法&#xff0c;并3D可视化 1. 函数3D可视化 分别画出和的3D图 NNDL实验 优化算法3D轨迹 鱼书例题3D版_优化算法3d展示-CSDN博客 2.加入优化算法&#xff0c;画出轨迹 分别画出和的3D轨迹图 从轨迹、速度等多个角度讲解各个算法优缺点 NNDL实验 优化算法3D轨…

Abaper入门实战篇 ——从 0 - 1 完成一个ALV

SAP ABAP 顾问&#xff08;开发工程师&#xff09;能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读516次。目标&#xff1a;基于对SAP abap 顾问能力模型的梳理&#xff0c;给一年左右经验的abaper 快速成长为三年经验提供超级燃料&#xff01;https://blog.csdn.net/j…

基于腾讯云手把手教你搭建网站

目录 前言前期准备工作具体搭建网站番外篇&#xff1a;网站开发及优化结束语 前言 在当今数字化时代浪潮之下&#xff0c;作为开发者拥有一个属于自己的网站是非常有必要的&#xff0c;也是展示个人形象、打造影响力和给别人提供服务的重要途径。网站不仅可以作为打造自己影响…

算法通关村-----跳跃游戏问题

跳跃游戏 问题描述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 详见…

MySQL笔记-第02章_MySQL环境搭建

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第02章_MySQL环境搭建1. MySQL的卸载步骤1&#xff1a;停止MySQL服务步骤2&#xff1a;软件的卸载步骤3&#xff1a;残余文件的清理步骤4&am…

【网络安全技术】密钥管理

一、分级密钥概念 典型的密钥分级分为三级&#xff0c;三级密钥就是一次会话的session key&#xff0c;用来加密通信&#xff0c;所以通常使用对称密钥。 二级密钥就是分发三级密钥的密钥&#xff0c;用来加密三级密钥来分发三级密钥。 一级密钥就是分发二级密钥的密钥&…

Linux系统与python常用密码的加密解密方法

Linux系统与python常用加密&解密方法 文章目录 Linux系统与python常用加密&解密方法Linux系统加密解密方法一、openssl二、示例1、加密规则语法2、解密语法规则3、shell脚本 Python密码加密方法一、Base64加密1、加密2、解密 二、哈希算法加密三、Fernet对称加密算法1、…

运维03:LAMP

黄金架构LAMP 什么是LAMP LAMP是公认的最常见&#xff0c;最古老的黄金web技术栈 快速部署LAMP架构 #停止nginx&#xff0c;并且把nginx应用卸载了 systemctl stop nginx yum remove nginx -y#关闭防火墙 iptables -F #清空防火墙规则&#xff0c;比如哪些请求允许进入服…

7. 系统信息与系统资源

7. 系统信息与系统资源 1. 系统信息1.1 系统标识 uname()1.2 sysinfo()1.3 gethostname()1.4 sysconf() 2. 时间、日期2.1 Linux 系统中的时间2.1.1 Linux 怎么记录时间2.1.2 jiffies 的引入 2.2 获取时间 time/gettimeofday2.2.1 time()2.2.2 gettimeofday() 2.3 时间转换函数…