ps做电商网站图标人工智能培训心得
目录
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代码
- 首先将字符串"CTFshowPWN"复制到s1变量中。
- 接着,使用puts函数输出字符串"find the secret !"。
- 紧接着,通过_isoc99_scanf函数从用户输入中读取一个字符串到s2变量中。
- 最后,通过 strcmp函数比较s1和s2的内容是否相同。如果相同,则调用execve_func函数。
execve_func函数:
- 可以看到将字符串"/bin/sh”赋值给argv变量。
- 然后,将v2和v3初始化为0。
- 通过调用execve系统调用来执行/bin/sh shell。
输入CTFshowPWN拿flag
总结归纳
execve本身并不是一个后门函数。实际上,execve是一个标准的系统调用函数,用于在Linux和类Unix系统中执行一个新的程序。
该函数接受三个参数:
- filename :要执行的程序的文件名或路径。
- argv :一个以NULL结尾的字符串数组,表示传递给新程序的命令行参数。
- envp :一个以NULL结尾的字符串数组,表示新程序的环境变量。
当调用execve函数时,它会将当前进程替换为新程序的代码,并开始执行新程序。新程序接收argv和envp作为命令行参数和环境变量。在加入某些参数后就可以达到我们所需要的后门函数的效果。