论剑场web21 php伪协议+反序列化

摘要:
b.文件包含了$file的值,并提示包含值应该为class.php2.根据include()文件包含,可以想到的是用php伪协议读取文件,所以参数file=php://filter/read=convert.base64-encode/resource=class.php||index.php这里读取index.php和class.php的源码;而对于参数user需要满足这个file_get_contents==="admin")。解密后继续审计代码。a.index.php中文件包含结束后,要对参数$pass的值进行反序列化,并输出反序列化后的类$passb.class.php的Read类中toString()函数,将文件转换成字符串,并输出。

1. 看到题目,提示不是admin;查看源码发现部分PHP代码,审计PHP代码。
a. 这里需要输入两个参数user和file。user值需要满足不为空,并且经过函数去取文件file_get_contents($user,'r')后,需要为字符串形式的admin。
b. 文件包含了$file的值,并提示包含值应该为class.php
论剑场web21 php伪协议+反序列化第1张

2. 根据include()文件包含,可以想到的是用php伪协议读取文件,所以参数file=php://filter/read=convert.base64-encode/resource=class.php || index.php 这里读取index.php和class.php的源码;而对于参数user需要满足这个file_get_contents($user,'r')==="admin")。
3. 如果让参数user的值为一个字符串,当file_get_contents($user,'r'),如果找不到该文件,其结果为false,就算可以找到文件也不能确定文件转换为字符串之后为admin,所以这里考虑到使用php://input协议。php://input协议可以对没有经过处理的post参数值进行文件读写操作。故参数user=php://input,并且传递一个post参数 admin。
论剑场web21 php伪协议+反序列化第2张

4. 获取到index.php和class.php 经过base64加密过的源码。解密后继续审计代码。
a. index.php中文件包含结束后,要对参数$pass的值进行反序列化,并输出反序列化后的类$pass
b. class.php的Read类中toString()函数,将文件转换成字符串,并输出。并提示应读取的文件为fla9.php
论剑场web21 php伪协议+反序列化第3张

5. 构造payload,对于参数user,其值继续为php://input并传递一个post值admin;对于参数file=class.php,将class.php文件包含进来;对于参数pass应该为Read序列化后的字符串,并且其变量$file值应为fla9.php。
论剑场web21 php伪协议+反序列化第4张

6. 在其源码中获得flag

免责声明:文章转载自《论剑场web21 php伪协议+反序列化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java8的Stream API使用vi常用按键下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Ubuntu 磁盘满了处理方法。

Ubuntu磁盘已满:1.如果虚拟机安装了Ubuntu,则动态地为虚拟机安装Ubuntu的驱动器号分配一点磁盘容量。既然问题已经确定,下一步就是处理它。处理方法也很简单,即删除文件。做同样的事。经过几次判断后,找到tomcat日志文件。这个问题处理得很顺利。...

css设置文字多余部分显示省略号

如果只显示一行,则可以使用以下方法:  overflow:hidden;  text-overflow:ellipsis;  white-space:nowrap;如果需要显示多行,在需要设置的元素style中添加以下代码:  word-break:break-all;  text-overflow:ellipsis;  display:-webkit-bo...

java.net.URISyntaxException的解决办法

直接采用Stringurl=“http:count=1”;HttpGethttpget=新的HttpGet(url);HttpResponseresponse=client.execute(httpget);例如,“|”&因此,不能直接使用String而不是URI来访问。然后我们可以使用URL生成URI的方法来解决这个问题。代码如下:URLu...

Json对象转Ts类

其次,Json是一种轻量级的数据交换格式。在前端和后端之间的数据交互过程中,后端接口返回Json格式的数据,前端需要使用相应的Ts类对象来接收它。此时,如果后端提供样本数据或现有接口返回的Json格式数据,是否有方法帮助我们从Json格式数据生成Ts类?介绍了三个主要功能。1.查看Json对应的Ts类,将要格式化的Json字符串复制粘贴到中间编辑区域。单击右...

socket网络编程(二)—— 实现持续发送

exit(exit_FAILURE);}//初始化套接字元素structsockaddr_inserver_addr;intserver_len=大小(server_addr);内存集(&server_len);0){ERR_EXIT(“listenclientfail”);client_len);buffer);}//关闭套接字(m_con...

sqlite3 数据类型 批量插入

SQLite3采用动态数据类型。存储值的数据类型与值本身相关,而不是由其字段类型决定。SQLite3的动态数据类型可以向后兼容其他数据库常用的静态类型,这意味着在使用静态数据类型的数据库中使用的数据表也可以在SQLite3中使用。在SQLite2数据库中,除了声明为主键的INTEGER列外,任何列都可以存储属于任何存储类型的值。...