您当前的位置: 首页 > 

【攻防世界】学习记录-web(系数3)

九枕 发布时间:2022-08-30 10:15:00 ,浏览量:4

目录
    • 0099 lottery
    • 0332 ics-05
    • 0415 mfw
    • 0480 simple_js
    • 0723 easytornado
    • 0724 shrine
    • 0726 fakebook
    • 0735 favorite_number

我之前向平台反馈的放在系数1的very_easy_sql被调到了系数3,wp我就懒得搬过来了,想看的可以去看更新的web系数1的part2部分。

0099 lottery

题目:XCTF 4th-QCTF-2018 解答:访问robots.txt,发现git源码泄露。 在这里插入图片描述

用githack跑一下,获取源码。题目也给了附件,我没有再下,应该是源码。 在这里插入图片描述

注册登录,给了20,flag需要9990000。 在这里插入图片描述

buy页面是输入彩票号码。 在这里插入图片描述

游戏规则是: 在这里插入图片描述

在api.php中发现是获取随机数。 在这里插入图片描述

在buy方法中发现,每个数字都是弱比较。可以用true绕过判断。 在这里插入图片描述

burp抓包,将随机填入的数字改为[true,true,true,true,true,true,true],一直赌,直到最后达到flag 的钱。 在这里插入图片描述

最后就去买flag啦~ 在这里插入图片描述

0332 ics-05

题目:XCTF-4th-CyberEarth 其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统

解答:设备维护中心可以打开。 在界面能点的地方又点了点,点击“云平台设备维护中心”出现?page=index,存在文件包含。 在这里插入图片描述

尝试一下:?page=php://filter/read=convert.base64-encode/resource=index.php出现index.php源码。 在这里插入图片描述

查看源码,发现注入点。preg_replace这里可以自己输入正则匹配,那么就可以利用/e来执行php语句了。 在这里插入图片描述

/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码。

首先设置X_FORWARDED_FOR为127.0.0.1。然后开始传参: ?pat=/test/e&rep=system("find / -name flag")&sub=test 在这里插入图片描述

获取flag:?pat=/test/e&rep=system('tac s3chahahaDir/flag/flag.php')&sub=test 在这里插入图片描述

0415 mfw

题目:csaw-ctf-2016-quals 解答:git源码泄露,发现flag.php也在templates目录下。 查看一下index.php源码,输入的内容是直接拼接到路径的。 在这里插入图片描述

assert中都是用单引号拼接的代码,所以前后用单引号闭合语句,然后把要执行的代码放在中间,用点连接就可以。(用点连接是必须的哟,因为拼接所以才能执行代码~) 其中的逻辑就是,先执行代码,然后代码执行返回的结果会拼接到字符串中,作为strpos的参数。 (这里不确定的话,可以本地看一下传递进去的内容,如下图先执行了system,然后再执行var_dump) 在这里插入图片描述

payload:?page='.system("cat ./templates/flag.php").' 可以看到,执行了两次输出,因为两个assert都执行了。 在这里插入图片描述

0480 simple_js

解答:打开就让输入密码,直接ctrl+u查看一下源码: 在这里插入图片描述

这里可以先不看逻辑,直接把那些数据输出一下,看不能直接获取flag。放到控制台就可以获取内容。 在这里插入图片描述

ascii转字符:786OsErtk12,flag就是这个:cyberpeace{786OsErtk12}

最后再来顺一下代码的逻辑,代码很繁琐,把其中的内容整理一下: 可以看到无论输入什么内容,结果都是一样的,输入内容并不影响,所以真正的pass是后面的数据。

function dechiffre(){
        var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
        var tab2 = pass.split(',');
        var i,n,p = "";
        n = tab2.length;
        for(i = 0; i {2*6}}测试返回ORZ,测试一下{{9}},返回9,存在模板注入。但应该是过滤了算术运算。{handler.settings}}{% set {}=None%}}'{7+7}}{% set config=None%}}{{% set self=None%}}{{7+7}}{config}}{self.__dict__}}{[].__class__.__base__.__subclasses__()[68].__init__.__globals__['os'].__dict__.environ['FLAG]}}{url_for.__globals__['current_app'].config['FLAG']}}[1]。这里我也本地测试了一下。 在这里插入图片描述

(如果是php7的话,9223372036854775807是临界值,[18446744073709551614]->[0],但是[1]就不是直接加1了,后面的数据就不太对应了,增加一定数值后返回的都还是[0],变化的跨度也有点奇怪,其中的逻辑有时间再研究吧。)

那么第一个if条件就可以绕过了:stuff[4294967296]=admin&stuff[1]=user

第二个if条件要求输入的内容是数字,由于正则匹配中^abc$只匹配单行,所以可以用%0a换行绕过。

第三个if条件,暂且不提,先开始执行命令:

stuff[4294967296]=admin&stuff[1]=user&num=123%0als -i / 这里抓包吧,我用hackbar,把%0a又给编码了,导致不出结果了。 在这里插入图片描述

我们要获取flag。这里再继续看第三个if条件:读取命令有很多,很好绕过,用tac就可以。 flag模糊匹配不行了,但可以字符拼接,aa=ag;b=/fl;tac $b$a

payload:stuff[4294967296]=admin&stuff[1]=user&num=123%0aa=ag;b=/fl;tac%20$b$a 在这里插入图片描述

关注
打赏
1688896170
查看更多评论

九枕

暂无认证

  • 4浏览

    0关注

    13博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0640s