代码执行
原理
运用脚本语言,去进行一些代码的执行
举例
执行函数:eval() assert()
假设网站有eval()这个函数的话,
<?php
$code=$get['x']
echo eval($code)
>
假设在x输入phpinfo()这个函数,eval函数是把里面的字符串按照php代码来计算,那么就会执行phpinfo()的函数代码
检测
黑盒测试:1,漏扫工具 2,公开漏洞 3,手工有参数及功能点(例如url中有echo id=这样的就可以考虑代码执行,但是假设是echo `$get[a]`的话就要考虑是命令执行,因为``在linux中会先执行``里面的语句,再执行外面的语句,get[a]中a输入ls,那么会执行ls的语句,再将ls执行的语句进行一个echo的输出
产生
web源码
thinkphp eyoucms wordpress
中间件
Tomcat Apache strusts redis
其他环境
PHP-CGI Jenkins-CI Java RMI
防御
1,敏感函数的禁用
2,变量过滤或固定
3,WAF产品
一句话后面webshell(菜刀的原理)
一句话是:
<?php @eval($_post['chopper']?>
将需要执行的php代码赋予给chopper,那么就会进行代码执行,比如说将打开一个文件写一个php的代码,并进行编码,将这个编码值传递给chopper,那么就会进行代码执行,打开这个文件
@的作用是不显示错误,当出现错误时不会显示
命令执行
原理
# 执行函数
system() exec() ``反引号()
# 命令执行分隔符
windows: && || & |
linux: && || & | ;
# windows
| 直接执行后面的语句 ping 127.0.0.1|whoami
|| 前面出错执行后面的 ,前面为假 ping 2 || whoami
& 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami
&&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami
# linux
; 前面的执行完执行后面的 ping 127.0.0.1;whoami
| 管道符,显示后面的执行结果 ping 127.0.0.1|whoami
|| 当前面的执行出错时执行后面的 ping 1||whoami
& 前面的语句为假则直接执行后面的,前面可真可假 ping 127.0.0.1&whoami
&&前面的语句为假则直接出错,后面的也不执行,前面只能为真 ping 127.0.0.1&&whoami
根据系统的不同,例如linux和windows,例如windows的cmd功能,可以根据这个来进行命令执行
<?php
$code=$get['x']
echo system($code)
>
假设在x处输入ipconfig,system()函数的作用是执行外部程序并显示输出资料,会执行cmd程序的代码,那么输入ipconfig就会显示出ip的一些信息
举例
假设是inux系统,要求Ping一个地址,当网页限制输入只能输入ip地址时,可以运用linux管道符 “|”,管道符用于多条命令的处理,这时候可以抓包将数据改成ip地址|ls
产生
web源码
Nexus webmin ElasticSearch
中间件平台
Webblogic Apache
其他环境
Postgresql samba supervisord