本题考点:Python SSTI 本题来源:XCTF 4th-QCTF-2018

    一进来浏览网站发现什么也没有,两个页面login.php和register.php全是404

    [Python-SSTI] - Confusion1 - 图1

    既然网站什么也没有,但是题目还是要做的,继续浏览网站,细心点的师傅可以发现在404页面里给了flag的路径

    [Python-SSTI] - Confusion1 - 图2

    那么这个题的目的肯定就是要想办法读到flag文件,要读文件那就肯定要有用户输入,但是整个网站并没有可以和用户交互的地方,除了404页面url部分。

    有经验的师傅肯定做过其他比赛中有404页面url部分SSTI的题,这个题也是一样的,没有经验的萌新就只能一步步的试了,总之这个网站可以控制输出的地方只有404的url

    测试:

    [Python-SSTI] - Confusion1 - 图3

    所以这里存在SSTI,之后照着思路往下走,不细心的师傅可能走PHP的SSTI了,因为整个站都被伪装成了Apache+PHP,其实整个站使用Python flask实现的,伪装的并不完美,如果师傅做题的时候不小心弄出个500,可能就会暴露真实的服务。
    现在仔细看首页的那张图应该就能明白那张图片的意思了2333333333

    [Python-SSTI] - Confusion1 - 图4
    另外题目里对一些关键字做了过滤,用request.args绕过即可
    payload:

    1. {{''[request.args.a][request.args.b][2][request.args.c]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')[request.args.d]()}}?a=__class__&b=__mro__&c=__subclasses__&d=read

    [Python-SSTI] - Confusion1 - 图5