Linux pwn入门教程(2)——shellcode的使用,原理与变形

【Writeup】i春秋 Linux Pwn 入门教程_CSAW Quals CTF 2017-pilot Linux pwn入门教程(2)——shellcode的使用,原理与变形 0x01 解题思路 查看文件信息并试运行 没有开保护,显示有RWX段。shellcode必须在具有R和X属性的内存空间上才能执行; 执行时输出了一个地址0x7ffd426b9ca0; 有用户输入点。 拖入IDA 64bits,F5查看 main 如图所示,红框处分别为输出地址和读取用户输... 阅读详情

作者:Tangerine@SAINTSEC

0×00 shellcode的使用

在上一篇文章中我们学习了怎么使用栈溢出劫持程序的执行流程。为了减少难度,演示和作业题程序里都带有很明显的后门。然而在现实世界里并不是每个程序都有后门,即使是有,也没有那么好找。因此,我们就需要使用定制的shellcode来执行自己需要的操作。

首先我们把演示程序~/Openctf 2016-tyro_shellcode1/tyro_shellcode1复制到32位的docker环境中并开启调试器进行调试分析。需要注意的是,由于程序带了一个很简单的反调试,在调试过程中可能会弹出如下窗口:

image.png

此时点OK,在弹出的Exception handling窗口中选择No(discard)丢弃掉SIGALRM信号即可。

与上一篇教程不同的是,这次的程序并不存在栈溢出。从F5的结果上看程序使用read函数读取的输入甚至都不在栈上,而是在一片使用mmap分配出来的内存空间上。

image.png通过调试,我们可以发现程序实际上是读取我们的输入,并且使用call指令执行我们的输入。也就是说我们的输入会被当成汇编代码被执行。

image.pngimage.png

显然,我们这里随便输入的“12345678”有点问题,继续执行的话会出错。不过,当程序会把我们的输入当成指令执行,shellcode就有用武之地了。

首先我们需要去找一个shellcode,我们希望shellcode可以打开一个shell以便于远程控制只对我们暴露了一个10001端口的docker环境,而且shellcode的大小不能超过传递给read函数的参数,即0×20=32.我们通过著名的shell-storm.org的shellcode数据库shell-storm.org/shellcode/找到了一段符合条件的shellcodeimage.png21个字节的执行sh的shellcode,点开一看里面还有代码和介绍。我们先不管这些介绍,把shellcode取出来image.png使用pwntools库把shellcode作为输入传递给程序,尝试使用io.interactive()与程序进行交互,发现可以执行shell命令。image.png

当然,shell-storm上还有可以执行其他功能如关机,进程炸弹,读取/etc/passwd等的shellcode,大家也可以试一下。总而言之,shellcode是一段可以执行特定功能的神秘代码。那么shellcode是怎么被编写出来,又是怎么执行指定操作的呢?我们继续来深挖下去。链接文字

0×01 shellcode的原理

这次我们直接把断点下在call eax上,然后F7跟进

030759ir9ybzss0a6k900v.png可以看到我们的输入变成了如下汇编指令

030804zzmauocm2o8scjw8.png

我们可以选择Options->General,把Number of opcode bytes (non-graph)的值调大

030813couy5dz566y16jdj.png

会发现每条汇编指令都对应着长短不一的一串16进制数。

从注入到Shellcode:二进制漏洞利用实战指南 在软件安全领域,注入是一种常见攻击手法,其核心原理是通过输入恶意数据或代码,改变程序的正常执行流程。从Web应用的SQL注入到底层系统的代码注入,其技术价值在于揭示了程序对输入验证不足的安全缺陷。在二进制安全与漏洞利用(BinExp)场景中,这一原理演变为更直接的Shellcode注入。Shellcode是一段位置无关的机器码,通过系统调用与操作系统内核交互,实现进程控制、权限提升等操作。其高效编写需遵循避免空字节、缩短长度等黄金法则,并常通过编码变形来规避检测。应用场景广泛,包括渗透测试、CTF竞赛及理解 阅读详情

相关推荐

CTF PWN入门:从栈溢出到堆漏洞的实战攻防技术解析

二进制安全是网络安全的核心领域,涉及程序底层的内存管理与执行控制。其基本原理在于程序运行时数据与指令在内存中的布局存在安全边界,当输入数据超出预定缓冲区时,可能覆盖关键控制数据,从而改变程序执行流程。这项技术的核心价值在于揭示软件深层次缺陷,提升系统安全防护能力,广泛应用于漏洞挖掘、安全评估和CTF竞赛等场景。在CTF PWN挑战中,参赛者通过分析ELF可执行文件,利用栈溢出等内存破坏漏洞,结合Ret2libc和ROP链构造技术,最终实现权限获取。本文聚焦栈溢出与格式化字符串漏洞的利用,详细讲解如何通过GD

weixin_34121282的博客 374

CTFshow PWN入门实战:从栈溢出到堆利用的完整学习路径

