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
原文地址:https://www.cnblogs.com/RaidriarB/p/11649863.html