MRCTF2020_web(部分)
ez_bypass
1 | include 'flag.php'; |
发包
1 | POST /?id[]=123&gg[]=1 HTTP/1.1 |
你传你🐎呢
这里没有过滤.htaccess
文件,我们上传一个.htaccess
的文件,内容如下
1 | SetHandler application/x-httpd-php |
该语句作用是让Apache将其他类型文件均以php格式解析
这样的话我们上传一张图片,内容为一句话木马,蚁剑连接即可得到flag
PYwebsite
访问flag.php,然后加上X-Forwarded-For:127.0.0.1
就可以获得flag
Ezpop
题目源码如下
1 | Welcome to index.php |
我们先回溯找,怎么样才能得到flag呢?
我们先看Modifier
1 | class Modifier { |
这里有append
方法,存在任意文件包含漏洞,所以怎么才能调用这个方法呢?这里有__invoke
方法,我们要能把该类当作函数调用即可触发
跟进,找到Test类
1 | class Test{ |
这里我们只要把$this->p=new Modifier
即可,那么怎么触发__get
方法呢?
当一个对象调用无权限访问到的属性或者不存在的属性的时候就会触发__get
方法
接着跟进Show类中的__toString
方法,我们只要$this->str=new Test
即可触发__get
方法
1 | public function __toString(){ |
那么怎么触发__toString
方法呢?
当一个类被当作字符串的时候,就会触发该方法
在Show类中,我们只需要让$this->source=new Show
,这样即可触发
1 | public function __construct($file='index.php'){ |
运行下面代码,然后传值即可
1 |
|
套娃
1 | <!-- |
发包
1 | GET /?b+u+p+t=23333%0a HTTP/1.1 |
然后是
jsfuck弹窗
post me Mera后,得到secrettw.php
源码
secrettw.php
1 |
|
写个unchange函数,因为读取数据的时候,会使用change函数,这样我们不能正常读取数据
1 | function unchange($v){ |
发包即可
1 | POST /secrettw.php?2333=php://input&file=ZmpdYSZmXGI= HTTP/1.1 |
Ezaudit
网站存在www.zip
备份文件
index.php
1 |
|
这里要得到private_key
,很明显,我们要爆破得到种子,运行下面的代码
1 |
|
得到指定格式后,我们去爆破种子
1 | time ./php_mt_seed 36 36 0 61 47 47 0 61 42 42 0 61 41 41 0 61 52 52 0 61 37 37 0 61 3 3 0 61 35 35 0 61 36 36 0 61 43 43 0 61 0 0 0 61 47 47 0 61 55 55 0 61 13 13 0 61 61 61 0 61 29 29 0 61 |
得到种子为1775196155
exp.php
1 |
|
至于这里为什么要先调用public_key()
,因为源码里调用了public_key()
,这就意味着伪随机数的前16位是public_key
,后12位才是private_key
就做了这么多,剩下的两题有点难,会继续努力(逃~