博客
关于我
2021-01-28
阅读量:305 次
发布时间:2019-03-01

本文共 1574 字,大约阅读时间需要 5 分钟。

PHP代码审计:绕过安全措施获取flag

作为一名安全研究人员,我最近在进行一项PHP代码审计任务,目标是找到如何绕过安全措施来获取flag。本文将详细描述我所发现的两个主要漏洞以及利用它们的步骤。

一、MD5三等号比较

首先,观察代码中的MD5比较逻辑:

$id = $_GET['id'];$gg = $_GET['gg'];if (md5($id) === md5($gg) && $id !== $gg) {    // 通过此条件}

这个逻辑似乎在检查两者是否有相同的MD5哈希值,但同时要求$id$gg不相等。理论上,这意味着即使$id$gg是不同的值,只要它们的MD5哈希值相同,就能通过这个检查。

但是,这里存在一个潜在的问题:如果$id$gg是数组,那么我们可以通过构造查询参数来绕过这个检查。例如:

?id[]=1&gg[]=2

这样,$id$gg都被解析为数组,每个元素分别是1和2。由于md5(1) === md5(2),所以条件将被满足。

二、是非数字判断

接下来,观察密码验证逻辑:

$passwd = $_POST['passwd'];if (!is_numeric($passwd)) {    if ($passwd == 1234567) {        // 成功验证    } else {        // 密码错误    }} else {    // 密码不是数字}

这个逻辑似乎在检查密码是否为数字,但后续又要求密码等于1234567。这里存在一个矛盾:如果密码不是数字,但等于1234567,那么它也能通过验证。

因此,通过构造一个非数字的密码但等于1234567,就可以绕过is_numeric检查。例如:

POST /flag.php?passwd=1234567

三、利用系统函数

在代码中,highlight_file函数被用来显示文件内容。然而,highlight_file可能可以被用来读取flag的位置。同时,system函数被用来执行外部命令:

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

这里,nmap被用来对目标主机进行扫描。通过构造合适的参数,可以使用nmap将扫描结果写入文件。例如:

-host=172.17.0.2 -oG /tmp/result.txt

这样,扫描结果将被写入/tmp/result.txt文件中。

四、利用转义函数

在代码中,escapeshellargescapeshellcmd被用来对输入参数进行转义,以防止恶意代码注入。例如:

$host = escapeshellarg($host);$host = escapeshellcmd($host);

为了确保命令能够正确执行,输入参数需要被正确转义。例如:

$host = '172.17.0.2';$host = escapeshellarg($host); // 转义为 '172.17.0.2'$host = escapeshellcmd($host); // 转义为 '172.17.0.2\'

最终,system函数将执行:

curl '172.17.0.2\' -v -d a=1

这可以通过蚁剑进行解析并连接到目标服务器。

五、绕过安全措施的总结

  • MD5绕过:通过构造数组参数,绕过MD5检查。
  • 密码绕过:通过构造非数字但等于1234567的密码,绕过数字检查。
  • 系统函数利用:利用nmap将扫描结果写入文件,获取目标信息。
  • 转义函数:正确使用escapeshellargescapeshellcmd,确保命令安全执行。
  • 通过以上步骤,可以成功绕过代码中的安全措施,获取flag的位置并进一步攻击。

    转载地址:http://ahlx.baihongyu.com/

    你可能感兴趣的文章
    NMAP网络扫描工具的安装与使用
    查看>>
    NMF(非负矩阵分解)
    查看>>
    nmon_x86_64_centos7工具如何使用
    查看>>
    NN&DL4.1 Deep L-layer neural network简介
    查看>>
    NN&DL4.3 Getting your matrix dimensions right
    查看>>
    NN&DL4.8 What does this have to do with the brain?
    查看>>
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    查看>>
    NO 157 去掉禅道访问地址中的zentao
    查看>>
    no available service ‘default‘ found, please make sure registry config corre seata
    查看>>
    no connection could be made because the target machine actively refused it.问题解决
    查看>>
    No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
    查看>>
    No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
    查看>>
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
    查看>>
    No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
    查看>>
    No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
    查看>>
    No module named 'crispy_forms'等使用pycharm开发
    查看>>
    No module named cv2
    查看>>
    No module named tensorboard.main在安装tensorboardX的时候遇到的问题
    查看>>
    No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
    查看>>
    No new migrations found. Your system is up-to-date.
    查看>>