代码执行漏洞
原理
黑客可以插入并可以执行代码的地方
根据所用代码语言文件种类区别开,一般有 Java,Python,Php 等
创建一个 php 文件
<?php
$code=$_GET['x']; //$_GET['x']一个以 GET 方法运行的参数 x
eval($code); //eval 内的字符串当作 php 代码来执行
>
当访问这个页面的时候
http://127.0.0.1/xxx.php?x=phpinfo();
即phpinfo()作为 php 代码进行运行,显示 php 数据
或者
http://127.0.0.1/xxx.php?x=echo 123
页面就输出123
也可以利用 php 创建文件并写入服务器,例创建代码
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Bill Gates\n";
fwrite($myfile, $txt);
$txt = "Steve Jobs\n";
fwrite($myfile, $txt);
$txt = "<?php eval($_GET['a'])>";
fclose($myfile);
?>
命令执行漏洞
原理
黑客可以执行计算机系统命令的地方如ls
,cat
,cd
一般跟所在系统环境区别,有 window,linux
创建一个 php 文件
<?php
$code=$_GET['x']; //$_GET['x']一个以 GET 方法运行的参数 x
echo system($code) //system(),方法内的字符串以指令运行
>
http://127.0.0.1/xxx.php?x=ls
漏洞检测
白盒
可以通过查看源代码代码审计,找到是否有$_GET['a']
,system()
等漏洞函数来利用
黑盒
-
通过漏洞扫描工具扫描出可能存在的漏洞,浏览器找到相关漏洞的破解 payload
-
查看参数值后面是否带有函数运行比如
?a=echo 123
是否可以改变成?a=echo system('ls')
漏洞形成条件
可控变量
通过网站的参数值来改变变量值, php 文件下的任一参数
漏洞函数
根据使用的函数的不同从而形成不同的漏洞,比如eval()
形成代码执行漏洞,system()
形成命令执行漏洞,upload()
形成 XSS漏洞
小知识点:根据页面的功能去判断可能存在的漏洞,例如可能需要进行增删CRUD 的页面就可能有 SQL 漏洞
漏洞防护
- 敏感函数
system()
,eval()
,exec()
,shell_exec
等禁用 - 正则表达式
- 黑名单,白名单
- WAF