当然又是熟悉的界面,熟悉的ics题目,熟悉的只能点击一个页面
这里进来有一个view-source 点击看看
是一堆代码。我们进行尝试审计
<?php
session_start();
if (!isset($_GET[page])) {
show_source(__FILE__);
die();
}
if (isset($_GET[page]) && $_GET[page] != 'index.php') {
include('flag.php');
}else {
header('Location: ?page=flag.php');
}
page不能为空,同时,他的值不能等于index.php这样,就会包含flag.php文件 否则重定向到flag.php这个文件
<?php
if ($_SESSION['admin']) {
$con = $_POST['con'];
$file = $_POST['file'];
$filename = "backup/".$file;
if(preg_match('/.+\.ph(p[3457]?|t|tml)$/i', $filename)){
die("Bad file extension");
}else{
chdir('uploaded');
$f = fopen($filename, 'w');
fwrite($f, $con);
fclose($f);
}
}
?>
我们来看第二块儿 判断session的是不是admin,然后获取到一些值, 匹配.php3457,pht,phtml 如果匹配到,那么就结束 如果没有匹配到,那么就写入文件
<?php
if (isset($_GET[id]) && floatval($_GET[id]) !== '1' && substr($_GET[id], -1) === '9') {
include 'config.php';
$id = mysql_real_escape_string($_GET[id]);
$sql="select * from cetc007.user where id='$id'";
$result = mysql_query($sql);
$result = mysql_fetch_object($result);
} else {
$result = False;
die();
}
if(!$result)die("<br >something wae wrong ! <br>");
if($result){
echo "id: ".$result->id."</br>";
echo "name:".$result->user."</br>";
$_SESSION['admin'] = True;
}
?>
这里判断id是否存在, floatval这里用的!==,所以类型也要比较,后变为字符串string,前面为数值float,所以肯定不相等。 substr用来返回子串 然后进行数据库的查询,并且进行了转义
因此我们这里就需要满足所有需求
我们查询id的时候,发现有了admin的session
?page=flag.php&id=1xx9
这里因为只要他的最后一位是9即可进行绕过
这里同时利用了php的弱类型相等,因此可以进行查询语句
我们就可以进行上传木马了 因为他过滤很严格,我们只能进行解析漏洞 00截断啊,之类的
我们发现这里上传的并没有存进来,必须通过网页来上传,因为那里有者session
apache2.x的解析漏洞
1.php.xxx会被当作php来解析,那么我当时上传的时候,并没有能够成功,
我们换另一种上传方式
其中 .. 代表当前目录的父目录 , .代表当前目录,所以这里的c.php/b.php/..也就是访问b.php的父目录,也就是 c.php
但是我这里死活连不上,
只能这样来表示可以了吧
我们上传可以往父级目录上传,我估计他可能父级目录可以进行操作
他只留下了数字