shellcode教程,shell编程免费教程

首页 > 经验 > 作者:YD1662022-11-07 08:30:05

这是一套Linux Pwn入门教程系列,作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的一些题目和文章整理出一份相对完整的Linux Pwn教程。

课程回顾>>

本系列教程仅针对i386/amd64下的Linux Pwn常见的Pwn手法,如栈,堆,整数溢出,格式化字符串,条件竞争等进行介绍,所有环境都会封装在Docker镜像当中,并提供调试用的教学程序,来自历年赛事的原题和带有注释的python脚本。

今天是Linux Pwn入门教程第三章:ShellCode的使用、原理与变形,本文篇幅较长,希望大家耐心看完,阅读用时约15分钟。

ShellCode的使用

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

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

shellcode教程,shell编程免费教程(1)

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

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

shellcode教程,shell编程免费教程(2)

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

shellcode教程,shell编程免费教程(3)

shellcode教程,shell编程免费教程(4)

首页 12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.