代码执行漏洞

  • 代码执行漏洞原理
    应用程序在运行时,未对用户输入进行严格过滤,导致攻击者输入的恶意代码被服务器端解析执行。
    1、用户输入直接拼接进可执行代码;
    eval()函数滥用(php、JavaScript)等:eval函数会将其输入的字符串直接当作代码来执行。
    image
    动态函数调用:$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、系统命令执行函数
    image
    3、反序列化函数漏洞
    image
    4、表达式语言EL注入
    image
    5、动态包含文件
    image
    功能/业务层面常见存在点
    1、管理后台功能
    网站主题/模板编辑:允许管理员编辑文件(.php、.vm等),如果过滤不严,可直接写如php代码。
    自定义插件/模块安装:允许上传Zip压缩包并自动解压缩,如果压缩包内含有恶意php文件,且解压路径可知,就可构成代码执行。
    数据库操作:执行SQL语句的功能,如果后端使用危险函数调用(如exec())来执行命令行数据库工具(如mysqldump),可能构成命令注入。
    系统设置:允许修改系统路径,执行命令等配置的地方。
    2、文件上传功能
    3、输入输出与渲染功能
    数据转换工具:输入Json字符串转换为对象的功能,可能不当使用eval()/
    4、网络服务与API接口
    反序列化端点或远程协议处理:应用程序处理某些URL协议(ldap://、dict://、gopher://)底层库可能存在漏洞,导致代码执行。
    image
  • 如果存在代码执行漏洞,如何进行利用
    确认漏洞——获取命令执行——建立通信——提权&持久化——内网渗透——清理痕迹
    1、确认执行权限和上下文
    执行whoami:查看当前Web服务的运行用户(如www-data,nobody,iis apppool\defaultapppool)。
    执行pwd或cd:查看当前工作目录,通常是Web根目录。
    执行ifconfig/ipconfig:查看服务器IP地址,判断它是否处于内网中。
    2、探测限制:
    禁用函数:执行打印phpinfo()的php代码,查看disable_functions配置项,确认那些危险函数被禁用。
    开放端口/出网限制:尝试ping或curl命令来探测服务器是否能访问外网
    字符过滤:空格、引号、分号、$等特殊字符是否被转义或删除。
    image
    3、获取shell-建立交互式命令行
    目标出网(能连接外网)-最佳情况
    让服务器主动连接监听设备
    1、使用nc反弹shell,在你的公网VPS上监听一个端口:nc -lvnp 4444
    image
    2、nc不可用,使用其他语言反弹shell
    image
    image
    3、下载并执行shell
    如果命令执行受限,可以先写一个webshell到web目录。
    使用curl或wegt从你的服务器下载一个一句话木马
    image
    然后使用中国蚁剑、冰蝎、哥斯拉等工具连接http://目标.com/images/shell.php。
    ** 目标不出网-比较复杂**
    无法反弹shell,需要建立正向连接或利用webshell。
    1、写入一个webshell,直接利用代码执行漏洞将php代码写入web目录。
    image
    2、建立正向shell,在目标机器上监听一个端口,并绑定shell
    image
    主动连接目标服务器的这个端口: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等。
posted @ 2025-09-05 17:26  予遂计划  阅读(79)  评论(0)    收藏  举报