webshell控制
拿到一个webshell的控制那一刻,你其实只是控制站在了门口。文件传上去了,控制一句话木马跑通了,控制浏览器里返回了熟悉的控制字符串——这算什么?连门都没推开。真正有意思的控制部分是接下来干的事:把这个小小的上传漏洞,变成对整个服务器的控制实际控制。 很多人以为webshell就是控制命令执行。菜刀连上去,控制点几下,控制whoami显示www-data,控制然后就不知道该干嘛了。控制我见过太多人卡在这一步。控制他们手里握着shell,控制却像拿着别人家钥匙站在玄关,控制不敢往里走。 先看最基本的。命令执行能拿到什么?系统信息、当前用户、网络配置。这些是基线。但你要知道,webshell进程的权限往往很低。PHP-FPM跑在www-data下面,你能读的只有web目录,能写的可能只有/tmp。这时候急着提权是新手常犯的错误——先摸清楚环境再说。 我习惯先看三样东西: 文件管理是webshell控制的核心。上传工具、下载数据、修改配置,这些操作比执行单条命令重要。有个案例我印象很深:目标机器上跑着Jenkins,webshell权限很低,但Jenkins的config.xml是可读的。里面明文存着部署用的SSH密钥。拿到密钥直接登录,权限比提权还高。这就是文件读取的价值——不需要执行命令,读对文件就够了。 再说提权。Linux提权无非几个方向:内核漏洞、SUID文件、sudo配置错误、定时任务。但webshell环境下有个麻烦事——你执行不了交互式命令。sudo -l需要tty,su需要密码输入。这时候得用python的pty模块或者socat反弹一个完整shell出来。命令是 Windows环境更复杂。webshell权限通常是IIS的应用程序池账户,能执行命令但受限。提权要看补丁情况,MS16-075这种老漏洞在没打补丁的机器上依然好用。但Windows下我更关注凭据窃取——注册表里的自动登录密码、IIS配置文件里的数据库连接字符串、浏览器保存的密码。这些比提权更直接。 持久化是另一个话题。webshell本身就不稳定,目标重启服务、清理临时文件、更新代码,你的shell就没了。所以拿到控制权后第一件事是留后门。Linux下加SSH公钥最简单,写进 内网渗透才是webshell控制的真正价值。一台暴露在公网的web服务器,往往连着内网数据库、缓存、消息队列。从webshell出发,用 最后说清除痕迹。webshell文件要删,日志要清,命令历史要抹。但别过度——删得干干净净反而引起管理员注意。我通常只删自己上传的文件和对应的access log条目。系统日志里的异常登录?留着,管理员看不过来。 控制一个webshell,本质是在别人的系统里建立一个立足点。这个点能扩展成什么,取决于你对系统的理解深度。工具只是工具,思路才是关键。uname -a确认内核版本,cat /etc/passwd看有哪些用户,ps aux看跑了什么服务。内核版本决定你有没有现成的提权exp可用。passwd文件告诉你有没有其他可攻击的账户。进程列表里藏着数据库密码、内网地址、定时任务脚本——这些东西比直接提权有价值得多。python3 -c 'import pty;pty.spawn("/bin/bash")',老手都背下来了。~/.ssh/authorized_keys就行。Windows下可以建隐藏账户,或者写一个计划任务定期回连。但要注意,后门越多暴露风险越大。我一般只留一个SSH密钥加一个备用webshell,够用了。ifconfig看网卡,arp -a看邻居,netstat -antp看连接。这些信息拼出内网拓扑。然后搭隧道,frp或者ssh -D,把内网端口映射出来。这时候你控制的就不只是一台机器,而是一个网络。
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-