• CTF-WEB-PHP相关利用技术简单总结


    [PHP相关]

    基础知识补漏

    <php类型转换机制>

    php是一种弱类型语言,它支持的类型有:

    boolean,integer,float,string,array,object,callable,resource,NULL

    类型之间转换可能会发生一些有趣的事情,总结如下:

    转化成boolean

    ""(空字符串),"0"(字符串零),0(整型零),0.0(浮点零),array()(空数组),NULL,$a(尚未被赋值的变量)都会被认为是false。
    任何资源,NAN,-1,都被认为是true。

    字符串转化成数值

    如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值,其它所有情况下都被作为 float 来取值。
    该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。


    <php比较机制>

    "="和"!"即strict比较符,只有在类型相同时才相等。
    "=="和"!="即non-strict比较符。如果比较的两者类型不同,会在类型转换后进行比较:字符串在与数字比较前会自动转换为数字;两个字符串比较,如果两个都是数字形式,则同时转换为数字进行比较。

    <?php
    var_dump(0 == "a"); // 0 == 0 -> true
    var_dump("1" == "01"); // 1 == 1 -> true
    var_dump("10" == "1e1"); // 10 == 10 -> true
    var_dump(100 == "1e2"); // 100 == 100 -> true
    
    var_dump("0e123456789012345678901234567890"==="0"); //false
    var_dump("0e123456789012345678901234567890"=="0"); //true
    ?>
    

    php官网给出了"=="比较的一些例子


    <php伪协议>这里还需要进一步学习

    php伪协议在ctf中的应用

    php伪协议总结

    有的协议只在php中得到支持,故称伪协议。
    php.ini中两个与之相关的设置:allow_url_fopen和allow_url_include

    • allow_url_fopen:默认值是ON,允许url里的封装协议访问文件
    • allow_url_include:默认值是OFF,不允许包含url里的封装协议包含文件

    php://filter

    常用,任意文件读取,双OFF时可以使用。
    命令格式:php://filter/[read/write]=string.[rot13/strip_tags/…..]/resource=xxx

    php://input



    strcmp()

    在两个字符串相等的时候返回0,该函数不能处理数组,如果传入了数组参数会返回NULL。
    根据之前的类型比较,如果比较时使用了strcmp(a,b) == 0,那么(NULL == 0)是true,所以传入数组可以绕过该函数。
    防御方法是使用 === 进行严格比较。


    %00截断

    php版本小于等于5.2.9和magic_quotes_gpc关闭,两个条件都必须满足才能截断。

    影响的函数

    • include,include_once,require,require_once
    • file_exists
    • ereg,eregi(正则表达式匹配)
    • file_get_contents

    不处理截断的函数

    • strlen

    md5()

    前置知识:php变量类型

    1. 不能处理数组,md5(数组)会返回 null
    <?php 
    $a[]=1;
    echo md5($a);
    ?> 
    

    Warning: md5() expects parameter 1 to be string, array given in /tmp/45044302eb92d3bb0c8d1bed302358f3989559700dc1a118facbc80ef7f155a1/main.php on line 7

    1. 0e开头碰撞:根据比较机制的缺陷,使md5值都是0e开头即可绕过md5($a) == md5($b)这样的条件判断
    0eeeb26bc5f6ba1cae0c5885c8f82dc9 aaaab6
    0e08a88f2f1bad773e9baf987510c4c1 baaacU
    0ef2db375cda51db88635099373077f6 caaaff
    0e72bf9b806143116a4fda738b4fe6ef daaaeL
    0e253b99812c188ec8358a29f601277e eaaagQ
    0ebd40c0cd91aabcc7b321cd6b7e8c4d faaaaf
    0ea081906fea694a27c77d902b0930bc gaaaaG
    0e662ef3889bd06088261009539d0b98 haaatL
    0e3ad9d5bfcf96fbf68d32f8d8020791 iaaadW
    0e3121f7efc12a4c8a0b19419c08183c jaaagn
    0e33d9ed1175b71a0c36c8092207aa2e kaaaiX
    0e5b513ff48c0c38e9c80614e40e583f laaaaR
    0eb4ff471d1daaad0abf3d0f25890f6a maaafG
    0e8615bd2dad98219fe995f3f34fef20 naaagy
    0ee7e45c8b49a711cfbf711a2ab8f362 oaaakE
    0e45f47006f1ae77af97a2a66e63ca8b paaafB
    0ed564aef50820bd0d19aeb0c54dafea qaaagb
    0eb09dfaf39ac27929e40d7d040fad06 raaabY
    0eaa701a96dd3c7eaf8db8b5dd14d871 saaadK
    0ef8bbd0fd3a354d0c58968ba7a88347 taaac4
    0e7f13153ac56df8cd77e2af28d62fe2 uaaaax
    0e5d6c8a222b1b19657ed52e6463c0fc vaaaiK
    0e2b644762da6a8c5ed726316ccfc8b5 waaacI
    0e44238a7664e6316501f2d589dc8631 xaaadE
    0ee4bf6dcf69bced96b0af0ffc8fc542 yaaabl
    0e4ab7c28649f4690011ce5fd14e8eb6 zaaatC
    
    0ee1abcce5648ea8b4a8d265f09b24e6 Aaaact
    0ec8c912ef997ac3e8ceb23d24c9e8f9 Baaaa9
    0e421d02abfd0c8eae7e18451b8a6a08 CaaadI
    0e3d90d73011c2551feba94e2cc8a3cc Daaack
    0e4d796e0c13cc03edbb16a5a41fe04a EaaalV
    0e34068055d34f3415ae5062c3363c32 FaaaoA
    0e74a38eda13d433c42f125fe8d5ab83 GaaabG
    0ecca6beb91b292fe3f80903f3686ab1 HaaaaN
    0e6a5d1c5785cf7d16235e1a539c352b Iaaaal
    0e072722ff0b52b4d8efce5838280fda JaaacP
    0e7f073b9701f3db27e83312b41a562c Kaaakn
    0ec8c8fd26aa23c5b5933148795c3b3d LaaatJ
    0e47adc73495a965a5114d5e16b70c78 MaaaaM
    0edf7fe4e0148a52401b1951e529ae41 Naaaea
    0e94f0f84773bbd691dec8b61c0c4f67 Oaaae2
    0e79b18f75647ff7d3559beeac04c857 Paaaa8
    0e91e2497a84c108b9dd3f58c62e17cf Qaaadr
    0e312e1d7354272a0f7af98e3f12beee Raaaa4
    0e57201859c078cebf65fc4da841b7b0 Saaaea
    0e7faba6001cb0b8a930b128cea1bd28 TaaaaH
    0eaeb5168e0c16442a83dd2059bd77ae Uaaaif
    0efea2555a6bdb087a88d32b7b620cfe Vaaagr
    0ecac74e8afde8bbf370baca232400d2 Waaabo
    0ef74044fa1a333241bd00751a8d5c6b Xaaaan
    0e6d0acea3fb18c498b09ad3d04bdd0c Yaaab4
    0ed7f23534604153a96387f90cef213f ZaaabC
    0ec92f8847011379ce0c1c95d3d52677 0aaaga
    
    0e644c2d05e6d81ff04194145d497c74 1aaabw
    0e93fcef5a44bbc455bb54011b8c6b2f 2aaady
    0edfb3f3a9ab8d5ae227861e9a44b3e7 3aaacO
    0eabd2eeb3b01d5b516a4e5bc51d6a43 4aaaci
    0e1e066173172fd0eb55ac92ee4d9254 5aaabd
    0e98a9e89b8bf419701c85ec8183247c 6aaabp
    0e17990dcefa714d524be3fcab79491c 7aaaad
    0e5a9f50d8369a2bbbab1797752111f1 8aaalf
    0e2eb438bed241fdb0f6fa0d93ac86c5 9aaaaE
    
  • 相关阅读:
    设计模式学习--面向对象的5条设计原则之单一职责原则--SRP
    设计模式学习--面向对象的5条设计原则(转)
    oracle 存储过程创建报错 Procedure created with compilation errors
    查看临时表空间占用最多的用户与SQL
    查看表空间文件以及利用率、修改、删除表空间文件大小
    aliyun阿里云alibabaMaven仓库地址——加速你的maven构建
    快速配置java环境变量
    oracle 月份中日的值必须介于 1 和当月最后一日之间
    Oracle 修改dmp的表空间
    oracle 空表导出dmp会报错
  • 原文地址:https://www.cnblogs.com/RaidriarB/p/11649863.html
Copyright © 2020-2023  润新知