PHP语言的学习(ctfshow中web入门web93~web104)
创始人
2024-11-11 12:07:42
0

PHP语言基础知识(超详细)_php开发知识-CSDN博客

PHP特性之CTF中常见的PHP绕过-CSDN博客

浅谈PHP代码执行中出现过滤限制的绕过执行方法_php过滤绕过-CSDN博客

php代码审计(适合小白入门)_php审计入门-CSDN博客

什么是PHP?

PHP 是一种脚本语言, "PHP Hypertext Preprocessor" 的首字母缩略词 PHP 语法吸收了 C 语言、Java 和 Perl 的特点,利于学习,使用广泛,主要适用于 Web 开发领域。PHP 是一种被广泛使用的开源脚本语言,且PHP 脚本是在服务器上执行的。

PHP的审计方法

1.根据敏感关键字回溯参数传递过程(逆向追踪)
​检查敏感函数的参数,进行回溯变量,判断变量是否可控并且没有经过严格的过滤,这是一个逆向追踪的过程。

2.寻找可控参数,正向追踪变量传递过程(正向追踪)
跟踪传递的参数,判断是否存入到敏感函数内或者传递的过程中具有代码逻辑漏洞。

3.寻找敏感功能点,通读功能点代码(直接挖掘功能点漏洞)
​ 根据自身经验判断在该应用中的哪些功能可能出现漏洞。

4.直接通读全文代码

常见的PHP函数

intval()函数

php特性之intval学习小记-CSDN博客

int intval( var,base)
//var指要转换成 integer 的数量值,base指转化所使用的进制 
Note: 
如果 base 是 0,通过检测 var 的格式来决定使用的进制: 
如果字符串包括了 "0x" (或 "0X") 的前缀,使用 16 进制 (hex);否则,  
如果字符串以 "0" 开始,使用 8 进制(octal);否则,  
将使用 10 进制 (decimal)。  

第一种过滤

  

 此时就可以看出它的一个利用方式了,当过滤某个数字时,我们可以利用它的进制转换来绕过。

第二种过滤

返回值 
成功时返回 var 的 integer 值,失败时返回 0。空的 array 返回 0,非空的 array 
返回 1。 

从返回值可得,如果是一个弱比较a==b我们输入a[]=1b[]=2,此时这两个是不同的,但还都会返回1,此时也就实现了一种绕过,这是第二种绕过思路。 

第三种过滤

echo intval(42);                      // 42 echo intval(4.2);                     // 4

我们可以发现小数点后的数字会直接舍去,所以这可以作为第三种,当过滤4的时候,我们可以输入4.2来绕过 

第四种过滤

echo intval(1e10);                    // 1410065408 echo intval('1e10');                  // 1

这个呢我们发现单引号传值的时候,它只识别字母前面的一部分,当我们进行get传参时,我们其实就是默认加单引号的,所以这又是一种绕过方式。还有说一下这里不是必须是e,这里只要是字母就可以 

ctfshow做题 (93-104关)

web93

1.进行代码审计,这题主要看的是intval()函数

知识点

1.php中的"=="弱比较只比较值,不比较类型(两个等号是弱类型比较,他会将两边自动转换为同一种类型后再进行比较。) 

2.以0x("0X")开头的为十六进制

   以0开头的是八进制

方法一 使用小数绕过 

小数能够绕过前面的两个if,到intval()这里,自动转换为整数,弱比较之后,得到flag

方法二 使用进制绕过

因为这里八进制不仅能够绕过前面两个if,还能在intval()这里转换成十进制,进而得到flag

web94

1.依旧是代码审计,与上题不同的地方就是多了strpos()这个函数

知识点:

因为if(!strpos($num, "0")),所以传入的参数的第一位不能为0,如果是0,就die

方法一 使用小数绕过

因为strpos函数的特性,所以构造的小数为4476.0

方法二 使用进制绕过

因为strpos函数的特性,所以构造的进制前加上空格或者+,这两个加上并不影响

web95

1.代码审计,这题的代码与94不同的就是preg_match函数这里,多过滤了一个.

2.所以这关只能使用进制来绕过,与上面的一关相同

 

web96

1.代码审计

知识点: 

/?u=/var/www/html/flag.php         绝对路径((/var/www/html是Web服务器的默认根文件夹))
/?u=./flag.php                          相对路径 ("./"表示当前目录)
/?u=php://filter/resource=flag.php      php伪协议             

1.这里使用相对路径

web97

1.代码审计

知识点

MD5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。

在 php 中,=== 代表着强比较,不仅仅会比较值,还会比较类型。

2.使用数组绕过

web98

1.进行代码审计

知识点

1.&是引用符号,意思是:不同的名字访问同一个变量内容。php的引用是在变量或者函数、对象等前面加上&符号,PHP 的引用允许你用两个变量来指向同一个内容

2.$_GET?$_GET=&$_POST:'flag';意思:如果存在get方式,就把post的地址传给get,相当于get,只不过要利用post传一下参数

3.highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__)意思:如果有通过GET方法传参'HTTP_FLAG=flag',就highlight_file($flag)。否则highlight_file(__FILE__)

