XYCTF 部分web题解

1、ezhttp

打开靶机
在这里插入图片描述

使用御剑扫描得到
在这里插入图片描述

在这里插入图片描述

跟进之后,发现了账号密码,登录又得到提示
在这里插入图片描述

在这里插入图片描述
那我们使用bp抓包添加Referer即可得到下一步提示。
在这里插入图片描述

在这里插入图片描述
发现还不是XYCTF的浏览器那我们改改浏览器User-Agent:XYCTF
在这里插入图片描述
还需要本地用户,那我们在修改一个client-IP:127.0.0.1添加上去即可
在这里插入图片描述

还需要一个代理,网上查找了一下伪造代理就发现使用via即可。
在这里插入图片描述

那我们就传cookie即可

2、ezMake

打开靶机
随便输入一个ls试试看

在这里插入图片描述

这里的SHELL := /bin/bash:这行设置了 Makefile 里命令执行的 shell 环境为 /bin/bash。
ifndef PATH 和 override PATH :=:这两行检查环境变量 PATH 是否被定义,如果没有定义或
者已经被定义,它们都会将 PATH 环境变量置空。这可能会导致问题,因为 PATH 是一个重
要的环境变量,它定义了 shell 查找可执行文件的位置。
所以我们可以尝试一下echo $(< flag)试试看
在这里插入图片描述

返回一个echo,$被过滤了,那我们双写试试看。
在这里插入图片描述

3、ez?Make

打开靶机,跟1一样。
在这里插入图片描述

随便输一个看看
被过滤了,那就换一个查。
在这里插入图片描述

试试能不能cd
在这里插入图片描述

开始构造payload
在这里插入图片描述

cd . & cd . & cd . & cat /flag
检查发现cat /flag被过滤了,那我们换more,至于flag我们可以使用区间取值。
cd . & cd . & cd . & more [d-h][k-m][9-z][e-h]
在这里插入图片描述

4、εZ?¿м@Kε¿?

打开靶机
在这里插入图片描述

解析
这个命令看起来是在尝试使用两个输入重定向符号来传递输入给一个空的文件描述符。通常,
<符号用于
输入重定向,而< 是一种shell变量,表示从标准输入中读取。但是在这个命令中,$表示当前
shell的进
程ID,而<后面跟着的<又被理解为输入重定向符号。所以整个命令看起来有些混乱。
在这里插入图片描述

首先, $$ 是一个特殊的shell变量,代表当前Shell进程的ID(PID)。在Unix和类Unix系统
中,这个变量
通常用于引用当前Shell进程的ID。
然后, < 符号通常用于输入重定向,表示将一个文件的内容作为命令的输入,或者从文件中
读取内容。
接着, $< 看起来像是一个尝试使用 < 符号来读取 $ 字符后面的内容,但这在常规的shell语
法中是不被接受的。
因此,整个命令 $(<<) 似乎尝试将当前Shell进程的ID作为文件名,然后使用 < 符号将其作为
输入重定
向,但这在大多数情况下并不合法,因为Shell通常不会允许使用PID来打开文件。

5、ezmd5

打开靶机
在这里插入图片描述

上图片进行比较,那我们随便上传两个试试看
在这里插入图片描述

返回说只有jpg格式,那我们就把png换一个jpg的试试看
在这里插入图片描述

返回
在这里插入图片描述

分析一下
这段文本告诉我们两个对象在不考虑它们的MD5哈希时是相等的,但是它们的MD5哈希值是
不同的。这可能意味着虽然两个对象在某种意义上是"相等"的(例如,它们可能有相同的内容
或值),但它们在某些细节上有所不同,导致它们的MD5哈希值不匹配。
那我们百度两张MD5值相同的图片比较一下试试看
在这里插入图片描述

最后返回flag
在这里插入图片描述
在这里插入图片描述

6、ezPOP

打开靶机
在这里插入图片描述

一开始以为pop链条的构造很简单,就是cab触发,关键是calluserfunc怎么利用
测试一下发现不是这样
Payload
var_dump(call_user_func(current,hex2bin)(73797374656d)(‘dir’));
我们把对应参数赋值,c和d分别在pop链条里面进行赋值,a和b在外部
GET传参
xy=a:2:{i:0;O:3:“CCC”:1:{s:1:“c”;O:3:“AAA”:2:{s:1:“s”;O:3:“BBB”:2:
{s:1:“c”;s:12:“73797374656d”;s:1:“d”;s:9:“cat /flag”;}s:1:“a”;s:1:“g”;}}i:0;N;}
POST传参
a=current&c=hex2bin
最后得出flag
在这里插入图片描述
在这里插入图片描述

7、ezRCE

打开靶机
解析
在这里插入图片描述

