【1】CTF |
您所在的位置:网站首页 › ctf中web的php解题方法 › 【1】CTF |
该文章内容为本人个人学习中的记录和理解,部分内容可能有些出入,但值得新手一读并结合互联网搜索理解和学习更多的知识。本人恳切的希望各位读者能从本文章中有所收获,并希望各位读到纰漏之处不吝赐教,非常地感谢。 CTF中WEB 类的题目包括但不限于:SQL 注入、XSS 跨站脚本、CSRF 跨站请求伪造、文件上传、文件包含、框架安全、PHP 常见漏洞、代码审计等。 弱类型问题在PHP中: == 会先将两遍的数据进行类型转换再比较; === 会先判断类型是否相等再比较数据是否相等 两个等号( == )数据转换的规则是: 数字和字符串比较:先将字符串转化成数字,从字符串的第一个位字符开始,如果不是数字,则该字符串转换为数字0;如果是数字,一直往下数到最近的不是数字的字符为止。 举例如下: "admin" == 0"admin123" == 0"123admin" == 123"123ad111" == 123"0e123456" == "0e999999"只有0e后面全为数字的两个字符串才会相等,如果是 0e123abc、0e111abc、0e123456 则互不相等,但都和数字0 弱相等,即: 0e123abc != 0e111abc != 0e1234560e123abc == 0 0e111abc == 0 0e123456 == 0当字符串作为数字取值时,包含“.”、“e”、“E”(科学计数法)的字符串会被认为是float类型,其他情况都视为int类型,举例如下: 1+"10.5"== 11.5(float)1+"-1.1e1" == -10(float)1+"123ad111" == 124MD5的弱相等方法1、PHP处理0e开头的md5哈希值时的缺陷问题,两个0e开头的哈希值在比较时都被认定为数字0,如下: $a != $b; md5($a) == md5($b) //部分0e开头的MD5哈希值: //7197546197 :0e915188576072469101457315675502 //ABJIHVY : 0e755264355178451322893275696586 $a == md5($a) // 以0e开头,其md5值也是以0e开头的值:0e215962017 :0e291242476940776845150308577824方法2、以数组的形式将数据转化为MD5哈希值,会返回NULL md5(array($a)) //返回值为 NULL md5(array($b)) //返回值为 NULL md5(array($a)) === md5(array($b)) // 强相等强相等的md5: $id[]=123; $gg[]=456; var_dump($id===$gg); // false var_dump(md5($id)===md5($gg)) // trueRCE(远程命令执行漏洞)RCE(remote command/code execute)远程命令执行漏洞 在操作系统上执行任意命令 如php中的 style()、exec()、shell_exec()等函数方法 $ip = 127.0.0.1;ls -l; // 中间的分号可以隔开两次命令,两次命令都会执行 // cmd1;cmd2 执行cmd1后,执行cmd2 // cmd1&&cmd2 cmd1执行成功后才会执行cmd2 // cmd1||cmd2 cmd1执行失败后才会执行cmd2 // cmd1|cmd2 cmd1命令的结果作为cmd2命令的参数,执行获得cmd1参数后的cmd2 // %0a %0d 换行符 system("ping -c 4".$ip)字符过滤问题: 空格绕过使用: ${IFS}、${IFS}$、$IFS$9、重定向符和 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |