0%

[NPUCTF2020]ezinclude

文件包含新知识,题目第一个点看的我莫名其妙的

题解

进来就是一句username/password error,源码里有一句注释<!–md5($secret.$name)===$pass –>也是看得人不明所以,也没说是post还是get传参,本来感觉应该是一个哈希扩展攻击,但是secret的长度未知,好像也没法进行。随便输了点东西之后给了我一个名字叫Hash的cookie,就直接把md5($secret.$name)给我了???把密码换成cookie值就可以了

然后会给一个flflflflag.php,但是打开就重定向到404,所以还是用burp抓包
给了一个include $_GET[‘file’];简单测试之后,input,data等字段都给过滤了,还是没有想象中那么简单

阅读全文 »

[GWCTF 2019]mypassword

一个XSS题,开局一个登录框,试了一下admin被注册了,过滤了一些东西,注册一个号登进去看发现并不是注入,给了一个feedback界面提交反馈,大概就能猜出来是XSS了

题解

在feedback界面查看源码可以看到一个被注释了的过滤

if(is_array($feedback)){
                echo "<script>alert('反馈不合法');</script>";
                return false;
            }
            $blacklist = ['_','\'','&','\\','#','%','input','script','iframe','host','onload','onerror','srcdoc','location','svg','form','img','src','getElement','document','cookie'];
            foreach ($blacklist as $val) {
                while(true){
                    if(stripos($feedback,$val) !== false){
                        $feedback = str_ireplace($val,"",$feedback);
                    }else{
                        break;
                    }
                }
            }
阅读全文 »

[NPUCTF2020]ezlogin

xml注入,全新知识点

题解

打开题目可以发现username和password是以xml格式提交的,第一反应就是xxe。
xxe不会,随便搜了几个payload来打,回显格式不对,估计是没机会了,直接搜wp进行学习

找到一个xpath注入的文章https://www.tr0y.wang/2019/05/11/XPath%E6%B3%A8%E5%85%A5%E6%8C%87%E5%8C%97/
注入整体思路和SQL注入类似,不过这里没什么过滤,这个注入也没注释符,手动闭合一下引号
再贴一个抄来的脚本

阅读全文 »

[XDCTF2015] filemanager

BUU上一个15年的题,二次注入

源码泄漏

www.tar.gz。。。我试了www.zip和robots.txt,结果源码是另一个圧缩形式
有用的就两个文件,upload.php和rename.php
提交的所有数据都被转义加了斜杠,直接注入无果,事实上测试一下就发现把文件名改成1’之类的时候,再去修改会触发二次注入

二次注入

阅读全文 »

[GYCTF2020]FlaskApp

flask的模板注入加一个debug模式下的命令执行

题目开局给的是一个base64的加解密网站,说明了是flask写的,hint界面在注释里面藏了一句PIN(我一开始还不知道是什么意思)
后来在解码处输入了一个错误的字符串,进入了debug界面,可以看到解码部分的源码

@app.route('/decode',methods=['POST','GET'])
def decode():
    if request.values.get('text') :
        text = request.values.get("text")
        text_decode = base64.b64decode(text.encode())
        tmp = "结果 : {0}".format(text_decode.decode())
        if waf(tmp) :
            flash("no no no !!")
            return redirect(url_for('decode'))
        res =  render_template_string(tmp)

发现在debug模式下可以运行一个shell,但是要输入一个叫PIN码的东西,这个就是提示中出现的PIN了,每个机器的PIN码是由几个数据固定生成的,那么我们只要读取到对应的文件,自然就能计算出PIN从而任意命令执行
而这里又使用了模板渲染,自然可以测一下ssti,简单的{{8+8}}可以被计算即可证明存在模板注入。不过这里也提出了有Waf,就需要测一下waf禁用了什么。简单找几个payload试试,发现os,flag和popen,system,import之类的常用命令执行的字段被禁用了,不过就这种过滤还是很容易绕过的,毕竟还是得用ssti读文件去计算PIN码,网上找几个payload就可以了

阅读全文 »