CTFshow-pwn入门-Test_your_nc

pwn0

CTFshow-pwn入门-Test_your_nc_第1张图片

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

pwn1

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

pwn2

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

pwn3

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

pwn4

CTFshow-pwn入门-Test_your_nc_第24张图片
老样子,下载pwn到虚拟机,然后看文件信息。
CTFshow-pwn入门-Test_your_nc_第25张图片
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;
}

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

你可能感兴趣的:(pwn,CTFShow,linux,安全,网络安全)