在MSSQL数据库中,SA权限代表了数据库的顶级控制权,几乎等同于掌握了整个服务器的命脉。本文将探讨如何利用SA权限结合NBSI(一款经典的SQL注入工具)的上传功能,逐步获取WebShell。但在开始操作前,必须确认满足以下三个条件,缺一不可:
条件一:目标站点存在SQL注入漏洞,且数据库为MSSQL;条件二:当前数据库连接账户必须拥有SA权限;条件三:网站后台必须包含一个支持文件上传的功能模块。这三个条件看似简单,但在实际渗透中,许多站点往往不满足最后一条,因此需要提前探测清楚。
举例来说,假设我们有一个测试目标:hxxp://www.6x36x.com/fangchan/listpro.asp?id=53。使用NBSI扫描后,很快就能发现数据库是MSSQL,且权限为SA,前两个条件已满足。接下来验证第三个条件:寻找一篇新闻或文章页面,查看其中的图片URL。例如,发现图片地址为hxxp://www.6x36x.com/admin/uploadpic/2xx5042823082994329.gif,这表明后台确实存在文件上传功能,且上传路径为/admin/uploadpic/。该路径本身就是一个重要线索。
条件全部满足后,下一步是获取网站的真实物理路径。这需要借助NBSI的NB Commander(或NB Tree_List)功能。推荐使用NB Commander,因为后续还需用它执行命令。寻找路径需要耐心,但通常都能找到。例如,最终找到的路径为D:\9x3x9。
获得物理路径后,接下来寻找后台登录地址。通常后台地址为Admin/login.asp,很快就找到了。然后尝试猜解账号和密码。但这次猜解过程遇到了问题——无论怎么尝试,账号和密码都像是空的,直接登录却失败。这令人困惑。此时,NB Commander的价值得以体现:它不仅能列出目录,还能直接读取文件内容。使用命令type D:\9x3x9\admin\logining.asp查看登录页面源码,发现代码逻辑并无问题,使用的是admin表,字段也正确。那么为什么猜解不出来?如果有知道原因的朋友,欢迎指教,这里暂且留下一个悬念。
既然无法进入后台,如何上传图片呢?尝试使用NBSI的上传功能直接传送文件,但失败了——上传后代码每行重复三次,原因不明。使用其他工具(如Getwebshell)也得到相同结果。此时想到,后台可能使用了Session验证。于是再次使用type D:\9x3x9\admin\quanxian.asp查看权限验证文件,发现它给Session变量Session("wsl")赋值为1。明白了,只要伪造这个Session就能绕过登录。于是编写了一个简单的ASP文件,通过NBSI的上传功能上传,保存为1.asp。随后访问https://www.6x36x.com/admin/1.asp,再访问https://www.6x36x.com/admin/admin_index.asp,成功进入后台——本地测试通过。
这里需要补充说明:Session变量与Cookie本质上属于同一类机制。如果用户浏览器设置为不兼容任何Cookie,那么Session变量将无法正常工作。当用户访问某个页面时,每个Session变量会自动生成,默认保留20分钟(实际时间由Web服务器管理员设定,有的站点仅保留3分钟或10分钟,默认值为20分钟)。如果在Session中置入了较大的对象(如ADO recordsets、connections等),随着访问量增加,服务器负载会急剧上升。此外,Session变量可以随意创建和调用,滥用会导致代码难以维护和理解。因此,尽管Session能帮助我们绕过登录,但也要注意其潜在风险。
进入后台后,找到图片上传位置。将ASP木马修改为.gif后缀上传,并记录上传后的文件名,例如uploadpic\2xx56171430123.gif。那么如何将其变为可执行的ASP呢?很简单,复制一份或重命名,将后缀改为.asp。至此,WebShell成功上传。后续操作不再赘述。
最后总结:SA权限的危害极大,开发人员在连接MSSQL数据库时,切勿使用SA账户,否则服务器被控制的风险极高。此外,未使用的MSSQL扩展存储过程应及时删除,否则它们可能成为黑客攻击的利器。
