CTFshow-pwn入门-Test_your_nc

13 篇文章 10 订阅
文章描述了通过ssh连接到靶场环境,利用pwn工具获取flag的过程。涉及了ida64反编译、检查文件权限、识别执行命令以及交互式shell的使用。在不同场景下,需要分析代码并采取相应操作,如直接运行含有flag命令的程序或者输入特定字符串来触发flag显示。
摘要由CSDN通过智能技术生成

pwn0

在这里插入图片描述

靶场环境启动开,显示ssh连接。
直接打开ctfshow的pwn专用虚拟机来使用ssh连接。密码是123456。
在这里插入图片描述
在这里插入图片描述
连接之后,他会出现这样的一大堆的介绍性文字,不用管他,然他输出完就行。
在这里插入图片描述
中间还用各种语言说了一下“消灭人类暴政,世界属于人工智能!”,真是可笑啊hhh
在这里插入图片描述
这里他说他会在3秒中关闭,让我们尽快get flag,其实就是哈牛逼啊,他不会关闭的,我们来几条命令试一下能否执行。
在这里插入图片描述
可以看到我们输入pwd,显示了当前路径,我们直接切到根目录,发现了ctfshow_flag这个文件,直接cat读取拿到flag!

pwn1

在这里插入图片描述
我们把这个pwn文件下载下来,弄到虚拟机里看一下。
在这里插入图片描述
它是一个可执行文件,我们需要先给它加一个执行权限。
下面我们适用checksec命令看一下它的文件信息。
在这里插入图片描述
这是一个64位的可执行文件,那我们就是用ida64来反编译瞄一下里面都有啥?
在这里插入图片描述
main函数里是这么个东西,里边有个system()函数,并且参数是"cat /ctfshow_flag"是读取flag的命令,那这样的话我们直接运行这个远程文件就可以拿到flag了,也就直接远程nc连接 pwn.challenge.ctf.show 28131这个服务器就行了。
注意啊,大家千万别直接在本地直接运行那个pwn文件,那样是拿不到flag的。因为,我们在本地运行就相当于那个system函数执行的命令是在我们自己本地虚拟机里面读/ctfshow_flag,那我们自己虚拟机怎么可能有flag嘛,当然不行的。
在这里插入图片描述
如果在本地直接执行pwn文件就是酱紫的!
所以我们直接nc就行。
在这里插入图片描述
看到没,这样才能拿到flag。

pwn2

在这里插入图片描述
还是先把pwn文件弄到虚拟机看一下。
在这里插入图片描述
它还是64位的,托到ida64反编译一下,瞅一瞅!
在这里插入图片描述
这次是没有"cat ctfshow_flag"的命令了,直接把交互式的shell给我们了,那都一样。只不过需要我们自己去手动读取了!
还是nc连接啊师傅们!
在这里插入图片描述
在这里插入图片描述
OK,拿到flag!

pwn3

在这里插入图片描述
老样子,下载pwn到虚拟机,然后看文件信息。
在这里插入图片描述
64位的文件,拖进ida64看反编译结果。
在这里插入图片描述
这是一个switch-case语句,case 6中有一个system_func()函数,我们跟进看一下。
在这里插入图片描述
在这里插入图片描述
哇哦,system_func()函数是一个读取flag的函数,不可思议。
代表我们nc连接之后会让我们输入一个选项,输入6就会执行system_func()函数,执行这个函数就会读取flag,OK,直接干!
在这里插入图片描述
成功拿到flag!

pwn4

在这里插入图片描述
老样子,下载pwn到虚拟机,然后看文件信息。
在这里插入图片描述
64位的,继续拖入ida64看一下里面是啥。

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s1[11]; // [rsp+1h] [rbp-1Fh] BYREF
  char s2[12]; // [rsp+Ch] [rbp-14h] BYREF
  unsigned __int64 v6; // [rsp+18h] [rbp-8h]

  v6 = __readfsqword(0x28u);
  setvbuf(_bss_start, 0LL, 2, 0LL);
  setvbuf(stdin, 0LL, 2, 0LL);
  strcpy(s1, "CTFshowPWN");
  logo();
  puts("find the secret !");
  __isoc99_scanf("%s", s2);
  if ( !strcmp(s1, s2) )
    execve_func();
  return 0;
}

在这里插入图片描述
使用了if语句,strcmp函数是比较两个字符串是否相等的,也就是如果s1跟s2相等,就会执行execve_func()函数,这个s2变量的内容是需要我们去输入的,我们先看一下execve_func()函数里边是什么?
在这里插入图片描述
哇~是个交互式shell!OK,我们nc连接之后输入s1变量的值就行,代码中适用strcpy(s1,“CTFshowPWN”);语句将"CTFshowPWN"这个字符串赋给了s1,所以我们nc连接之后输入CTFshowPWN就行了!
在这里插入图片描述
我们输入完回车之后,他没给任何提示消息啊,大家可能会疑惑啊,其实呢我们这时已经获得它的shell了,只是没有提示消息罢了。
那好我们执行命令来找flag吧!
在这里插入图片描述
成功拿到flag!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你们de4月天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值