在计算机安全领域,二进制漏洞利用是理解软件安全机制的核心。其原理源于程序内存管理缺陷,攻击者通过精心构造的输入数据覆盖关键内存区域,从而劫持程序控制流。这项技术的核心价值在于揭示系统底层安全边界,是构建纵深防御体系的基础。在CTF竞赛和渗透测试中,掌握栈溢出、格式化字符串和堆利用等技术,能够有效评估软件抗攻击能力。本文以CTFshow平台的PWN入门系列为蓝本,系统讲解环境搭建、工具链配置和漏洞利用实战,重点剖析栈溢出与格式化字符串漏洞的利用技巧,帮助初学者建立完整的二进制安全攻防思维框架。

weixin_30412167的博客 375

CTF入门实战指南:从零构建网络安全核心技能树

网络安全是保障信息系统安全稳定运行的关键领域,其核心在于理解系统漏洞原理与攻击防御技术。CTF(Capture The Flag,夺旗赛)作为一种实战演练形式,通过模拟真实漏洞场景,系统性地检验和提升安全技能。从Web安全、逆向工程到密码学,CTF构建了清晰的学习路线图,帮助学习者掌握漏洞利用、代码审计等核心能力。对于初学者而言,搭建Kali Linux环境、熟悉Burp Suite等工具链是入门第一步。通过参与解题模式(Jeopardy)的实战,不仅能深化对SQL注入、文件上传等常见漏洞的理解,还能培养自

a359798678的博客 437

STM32通过ESP8266连接机智云APP(第二讲,烧录固件并测试)

今天与大家分享STM32通过ESP8266连接机智云APP,并完成数据的上传下发第二讲。带大家一起烧录机智云固件到ESP8266并且将其通过机智云串口助手与APP进行测试。

qq_63267523的博客 1425

【开源~磁悬浮】零代码,纯硬件闭环:从霍尔到H桥的磁悬浮稳定术

本文详细介绍了如何不依赖任何代码,仅通过模拟和数字电路的组合,实现一个完整的磁悬浮闭环控制系统。从霍尔传感器检测位置,到运放电路进行信号调理与模拟PID控制,再到H桥驱动电磁铁执行纠偏,全程使用基础电子元器件搭建。文章深入剖析了系统原理、电路设计、调试技巧与实践经验,展现了纯硬件实现自动控制的独特魅力与挑战。

perl8的博客 622

Vercel静态站被墙别慌!手把手教你用Cloudflare免费CDN+域名解析搞定DNS污染

本文详细介绍了如何利用Cloudflare免费CDN和域名解析解决Vercel静态网站遭遇DNS污染的问题。通过诊断DNS污染、设计Cloudflare解决方案架构、实战配置步骤以及高级调优技巧,帮助用户快速恢复站点访问并提升防护能力。

weixin_27442001的博客 677

实战经验:Sensor Bringup中那些坑我都帮你踩过了(避坑指南)

本文是一份详尽的Sensor Bringup实战避坑指南,总结了从I2C通信、MCLK时钟、电源管理到图像异常等关键环节的常见问题与排查方法。文章提供了系统化的调试工作流,强调先硬件后软件的排查原则,旨在帮助硬件工程师快速定位并解决Sensor启动过程中的难题,提升开发效率。

weixin_29212429的博客 574

OPC DCOM详细配置方法 - 不关防火墙不换登陆用户

1. 前言   OPC DCOM的设置是实现跨网络OPC通信的基础,现有的一些OPC DCOM配置教程虽然讲解了如何配置DCOM,但没有讲清楚为什么要这么做,而且各个教程涉及的配置方法也不尽相同。   为了彻底搞清楚OPC DCOM的配置过程,我重新做了两台机器的系统,一台是Windows 7 32位,一台是Windows 10 64位,并且重零开始完整的测试了正常运行OPC DCOM所需的最少的...

steventian72的博客 3万+

2.0 电子凸轮 西门子1500电子凸轮使用研究1

本文研究了S7-1500T电子凸轮同步控制技术,通过仿真实验得出以下结论:1)通过比例系数可调整凸轮曲线形状;2)解除同步需调用从轴其他运动指令;3)详细阐述了凸轮同步的5个实施步骤。重点分析了三种同步类型(主值距离同步、动态参数同步和直接同步)的特点及应用场景,并探讨了缩放系数、偏移量等参数对凸轮曲线的影响。同时介绍了凸轮应用模式及常见异常处理方法,为工程应用提供了重要参考。

qq_34047402的博客 809

YOLOv11改进缝合FasterBlock | 一种新型轻量化卷积结构C3k2的设计与实证:兼顾精度与速度的改进方法(附代码)

YOLO系列一直是目标检测领域的明星算法,凭借其实时性和准确性在众多应用中占据一席之地。随着YOLO版本的不断迭代,网络架构逐渐变得更为复杂,尤其是在卷积模块的设计上。本文将介绍如何利用FasterNet的FasterBlock创新,并通过二次创新C3k2提出一种全新的卷积结构。该结构旨在提高YOLOv11的计算效率和准确性,特别是在视觉任务中的表现。我们的创新在保证高精度的前提下,有效降低了计算量和内存需求,特别适合在资源受限的设备上运行。

一键难忘的博客 906

主流反爬虫、反作弊防护与风控对抗手段

主流反爬虫、反作弊风控防护中的核心设计点与对抗策略

吴秋霖的博客 2555

jre9下载 jdk9

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: Linux pwn入门教程(0)——环境配置
下一篇: 大数据搜索引擎之elasticsearch使用篇(一)
张悠悠66
博客等级 码龄9年 828粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值