[HNCTF 2022 Week1]calc_jail_beginner_level2(JAIL)

[HNCTF 2022 Week1]calc_jail_beginner_level2(JAIL)

下载附件得到源代码

#the length is be limited less than 13
#it seems banned some payload 
#Can u escape it?Good luck!

WELCOME = '''
  _                _                           _       _ _   _                _ ___  
 | |              (_)                         (_)     (_) | | |              | |__ \ 
 | |__   ___  __ _ _ _ __  _ __   ___ _ __     _  __ _ _| | | | _____   _____| |  ) |
 | '_ \ / _ \/ _` | | '_ \| '_ \ / _ \ '__|   | |/ _` | | | | |/ _ \ \ / / _ \ | / / 
 | |_) |  __/ (_| | | | | | | | |  __/ |      | | (_| | | | | |  __/\ V /  __/ |/ /_ 
 |_.__/ \___|\__, |_|_| |_|_| |_|\___|_|      | |\__,_|_|_| |_|\___| \_/ \___|_|____|
              __/ |                          _/ |                                    
             |___/                          |__/                                                                            
'''

print(WELCOME)

print("Welcome to the python jail")
print("Let's have an beginner jail of calc")
print("Enter your expression and I will evaluate it for you.")
input_data = input("> ")
if len(input_data)>13:
    print("Oh hacker!")
    exit(0)
print('Answer: {}'.format(eval(input_data)))

这道题过滤了exec,input,eval,并且还对长度做了限制不能超过13,此时类似于__import__('os').system('sh')之类的就无法使用了,但是还有其他方法可以逃逸。

1.eval(input())

既然它是对input_data进行的检查,不难想到只要再执行一个input()就可以绕过检查了。这句代码的意思相当于input()继续输入字符串,再由eval函数解析执行,所有就没有了字符长度的限制,然后再输入__import__('os').system('sh')即可getshell。

PEjFzEoiCng79GPOv1pbT3Wn0N9FEhROXRaRmmQ8_K8

2.breakpoint

Python中内置了一个名为breakpoint()的函数,在Python 3.7中引入,用于在调试模式下设置断点。使用breakpoint()函数会停止程序的执行,并在IDE或命令行中进入调试模式,可以单步执行程序,查看变量的值等。

这题我们输入breakpoint之后,会进入一个调试的交互界面,然后再输入__import__('os').system('sh')即可getshell。

-1rPsMKy2gTdNrP1GSK2SBiGCxn4BAouML3XtOc4WoM

posted on 2024-12-24 19:01  跳河离去的鱼  阅读(2)  评论(0编辑  收藏  举报