rwctf2022_QLaaS

rwctf2022 QLaaS

main.py

首先题目文件只有一个main.py, 内容如下:

#!/usr/bin/env python3

import os
import sys
import base64
import tempfile
# pip install qiling==1.4.1
from qiling import Qiling

def my_sandbox(path, rootfs):
    ql = Qiling([path], rootfs)
    ql.run()

def main():
    sys.stdout.write('Your Binary(base64):\n')
    line = sys.stdin.readline()
    binary = base64.b64decode(line.strip())
    
    with tempfile.TemporaryDirectory() as tmp_dir:
        fp = os.path.join(tmp_dir, 'bin')

        with open(fp, 'wb') as f:
            f.write(binary)

        my_sandbox(fp, tmp_dir)

if __name__ == '__main__':
    main()

现获取文件,然后直接调用qiling框架运行它。这里显示是qiling=1.4.1, 也是目前的最新版本。

首先在github获取下来qiling的代码,然后切换到1.4.1版本,模仿上面的脚本编写一个简单的脚本:

#!/usr/bin/env python3

import os
import sys
import base64
# pip install qiling==1.4.1
c

def my_sandbox(path, rootfs):
    ql = Qiling([path], rootfs)
    ql.run()

def main():
    my_sandbox("/tmp/a/bin", "/tmp/a")

if __name__ == '__main__':
    main()

注意这里其实我没有安装qiling, 所以这个from qiling import Qiling其实会从当前路径进行查找,这里将这个脚本放到clone下来的qiling代码的目录下,会自动找到qiling文件夹,并使用其内的python文件,也可以开始调试了。

然后编写了一个exp.c,

#include <stdio.h>

int main() {
   
  printf("hellow\n");
  return 0;
}

尝试运行,发现这个报错。这个位置想载入动态链接库的时候, 尝试在本目录下载入ld文件失败,

image.png

可以看到原本想载入的文件是这个, 被限制在rootfs中了。

image.png

所以使用静态链接。

image.png

然后发现打印了运行过的syscall, qiling其实是封装的unicorn, 但是unicorn其实本身并没有实现sys call, 这些应该是qiling中实现的。

漏洞

transform_to_real_path

首先尝试直接启动shell,

int main() {
   
  execve("/bin/sh", 0, 0);
  return 0
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值