【1】CTF

您所在的位置:网站首页 ctf中web的php解题方法 【1】CTF

【1】CTF

2023-05-13 15:02| 来源: 网络整理| 查看: 265

该文章内容为本人个人学习中的记录和理解,部分内容可能有些出入,但值得新手一读并结合互联网搜索理解和学习更多的知识。本人恳切的希望各位读者能从本文章中有所收获,并希望各位读到纰漏之处不吝赐教,非常地感谢。

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