首页 > 后端开发 > 正文

ctf中php函数 【从零开始学CTF】8、Webshell与文件上传

2024-11-29 16:33:56 | 我爱编程网

最近经常有小伙伴私信询问ctf中php函数 【从零开始学CTF】8、Webshell与文件上传相关的问题,今天,我爱编程网小编整理了以下内容,希望可以对大家有所帮助。

本文目录一览:

ctf中php函数 【从零开始学CTF】8、Webshell与文件上传

php 弱类型问题

PHP是简单而强大的编程语言,提供了Web适用的语言特性,其中变量的弱类型机制允许为变量赋任意类型值。PHP拥有八种基本变量类型:布尔型、整型、浮点型、字符型、数组、对象、资源以及特殊类型。定义变量时无需指定类型,这使得在CTF Web题目中,通过分析代码,结合PHP弱类型特性绕过安全验证成为可能。



在PHP中,相等比较包括两种方式:`==`和`===`。`==`会将两个变量的类型转换为相同后再进行比较,而`===`则在比较前先检查变量类型是否一致。`gettype()`函数可用于查看变量类型,而`settype()`则可以设定变量类型。



当比较一个整型和字符串时,`==`比较结果取决于字符串的开始字符。例如,当比较`$a = "1"`和`$b = "1admin"`时,PHP会将`$b`视为整数1进行比较,而`$b = "admin1"`时,则将`$b`视为整数0进行比较。



空值判断函数`empty()`和存在性判断函数`isset()`在处理字符串和数字时存在差异,这在CTF题目中可以利用。例如,通过MD5加密的特定字符串开头为`0e`,这些字符串在`==`判断中可能会绕过安全验证。



下面是一些可以绕过的MD5值示例:



  1. 数字开头字符串:`QNKCDZO 0e830400451993494058024219903391`

  2. 纯数字:`240610708 0e462097431906509019562988736854`

  3. 纯字母:`QLTHNDT 0e405967825401955372549139051580`



字符串处理函数`strcmp()`在比较数组时,尽管会引发错误,但依然会进行比较,利用这一点,可以绕过某些安全验证。例如,通过在`payload`中输入`password[]=xxx`,可以绕过不规范的字符串比较。



`in_array()`和`array_search()`函数在处理数组时,如果未提供`strict`参数,通常使用松散比较。设置`strict`为`true`可进行严格过滤,避免误判。



在`switch`语句中,当进行数字类型比较时,参数会被自动转换为整型。这可能在某些情况下导致逻辑错误。



总结:PHP的弱类型特性虽然提供了灵活性,但也可能引入安全问题。在CTF挑战中,开发者需注意函数使用规范,确保对变量类型进行充分校验。尽管在企业级PHP应用中这类漏洞较少见,但在开发过程中仍需关注安全细节,避免逻辑性错误。通过深入理解PHP特性,开发者可以避免潜在的安全风险。



参考资料:



  1. cnblogs.com/Mrsm1th/p/6...

  2. blog.csdn.net/kalbertle...

ctf中php函数 【从零开始学CTF】8、Webshell与文件上传

【从零开始学CTF】8、Webshell与文件上传

大家好,我是H1TerHub的Rman,对网络安全有浓厚兴趣,我们在学校成立了专注于CTF竞赛的战队。鉴于许多同学初涉此领域,我打算分享一些入门课程,每周更新一次,帮助大家理解和参与这个比赛,也欢迎大家一起交流学习。

关于Webshell,它是个术语,意味着通过Web服务获取服务器操作权限,通常以动态脚本形式存在,有时被视为网站管理工具。一方面,站长会用它进行网站和服务器管理,如编辑脚本、上传文件等;另一方面,恶意用户利用它控制服务器,常见的有asp、php或.NET脚本木马。

Webshell利用的核心原理在于利用PHP的某些内置函数,如`eval()`,通过POST请求传入自定义指令,如`c=phpinfo()`,执行服务器上的命令。常见方法包括火狐的hackbar工具手动构造指令,或者借助工具如中国菜刀进行文件上传,通过修改文件后缀、禁用JS验证、绕过黑名单等手段上传Webshell。

