(在拿到webshell的时候,想办法获取系统信息拿到系统权限)
一、通过常规web渗透,已经拿到webshell。那么接下来作重要的就是探测系统信息,提权,针对windows想办法开启远程桌面连接,针对linux想办法使用反弹shell来本地连接。
① Webshell应该都可以调用系统cmd执行一些简单的命令,那么whoami(查看当前权限),netuser(查看用户/组),systeminfo(查看系统补丁修复情况)等常见命令应该是首先被执行
探测的。
I: 不具备系统权限:
① Serv-U提权,现在很多的webshell都集成了Serv-U一键提权功能,只需要点击一下就拥有了系统权限,简单快速。
② SQL Server提权,利用webshell的目录翻阅功能,查找网站根目录下的数据库配置文件,以php为例则为config.php;查看文件内容一般都会发现数据库的登陆信息用户名/密码,(密码md5或者其他的加密方式解密一下即可),通过webshell或者数据库端口开放的话利用数据库连接工具Navicat等工具来连接数据库。
连接数据库检查xp_cmdshell是否存在,扩展存储过程是否打开,再利用xp_cmdshell来执行系统命令,添加用户、开启远程桌面等。
常用命令:
select count(*) from master.dbo.sysobjectswhere xtype = ‘x’ and name=’xp_cmdshell’ 返回值是1就是有xp_cmdshell存储过程 exec master.dbo.sp_addextendedproc ‘xp_cmdshell’,’xplog70.dll’添加cmdshell(Sqlserver 2000) exec sp_configure ‘show advanced options’,1;当设置advanced options参数为1时,系统才允许修改高级选项; reconfigure; exec sp_configure ‘xp_cmdshell’,1; 开启扩展存储过程; reconfigure; (Sqlserver 2005) 通过xp_cmdshell来执行命令: exec master.dbo.xp_cmdshell ‘命令’
③ MYSQL提权,如SQL Server一样,首先找到数据库连接文件来找到数据库的登陆信息,登陆MYSQL数据库,利用MYSQL的Create Function来添加自定义函数,向mysql添加命令执行函数来执行系统命令。需要使用的文件为udf.dll。
也有一些自动化工具可以完成以上操作。
II:具备系统权限:
直接通过wehshell来执行相关命令,添加用户等操作。
② 可能遇到的障碍:
1. 无法执行cmd命令:
有可能执行的命令不具备执行权限或者system32/cmd文件自身拒绝被调用;一般可以通过自己上传cmd命令程序来解决,为当前用户权限。
2. 添加用户的命令net user /add不能被执行:
一般是由于net.exe文件不存在或者拒绝被调用导致,可通过上传net.exe文件来解决,包括tasklist等命令无法被执行时,都可以通过上传相应可执行文件来解决。
3. SQL Server扩展存储过程无法开启:
在管理员做过数据库加固的情况下,xplog70.dll文件会被管理员删除,从而不能够成功开启数据库扩展存储过程,解决方案为上传xplog70.dll文件。
4. 不能在目录下上传文件,或者上传的文件执行权限不够:
根据文件目录的执行权限,首先查找可读、可写目录,假如不好找的话,一般建议将文件上传到相应盘符的recycler文件夹内,这个文件夹在每个盘下面默认都会存在,并且具有可读、写、执行权限。
5. 新建用户成功,但是无法确定管理员组:
没有明确标识的administrator组,在新建用户加入管理员组的过成中,系统管理员已经将管理员组更名,此时需要查询管理员组名称,再在相应的组中加入。
6. 3389端口虽然打开,但是远程桌面无法连接:
一般这种情况是由于windows的防火墙进行的端口限制或者在远端服务器网络出口有安全设备如防火墙进行了外联端口限制,这个时候就要祭出前辈大神的LCX端口转发工具,对相应端口进行转发到常规使用的端口上,再从外部连接转发后的端口。
二、 没有通过常规渗透拿到webshell,但是由于中间件的配置失误,可以上传shell。
Apache,Tomcat等中间件以system权限运行,存在管理控制台manager,尝试弱口令或者暴力破解登入,可以通过控制台上传jsp、war等格式的webshell,从而进一步执行系统命令。
三、Web存在sql注入,数据库为SQLServer,通过SQL Server的特性,开启扩展存储过程XP_cmdshell,从而添加管理员用户/组,开启远程桌面。或者MYSQL存在web sql中注入,则不通过webshell翻阅文件来获取数据库连接密码,直接从外部利用数据库连接工具来进行提权。
四、利用系统已知漏洞来提权,通过wehsell执行systeminfo来确定系统打补丁的情况,从而使用metasploit来溢出提权,选择payloads来开启远程桌面。在windows下比较出名的漏洞如MS-08067,MS11-080,MS11-046等。
五、对于Linux系统:
① 在拿到webshell的前提下,一般的流程为使用相应exp或者执行上传的脚本,反弹shell出来在本地进行连接,运行提权程序获得root权限。
如 windows下一样,在Linux下首先通过webshell执行whoami来确定当前用户是什么用户,执行uname–r来确定Linux的内核版 本,依照此版本来找对应的exp;当然对应很多版本的Linux内核,都是没有exp来对用执行的,很多情况下只能无奈止步或者另辟蹊径。常用工具nc。
② 可能遇到的障碍:
1.反弹shell的时候在本地无法正常连接:
一般这种情况是由于Linux的iptables防火墙进行的端口限制或者在远端服务器网络出口有安全设备如防火墙进行了外联端口限制,这个时候就要祭出前辈大神的LCX端口转发工具,对相应端口进行转发到常规使用的端口上。
2.提权exp或者自己远程编译的脚本无法执行:
检查是否当前文件具有可读、写、执行权限,尝试修改目录、文件的权限,使用chmod u+x,假如无法修改权限的话就寻找具有相应权限的目录重新上传执行。
六、关于一句话木马:
使用webshell方式固然好处是强大的各种功能,但是webshell的缺点体现在:
1.很容易被管理员发现清除, 2.复杂冗余的功能根据不同的情况可能无法使用, 3.在web应用中上传webshell的时候困难重重。
对 于一句话木马,在web应用中可以根据情况直接插入,对应的菜刀chopper可以轻松连接一句话翻阅目录,并且可以进行数据库管理和自定义cmd路径执 行。好处主要在于不容易被查杀,并且不容易被管理员发现。在上传了webshell后,在可读可写的目录下新建一句话木马连接文件也不失为一种保存后门的 方式。同时注意隐藏,将一句话木马的文件名改名为config.php , run.php等系统文件名更具有迷惑性。