当前位置: 首页 > news >正文

PWN Test_your_nc Write UP

目录

PWN 00

解题过程

总结归纳

PWN 01

解题过程

总结归纳

PWN 02

解题过程

总结归纳

PWN 03

解题过程

总结归纳

PWN 04

解题过程

总结归纳


CTF PWN 开始! 冲就完了

PWN 00

解题过程

ssh远程链连接

ssh ctfshow@pwn.challenge.ctf.show -p28151

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

 得到flag

总结归纳

彩蛋题,没啥说的

PWN 01

解题过程

下载附件进行分析

file查看文件类型,

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

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

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

本地根目录做个测试文件

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

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

nc pwn.challenge.ctf.show 28235

总结归纳

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

PWN 02

解题过程

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

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

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

总结归纳

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

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

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代码

进入case6函数

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

总结归纳

没啥说的,加了点逻辑

PWN 04

解题过程

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

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

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

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

execve_func函数:

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

 输入CTFshowPWN拿flag

总结归纳

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

该函数接受三个参数:

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

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

http://www.lryc.cn/news/180278.html

相关文章:

  • Centos7配置firewalld防火墙规则
  • 【新版】系统架构设计师 - 未来信息综合技术
  • CAD二次开发LineSegment2d
  • Linux shell编程学习笔记5:变量命名规则、变量类型、使用变量时要注意的事项
  • 如何把word的页眉页脚改为图片
  • spring6-实现简易版IOC容器
  • Feign接口调用GET请求@RequestParam传参丢失
  • LeetCode每日一题 | 309.买卖股票的最佳时机含冷冻期
  • HTML的学习 Day02(列表、表格、表单)
  • Android shape记录
  • WSL2和ubuntu的安装过程
  • 力扣第150题 逆波兰表达式求值 stack c++
  • 三、飞行和射击
  • GitHub与GitHubDesktop的使用
  • AIGC 微调的方法
  • gcc编译webrtc x64
  • uni-app 实现凸起的 tabbar 底部导航栏
  • 中国1km土壤特征数据集(2010年)
  • 计算机网络笔记 第二章 物理层
  • 使用CreateProcess崩溃:处未处理的异常: 0xC0000005: 写入位置 0x00415652 时发生访问冲突
  • Java 华为真题-出租车计费
  • 开源layui前端框架 收款码生成系统源码 多合一收款码生成源码 带50多套UI模板
  • 微服务moleculer01
  • C++中将指针传递给函数
  • 【51单片机编写占空比按秒渐亮与渐暗】2023-10-2
  • OCI 发布了容器运行时和镜像规范!
  • C++学习笔记一: 变量和基本类型
  • 探索ClickHouse——同时支持导入导出功能的文件格式
  • Scipy库提供了多种正态性检验和假设检验方法
  • 去雨去雪去雾算法之本地与服务器的TensorBoard使用教程