代码执行漏洞
- 代码执行漏洞原理
应用程序在运行时,未对用户输入进行严格过滤,导致攻击者输入的恶意代码被服务器端解析执行。
1、用户输入直接拼接进可执行代码;
eval()函数滥用(php、JavaScript)等:eval函数会将其输入的字符串直接当作代码来执行。

动态函数调用:$func=$_GET['action'];$func();//如果用户输入action=system&cmd=whoami,可能执行系统命令。
反序列化漏洞:不当的反序列化操作可能导致对象中的恶意方法被自动调用。
2、使用了危险函数;
系统命令执行函数:****
PHP:system(),exec(),passthru(),shell_exec(),反引号`,popen()
Python:os.system(),subprocess.call()
Java:Runtime.getRuntime().exec()
代码执行函数:
PHP:eval(),assert(),
JavaScript:eval(),setTimeout().setInterval()和function()构造函数。
3、组件/框架特性或漏洞 - 代码执行危害
1、接管服务器webshell,获取文件的读写权限
2、执行系统命令,查看服务器上的敏感文件、数据库配置、用户信息等。
cat /etc/passwd 读取系统用户
ls -la /var/www/html 查看网站目录
3、窃取敏感数据:直接读取数据库配置文件,进而连接数据库,下载所有业务数据(用户信息、订单、密码哈希等)。
4、内网渗透
5、篡改网站内容:deface篡改首页,发布违法信息,损害企业声誉。
6、植入后门和挖矿木马:利用服务器进行挖矿
7、导致服务器中断: rm -rf /等危险命令,删除服务器所有文件,导致业务彻底瘫痪。 - 代码执行漏洞修复
1、尽量避免使用危险函数,
2、严格的输入验证和过滤。对用户输入进行白名单验证,只允许通过符号预期的格式。
严格的数据类型检查,如果参数时数字,就用强类型转换为整型。
3、转义特殊字符,
4、避免直接拼接用户输入,使用安全的方式调用函数或命令。使用接受参数数组的函数来代替字符串拼接。
5、最小化权限原则,严格限制该用户对文件系统的访问权限。
6、及时更新和修补
7、使用waf防火墙,代码审计。 - 代码执行漏洞经常出现在哪里?
将用户可控的输入与代码逻辑混合的地方
1、直接执行字符串代码的函数
eval()、assert()、动态函数调用、system、exec、passthru、popen、proc_open、unserialize等关键词。
2、系统命令执行函数

3、反序列化函数漏洞

4、表达式语言EL注入

5、动态包含文件

功能/业务层面常见存在点
1、管理后台功能
网站主题/模板编辑:允许管理员编辑文件(.php、.vm等),如果过滤不严,可直接写如php代码。
自定义插件/模块安装:允许上传Zip压缩包并自动解压缩,如果压缩包内含有恶意php文件,且解压路径可知,就可构成代码执行。
数据库操作:执行SQL语句的功能,如果后端使用危险函数调用(如exec())来执行命令行数据库工具(如mysqldump),可能构成命令注入。
系统设置:允许修改系统路径,执行命令等配置的地方。
2、文件上传功能
3、输入输出与渲染功能
数据转换工具:输入Json字符串转换为对象的功能,可能不当使用eval()/
4、网络服务与API接口
反序列化端点或远程协议处理:应用程序处理某些URL协议(ldap://、dict://、gopher://)底层库可能存在漏洞,导致代码执行。

- 如果存在代码执行漏洞,如何进行利用
确认漏洞——获取命令执行——建立通信——提权&持久化——内网渗透——清理痕迹
1、确认执行权限和上下文
执行whoami:查看当前Web服务的运行用户(如www-data,nobody,iis apppool\defaultapppool)。
执行pwd或cd:查看当前工作目录,通常是Web根目录。
执行ifconfig/ipconfig:查看服务器IP地址,判断它是否处于内网中。
2、探测限制:
禁用函数:执行打印phpinfo()的php代码,查看disable_functions配置项,确认那些危险函数被禁用。
开放端口/出网限制:尝试ping或curl命令来探测服务器是否能访问外网
字符过滤:空格、引号、分号、$等特殊字符是否被转义或删除。

3、获取shell-建立交互式命令行
目标出网(能连接外网)-最佳情况
让服务器主动连接监听设备
1、使用nc反弹shell,在你的公网VPS上监听一个端口:nc -lvnp 4444

2、nc不可用,使用其他语言反弹shell


3、下载并执行shell
如果命令执行受限,可以先写一个webshell到web目录。
使用curl或wegt从你的服务器下载一个一句话木马

然后使用中国蚁剑、冰蝎、哥斯拉等工具连接http://目标.com/images/shell.php。
** 目标不出网-比较复杂**
无法反弹shell,需要建立正向连接或利用webshell。
1、写入一个webshell,直接利用代码执行漏洞将php代码写入web目录。

2、建立正向shell,在目标机器上监听一个端口,并绑定shell

主动连接目标服务器的这个端口:nc 目标IP 4444。(需要目标防火墙允许入站连接)
3、利用DNS、ICMP等协议隧道出网:
如果严格限制TCP/UDP出网,但DNS解析可用,可以使用DNS隧道工具来建立命令通道。
4、后续利用
1、信息收集
系统信息:uname -a,cat /etc/issue,cat /etc/release
用户信息:cat /etc/passwd ,id,who -a,lastlog
网络信息:ifconfig,arp -a,netstat -antp查看网络连接、开放端口、内网网段。
进程信息:ps aux查看运行服务
查看敏感文件:数据库配置文件(config.php,web.config),用户历史文件(.bash_history),SSH密钥(.ssh/目录)
2、权限提升
根据收集到的系统内核版本、运行的服务等信息,寻找本地提权漏洞,检查是否由sudo权限:sudo -l
3、内网横向移动
使用nc ssh等工具进一步探测和攻击内网中的其他机器,数据库、文件服务器、管理后台等。
nmap、fscan、hostscan等工具进行内网探测。
4、持久化:定时任务、写入ssh公钥、修改webshell为不死马、安装rootkit等。

浙公网安备 33010602011771号