这是一个白名单绕过,从whitelist = [ ′0 ′ , ′ 1 ′ , ′ 2 ′ , ′ 3 ′ , ′ 4 ′ , ′ 5 ′ , ′ 6 ′ , ′ 7 ′ , ′ 8 ′ , ′ 9 ′ , ′ ′ , ′ ’ ′ , ′ ‘,’<'];这里可以看出
能给我们输入的并不对,而且system(
cmd);是直接执行系统命令那好,现在我们来尝试构造payload首先系统命令?cmd = 肯定是要的那我
’ \154\163’,就这样,我们尝试一下能不能在liunx里面运行
在这里插入图片描述

可以看见成功运行,那我们这里的payload就可以写成
?cmd=$’\154\163’
返回
在这里插入图片描述

虽然flag不在当前目录有点可惜,但是我们知道了使用八进制构造payload是可行的
那我们怎么办呢?
直接cat /flag嘛?
那显然是不可能的,因为flag都不在当前页面你怎么cat啊
那这里去请教了一下师傅,我们虽然不能直接cat的
但是我们看见白名单里面有个<小于号
哎,是不是想起来了?
没错,我们可以使用<重定向flag
通俗易懂一点就是说
如果把它想象成一种“流动”,可以这样理解:文件 “/flag” 的内容像水一样流入了 “cat” 命令,
然后 “cat” 命令将它输出到了屏幕上。
那cat转换八进制就是\143\141\164
/flag八进制就是\057\146\154\141\147
<不变
所以我们可以这样构造payload
?cmd=$‘\143\141\164’< ‘\057\146\154\141\147’
仔细看清楚了没有空格跟括号!!!!
所以最后得出
在这里插入图片描述

8、warm up

打开靶机
在这里插入图片描述

简单分析一下
第一个条件:‘val1’ 和 ‘val2’ 必须存在,且它们的值不能相等,但他们的 md5 值必须相等。这
种情况在 PHP 中是可能的,因为 PHP 的 md5 函数对于某些特殊的字符串存在哈希碰撞。一
个常见的例子是 ‘val1’ 设置为 ’ QNKCDZO’,‘val2’ 设置为 ‘240610708’,这两个字符串的
md5 值都是 ‘0e830400451993494058024219903391’。
payload
http: xyctf.top:42998/?val1=QNKCDZO&val2=240610708
即可得到
在这里插入图片描述

第二个条件
md5必须存在,且 m d 5 的 m d 5 值必须等于 md5的md5值必须等于 md5md5值必须等于md5。这个条件只有当$md5为一个特定的值时才能满足
md5) 的条件。
在这里插入图片描述

最后还有第三个条就能解出,那我们来分析一下
在这个条件中,XY 必须等于$XY CTF,XY 不能等于 “XYCTF_550102591”,但是
XY 的md5值必须等于′′XY CTF550102591′′的md5值。然而,′′XY CTF550102591′′的md5值是′′0e77
XY 和
XY CTF的值都是′′314282422′′,所以它们是相等的。另外,′′314282422′′的md5值是′′0e8304004519
XY) 就等于 md5(“XYCTF_550102591”)。
在这里插入图片描述
访问,URL+LLeeevvveeelll222.php即可
在这里插入图片描述

使用bp抓包修改
在这里插入图片描述

直接发送到repeater修改尝试
首先,我们要满足条件 isset(
_POST[‘a’]) && !preg_match(‘/[0-9]/’, KaTeX parse error: Expected 'EOF', got '&' at position 13: _POST['a']) &̲& intval(_POST[…POST[′a′]中不包含数字,但是intval(_POST[‘a’]) 的结果为 0,
因此这个条件判断为假,进入 else 分支,打印出 “有点汗流浃背”。
接下来,我们需要执行 preg_replace(GET[′a′],_GET[‘b’],
_GET[‘c’]),并让它执行我们想要的系统命令。我们可以通过在 URL 中添加查询字符串 ?a=/abc/
_GET[‘b’] 的值就是 system(‘/ls’),$_GET[‘c’] 的值就是 abc。
preg_replace() 函数会在 $_GET[‘c’] 的值 “abc” 中查找与 $_GET[‘a’] 的值 “/abc/e” 匹配的内
容,然后使用 $_GET[‘b’] 的值 system(‘/ls’) 替换匹配到的内容。因为 $_GET[‘a’] 的值是一个
正则表达式,所以它会匹配到 $_GET[‘c’] 的值 “abc”,并执行 system(‘/ls’) 命令,最后将命令
的输出替换到 “abc” 中。
综上,我们可以通过以下 HTTP 请求来满足这个 PHP 代码的条件,并执行我们想要的系统命
令:
在这里插入图片描述

这里为什么要补上一个Content-Type: application/x-www-form-urlencoded
因为
在 HTTP 协议中,当你发送一个 POST 请求时,Content-Type 头部字段用于告诉服务器你发
送的数据的类型。application/x-www-form-urlencoded 是一种常见的数据类型,它表示发送的
数据是一个 URL 编码的表单。
在这里插入图片描述

为什么说那么详细,总的来说这是我第一次做md5的web还是有很多地方值得我反复观看且学
习,不是很复杂,但是需要耐心,慢慢寻找资料,理解其中的意思。

9、牢牢记住,逝者为大

打开靶机
在这里插入图片描述

名单绕过
构造payload
?cmd=%0dprintdir;%23
在这里插入图片描述

发现可以使用GET[‘cmd’]躲避长度限制
那我们就可以构造payload为(模仿CTFshow的)
?cmd=%0d$_GET[c];%23&c=cp /flag nn
简单来说就是把flag复制到根目录nn里面,如果我们复制成功的话,待会就可以直接访问nn来
获取flag了
在这里插入图片描述

想法固然不错,但我们还缺一个关键点,名称就是转换成为八进制然后在运行
?cmd=%0d$_GET[c];%23&c=cp /flag nn转八进制
?cmd=%0d$_GET[c];%23&c=KaTeX parse error: Undefined control sequence: \1 at position 2: '\̲1̲43\160'+‘\57\146\154\141\147’+$'\156\156’
在这里插入图片描述

然后我们在运行试试看(注意这里前后之间我们使用+链接,要不然系统读取不到)
可以看见,大差不差应该是成功了,并没有返回什么错误值
那我们就可以直接访问nn来获取文件
在这里插入图片描述

10、pharme

生成 phar 包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

成功上传,给出了文件路径,这里的文件名,应该是对原文件名取得哈希值。
/tmp/f3ccdd27d2000e3f9255a7e3e2c48800.jpg
进入 class.php
命令成功执行
在这里插入图片描述

制作不易,点个赞吧~

  • 34
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值