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
    
  • 相关阅读:
    Get distinct count of rows in the DataSet
    单引号双引号的html转义符
    PETS Public English Test System
    Code 39 basics (39条形码原理)
    Index was outside the bounds of the array ,LocalReport.Render
    Thread was being aborted Errors
    Reportviewer Error: ASP.NET session has expired
    ReportDataSource 值不在预期的范围内
    .NET/FCL 2.0在Serialization方面的增强
    Perl像C一样强大,像awk、sed等脚本描述语言一样方便。
  • 原文地址:https://www.cnblogs.com/iloveacm/p/13325276.html
Copyright © 2011-2022 走看看