PWN Test_your_nc Write UP

目录

PWN 00

解题过程

总结归纳

PWN 01

解题过程

总结归纳

PWN 02

解题过程

总结归纳

PWN 03

解题过程

总结归纳

PWN 04

解题过程

总结归纳


CTF PWN 开始! 冲就完了

PWN 00

解题过程

ssh远程链连接

ssh [email protected] -p28151

 输入yes ,再输入密码后进入远程连接,等待程序结束后发现给了一个shell

PWN Test_your_nc Write UP_第1张图片

 得到flag

总结归纳

彩蛋题,没啥说的

PWN 01

解题过程

PWN Test_your_nc Write UP_第2张图片

下载附件进行分析

file查看文件类型,

PWN Test_your_nc Write UP_第3张图片

checksec检查文件是否开始保护,可以看到文件64位,而且关闭了Canary保护

PWN Test_your_nc Write UP_第4张图片

使用IDA静态分析,找到main函数,并且F5得到伪C代码

PWN Test_your_nc Write UP_第5张图片

这个程序会自动根目录下的文件,本地运行pwn测试

PWN Test_your_nc Write UP_第6张图片

本地根目录做个测试文件

PWN Test_your_nc Write UP_第7张图片

PWN Test_your_nc Write UP_第8张图片

system执行cat命令是在shell环境下的,shell命令是由交互的,会把执行的结果打印在shell里面

根据题目提示:应该是在服务器端口上开设了一个服务,nc链接就可以触发

nc pwn.challenge.ctf.show 28235

PWN Test_your_nc Write UP_第9张图片

总结归纳

system执行cat命令是在shell环境下的,shell命令是由交互的,会把执行的结果打印在shell里面

PWN 02

解题过程

和上面一样,file判断文件类型是动态链接库文件,checksec文件唯独没开启Canary防护

IDA下分析可执行文件的伪C代码

PWN Test_your_nc Write UP_第10张图片

运行这个程序会返回一个shell环境,直接查看根目录的flag即可

PWN Test_your_nc Write UP_第11张图片

总结归纳

 system("/bin/sh"); 工作原理是什么?

/bin/sh 其实是一个软链接,指向dash

PWN Test_your_nc Write UP_第12张图片

system()函数先fork一个子进程,在这个子进程中调用/bin/sh -c来执行command指定的命令。/bin/sh在系统中一般是个软链接,指向dash或者bash等常用的shell,-c选项是告诉shell从字符串command中读取要执行的命令(shell将扩展command中的任何特殊字符)。父进程则调用waitpid()函数来为变成僵尸的子进程收尸,获得其结束状态,然后将这个结束状态返回给system()函数的调用者。

通俗的讲就是:那么也就是说执行完这个后它就会返回一个shell给函数的调用者:

system("/bin/sh");这一类的我们称之为后门函数,再后续利用过程中我们要尽可能找到或者构造出来
 

PWN 03

解题过程

file查看文件类型,动态链接库,64位程序

checksec查看文件保护情况,全部开启

IDA中F5分析文件的伪c代码

PWN Test_your_nc Write UP_第13张图片

进入case6函数

PWN Test_your_nc Write UP_第14张图片

远程nc连接,选择6,得到flag

PWN Test_your_nc Write UP_第15张图片

总结归纳

没啥说的,加了点逻辑

PWN 04

解题过程

file查看文件类型,动态链接库,64位程序

checksec查看文件保护情况,全部开启

IDA中F5分析文件的伪c代码

PWN Test_your_nc Write UP_第16张图片

  1. 首先将字符串"CTFshowPWN"复制到s1变量中。
  2. 接着,使用puts函数输出字符串"find the secret !"。
  3. 紧接着,通过_isoc99_scanf函数从用户输入中读取一个字符串到s2变量中。
  4. 最后,通过 strcmp函数比较s1和s2的内容是否相同。如果相同,则调用execve_func函数。
     

execve_func函数:

PWN Test_your_nc Write UP_第17张图片

  1. 可以看到将字符串"/bin/sh”赋值给argv变量。
  2. 然后,将v2和v3初始化为0。
  3. 通过调用execve系统调用来执行/bin/sh shell。

 输入CTFshowPWN拿flag

PWN Test_your_nc Write UP_第18张图片

总结归纳

execve本身并不是一个后门函数。实际上,execve是一个标准的系统调用函数,用于在Linux和类Unix系统中执行一个新的程序。

该函数接受三个参数:

  • filename :要执行的程序的文件名或路径。
  • argv :一个以NULL结尾的字符串数组,表示传递给新程序的命令行参数。
  • envp :一个以NULL结尾的字符串数组,表示新程序的环境变量。

当调用execve函数时,它会将当前进程替换为新程序的代码,并开始执行新程序。新程序接收argv和envp作为命令行参数和环境变量。在加入某些参数后就可以达到我们所需要的后门函数的效果。

PWN Test_your_nc Write UP_第19张图片

你可能感兴趣的:(CTF-PWN,PWN,CTF)