2.经过分析可得,get随便传参,post传参HTTP_FLAG=flag

web99

知识点

array函数

array_push函数

in_array函数

 注意:

  1. 这个函数的漏洞点就是如果第三个参数没有被设置或者设置为false时,那么从 haystack 比较 haystack比较 haystack比较needle时,采用的就是弱类型比较。
  2. 如果第三个参数设置为了true,那么就会同时再检查类型

1.代码审计

 

2.分析代码,就很清晰了,我们需要用POST传参内容到GET传参的文件中,这里我们利用一句话木马来解决,最后在访问该文件,进行命令执行即可。首先,get传参1.php,post写一句话木马

3.然后我们访问这个一句话木马文件,再POST执行系统命令即可获得flag。

web100

考点:

1.考察的是运算符的优先级  :&& > || > = > and > or

数字越大越先执行

2.该函数在此关卡为

$vo = $v1 and FALSE and FAlSE

1.代码审计

 

2.构造?v1=1&v2=system("ls")&v3=;

3.挨个查看,得到flag在ctfshow.php中

4. 0x2d代表是16进制的,转化一下就行

0x2d //-

web101

知识点

$class = new ReflectionClass(‘ctfshow’); // 建立ctfshow这个类的反射类 $instance = class −> newInstanceArgs(class->newInstanceArgs( class−>newInstanceArgs(args); // 相当于实例化ctfshow类

资料:php反射类_php 反射类-CSDN博客

PHP的反射类ReflectionClass、ReflectionMethod使用实例-腾讯云开发者社区-腾讯云

PHP反射类详解_php reflectionclass-CSDN博客

1.代码审计,与100关不一样的地方就在preg_match()函数这里,过滤的内容不一样,特别是 $ 和反引号这些都被毙掉了,我们只能采用反射类的方法:

2.发现最后少了一个不是数字就是字母,直接使用burp抓包爆破即可

web102

ctfshow-web入门-102_ctfshow web102-CSDN博客

Linux cat命令参数及使用方法详解-CSDN博客

知识点:

1.call_user_func — 把第一个参数作为回调函数调用, 其余参数是回调函数的参数

1.代码审计

 

2.if中需要v4为真才能往下执行,而v4要为真就是v2传的参数要为数字或者数字字符串,同时v2也是我们要写入的webshell,为了让v2为数字或者数字字符串,我们可以先把我们的webshell转换为base64编码,再把base64编码转换为16进制,这是一种办法去转换成数字。

$a='

3.构造 get:?v2=005044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.php

post: v1=hex2bin

4.查看php文件,最后查看源代码

web103

1.代码审计,与102相比就是多了preg_match这个函数,过滤掉了一些内容

2. 这个过滤并没有什么影响,使用上题的方法进行解题

3.访问php文件,最后看源代码,得到flag

web104

1.代码审计,这里涉及到shal()函数,并且这里使用的是弱比较

知识点:sha1()函数特性,sha1函数无法处理数组,遇到数组会返回NULL

2.构造 get: v2[]=1  post: v1[]=1

 

相关内容

热门资讯

专业讨论!德扑之星真破解套路(... 专业讨论!德扑之星真破解套路(辅助挂)软件透明挂(有挂了解)-哔哩哔哩;人气非常高,ai更新快且高清...
每日必看!智星德州菠萝外挂检测... 每日必看!智星德州菠萝外挂检测(辅助挂)软件透明挂(有挂教学)-哔哩哔哩1、玩家可以在智星德州菠萝外...
透视透明挂!轰趴十三水有后台(... 轰趴十三水有后台赢率提升策略‌;透视透明挂!轰趴十三水有后台(辅助挂)软件透明挂(有挂详情)-哔哩哔...
发现玩家!德扑ai助手软件(辅... 发现玩家!德扑ai助手软件(辅助挂)透视辅助(有挂教学)-哔哩哔哩;玩家在德扑ai助手软件中需先进行...
一分钟了解!x-poker辅助... 一分钟了解!x-poker辅助软件(辅助挂)辅助透视(有挂攻略)-哔哩哔哩1、每一步都需要思考,不同...
一分钟揭秘!德州最新辅助器(辅... 一分钟揭秘!德州最新辅助器(辅助挂)透视辅助(有挂攻略)-哔哩哔哩;德州最新辅助器最新版本免费下载安...
玩家攻略推荐!德州辅助(辅助挂... 玩家攻略推荐!德州辅助(辅助挂)辅助透视(有挂了解)-哔哩哔哩是由北京得德州辅助黑科技有限公司精心研...
揭秘真相!pokernow德州... 《揭秘真相!pokernow德州(辅助挂)辅助透视(有挂介绍)-哔哩哔哩》 pokernow德州软件...
五分钟了解!德州之星辅助器(辅... 五分钟了解!德州之星辅助器(辅助挂)辅助透视(有挂透明)-哔哩哔哩1、很好的工具软件,可以解锁游戏的...
推荐一款!pokermaste... 1、推荐一款!pokermaster有外挂(辅助挂)透视辅助(有挂教学)-哔哩哔哩;详细教程。2、p...