网站中只有home、login、register几个页面
    image.png
    点击login或者register后,直接跳转到404页面
    image.png
    但是这个404页面感觉上和正常的404页面不太相同,右键查看源码看看,发现如下内容:

    1. <!--Flag @ /opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt-->
    2. <!--Salt @ /opt/salt_b420e8cfb8862548e68459ae1d37a1d5.txt-->

    应该是flag或者什么东西的路径,但直接访问也读取不了,不过前面的@让我想起Django的东西,试试@opt/api/api/settings.py看看能不能读取到东西:
    image.png但是此路不通,有过滤。
    既然是Django,那么就猜猜看有没有SSTI漏洞,在url后面加上{{1+1}},看看返回结果:
    image.png返回了2,证明SSTI漏洞存在。
    flag路径已经知道了,接下来使用魔术方法读取即可。
    构造payload:

    1. ''.__class__.__mro__[2].__subclasses__()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt').read()

    但是被系统提示image.png,将关键词改成字符串形式拼接,利用字典访问对象绕过。
    payload:

    1. {{()["__cla"+"ss__"]["__ba"+"se__"]["__subcla"+"sses__"]()[40]('/opt/salt_b420e8cfb8862548e68459ae1d37a1d5.txt')["re"+"ad"+"lines"]()}}