看源码。
<?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;
}
?>
三段PHP代码。
第一段代码好理解,也不需要绕过。
第二段是可以写入文件的,所以很重要,而且其中还有一个正则表达式。
第三段有个SQL语句,( 一开始还以为SQL注入,不过没有回显点)。
根据session,判断要先解决第三段PHP代码。绕过id的限制,使session为admin。
http://111.200.241.244:59473/index.php?page=flag.php&id=1%279&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2#
这个id绕过有很多种方法,就随便试吧。
版权声明:本文为qq_42702981原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。