一、os命令执行函数
1.system()
<?php
if(isset($_GET['cmd'])){
echo "<pre>";
system($_GET['cmd']);
}else{
echo "Useage:http://IpAddress/?cmd=net user";
}
?>
2.exec()
<?php
if(isset($_GET['cmd'])){
echo "<pre>";
print exec($_GET['cmd']);
}else{
echo "Useage:http://IpAddress/?cmd=whoami";
}
?>
3.shell_exec()
<?php
if(isset($_GET['cmd'])){
echo "<pre>";
print shell_exec($_GET['cmd']);
}else{
echo "Useage:http://IpAddress/?cmd=ipconfig";
}
?>
4.passthru()
<?php
if(isset($_GET['cmd'])){
echo "<pre>";
passthru($_GET['cmd']);
}else{
echo "Useage:http://IpAddress/?cmd=ipconfig";
}
?>
5.popen()
<?php
if(isset($_GET['cmd'])){
echo "<pre>";
popen($_GET['cmd'],'r');
}else{
echo "Useage:http://IpAddress/?cmd=ipconfig > 1.txt";
}
?>
6.反引号``
<?php
if(isset($_GET['cmd'])){
$info = $_GET['cmd'];
print `$info`;
}else{
echo "Useage:http://IpAddress/?cmd=ipconfig";
}
?>
二、php代码执行函数
1.eval()
<?php
$str = "phpinfo();";
echo $str;
eval($str);
?>
2.assert()
<?php
if(isset($_GET['code'])){
$code=$_GET['code'];
assert($code);
}else{
echo "please submit code!<br>?code=phpinfo()";
}
?>
3.preg_replace()
<?php
if(isset($_GET['code'])){
$code = $_GET['code'];
preg_replace("/\[(.*)\]/e","\\1", $code);
}else{
echo "?code=[phpinfo()]";
}
?>
4.call_user_func()
<?php
if(isset($_GET['funName'])){
$fun = $_GET['funName'];
$para = $_GET['stra'];
call_user_func($fun,$para);
}else{
echo"?funName=assert&stra=phpinfo()";
}
?>
5.动态函数$a($b)
<?php
if(isset($_GET['a'])){
$a = $_GET['a'];
$b = $_GET['b'];
$a($b);
}else{
echo "?a=assert&b=phpinfo()";
}
?>
防御方法:
- 尽量不要使用eval等危险函数
- 如果不得已使用,一定要进行严格过滤
- 减少危险函数的使用,并在php.ini中修改disable_functions添加禁用的函数
- 参数的值尽量使用引号包裹,并在拼接前调用 addslashes() 进行转义