中国菜刀是一个图形化的工具,通过设置参数上传Webshell,如设置文件类型为PHP。然而,上传前需要学会如何绕过服务器的文件上传限制,如通过禁用JS、字符编码转换、MIME类型欺骗或隐藏在图片中等方式。

在代码审计环节,理解上传验证逻辑至关重要,如通过操纵提交数据来找到漏洞点,如上述实验题中所示的绕过后缀检查。通过分析源码,找出并利用潜在的逻辑漏洞进行文件上传。

Web小白的CTF自学笔记(5)——PHP基础

我爱编程网(https://www.52biancheng.com)小编还为大家带来Web小白的CTF自学笔记(5)——PHP基础的相关内容。

PHP Tutorial (w3schools.com)

在自学PHP基础的过程中,需要掌握大量漏洞函数。若不想记忆,可以参考我编写的插件来辅助学习。

@符号用于禁止错误输出的回显。

$符号是取址符,用于获取名为a的变量的值。

使用反引号`包裹的字符串会被当作系统命令执行,但无回显,需要通过echo来显示结果。

字符串有四种表示方法:单引号、双引号、花括号和以反引号开头。

变量名可以是$a、${'a'}或${a}(带警告)。

函数名可以是字符串变量或字符串(带"或')。

在PHP 7和8中,函数名可以用不带'、不带"的字符串通过()表示。

在PHP 5和7中,索引字符串可不带'或"。

在PHP 5和PHP 7中,{}可替代[]作为索引符。

关于弱比较漏洞函数intval,它将字符串解析为整型,将小数去尾,但传入非空数组返回1,空数组返回0。

PHP通常使用IEEE 754双精度格式,当小数小于10^-16后,PHP对于小数就大小不分了。

preg_match函数用于正则匹配字符串,传入数组返回false。

PHP为了防止正则表达式的拒绝服务攻击(reDOS),给pcre设定了一个回溯次数上限,可以通过var_dump(ini_get('pcre.backtrack_limit'));查看当前环境下的上限。

eregi函数在PHP 5中不区分大小写地搜索字符串,可被00截断,在PHP 7中已修复。

in_array函数用于判断数组中是否存在指定的值。

strcmp函数用于比较两个字符串,如果第一个字符串小于第二个字符串返回-1,如果大于返回1,如果相等返回0。

is_numeric函数用于判断变量是否是数字或数字字符串。

basenamemd5函数用于获取字符串的MD5值。

0e漏洞:'0e...'字符串在!= ==比较时会当作0。

MD5值强相等(非字符串):使用FastColl实现字符串强碰撞。

sha1函数在传入数组或无参数时返回NULL。

伪随机数可以使用php_mt_seed - PHP mt_rand() seed cracker破解。

include函数允许文件名结尾有空格。

include_once函数与include的区别在于,当用include_once重复包含时,需要在路径前加上。

import_request_variables函数指定导入GET请求中的变量。

register_globals变量当php.ini中register_globals=ON时,提交test.php?auth=1,$auth变量将自动得到赋值。

parse_str函数和mb_parse_str()解析URL中的querystring,将变量保存到后端环境中。

get_defined_vars()函数返回数组,包含所有变量名和值。

get_defined_functions()函数在PHP7和8中可用。

ReflectionClass类用于实例化Obj类。

$_SERVER[QUERY_STRING]和$_SERVER[REQUEST_URI]中的GET参数不会被URL解码。

$_REQUEST函数会同时获取GET和POST参数。

文件读取函数echo new FilesystemIterator(getcwd());查看当前目录。

路径本地文件路径子文件夹/../本地文件=本地文件,某些系统中,存在/../本地文件=本地文件。

/proc/self/cwd指当前进程的目录。

网络URL路径 可访问到 。 我爱编程网

以上就是我爱编程网小编整理的内容,想要了解更多相关资讯内容敬请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“ctf中php函数 【从零开始学CTF】8、Webshell与文件上传”相关推荐