×

ctfphp伪协议

ctfphp伪协议(伪协议xss)

admin admin 发表于2023-03-11 22:43:07 浏览38 评论0

抢沙发发表评论

本文目录一览:

伪协议的意思?

伪协议就是假的协议

[ xié yì ]

1.协商。

2.泛指国家、政府、政党、团体或个人间就一定问题经谈判、协商后而达成的共同决定。通常用文件形式来体现。国家和政府间的协议往往采取条约的形式。协议有时也作为条约的一种名称。

[世安杯]一道关于php反序列化漏洞的题目

题目地址:

点进去,看到

没什么信息,因此ctrl+u查看源码:

看到提示,file_get_contents()函数,联想到文件包含漏洞,因此google一波,查到

由于本题:allow_url_include=On

因此可以包含一个远程文件,假设你的云服务IP地址为:xxx

则可以输入

其中a.txt的内容为: the user is admin

用base64解码,得到

看到源码之后,明白了需要使用$file把class.php包含进来,然后把$pass反序列化之后, echo $pass 这句话会执行对象里面的__toString函数,具体的反序列化漏洞查看

因此,接下来只要找到序列化之后的字符串,然后GET给pass就行了

复制class.php的源码到自己的虚拟机上,修改一下

保存之后,通过浏览器访问,得到:

接着把这个序列化字符串赋值给pass,以及用file包含class.php,构造出:

执行之后得到:

发现什么都没有,CTRL+U查看源码

这样就得到了flag;

此外,可以参考我之前的一篇文章 php伪协议的使用[获得webshell]

使用file= php://input ,之后传入一个webshell,再读取f1a9.php

ctfshow-SSRF篇

参考:

payload:

使用file伪协议看到的flag.php源码如下:

要求是 http 或者 https 协议,以及过滤了 localhost 和 127.0.0.1 。

额为什么 preg_match() 里面没有指定对谁匹配,所以上一题的payload中的http协议的是可以使用的,file伪协议的过不了第一层判断。

不过如果的确做了有效的正则匹配,那么可以127.0.1 、127.1或者转成16进制或者8进制绕过,payload如下:

使用进制转换或者127.1绕过:

把1和0都ban了,可以修改自己域名的A记录为127.0.0.1

A(Address)记录是地址记录,用来指定主机名(或域名)对应的IP地址记录,通过A记录,可以设置不同域名指向不同的IP。

payload如下:

也可以搭一个302跳转,不过也是要有域名的 参考 :

要求host的长度小于等于5,使用如下payload:

还可找一个域名长度不大于5的域名 A 记录解析到127.0.0.1。

要求host长度小于等于3,使用如下payload:

gethostbyname 返回主机名对应的 IPv4地址。

filter_var() 过滤器要求解析出来的ip地址是有效ip,并且不是私有ip或者不是保留ip,所以之前把自己域名的A记录设置为127.0.0.1就不可行了,解析出来的ip是保留ip。

可以使用302重定向,vps搭一个:

payload如下:

还有一个方法是DNS重绑定漏洞,参考:

浅谈DNS重绑定漏洞

具体操作如下:访问 并注册用户,在这儿进行DNS重绑定:

多访问几次即可。

要求解析完的url以 . 开头,以 show 结尾,payload如下:

这样 parse_url() 真正解析出来的host是127.0.0.1, ctf. 变为了user字段,可以尝试本地解析一下:

结果如下:

可以参考:

提示是打无密码的mysql,抓包发现ssrf漏洞应该在check.php中:

输入用户名和想要执行的sql命令:

get方法的url参数,利用ssrf打redis,同上:

然后访问网站根目录下的shell.php即可。