| 关键词: 用户 session Windows 程序 运行 服务 SYSTEM 权限 CreateProcessAsU screen |
正在测试新版glype(http://www.glype.com/)网络代理程序(我不得不说一下这款代理程序是游走内网必备神器,没有之一)的时候用NMAP对本地内网80端口做了个简单的扫描(nmap -T5 10.10.0.0/24 -p80 –open),但是人生处处有惊喜。最近隔壁小伙伴正在搭建它强大的社工裤,本地php环境采用默认安装,并且可以浏览目录,于是我原本纯洁的内心产生了邪恶的念头。 ![]() 本地存在phpMyAdmin程序,使用默认口令root/root进入后台。
![]() 进入数据库管理后台,我们要做的就是使用数据库语句select * into outfile写WEBSHELL,但是在这里我们不知道网站根目录,这个确实有点淡疼。
但是先让我们详细分析下我们所有的资源,不行的时候再考虑以上方法。网站目录中存在chunge.zip,不管是什么先下载下来看看,最后在LOG目录中找到程序日志文件,网站绝对路径也就出来了。so,开始我们的写马旅程吧! ![]() 写入php一句话 ![]() ![]() 查看当前权限 Default [*] 基本信息 [ C:D: Windows NT USER-20160513DS 6.1 build 7601 (Windows 7 Ultimate Edition Service Pack 1) i586(SYSTEM) ] Default C:> whoami nt authoritysystem 既然是system权限,那想干什么就干什么呗!说的好,但是我最想干的事看看小伙伴在作什么,然后给他taskkill,呵呵呵。所以我们首先需要截个屏幕,一下推荐几个命令行下的截屏小程序,可能会帮到你哦。
这个小工具可以当截图使用,还支持鼠标选取区域,不带路径默认保存到剪贴板中,不过坑爹的是需要回车一下才会结束进程。 Default Useage: boxcutter -f c: uo.png 4,powershell 脚本 Default ############################################################################# # Capturing a screenshot ############################################################################# Param( [Parameter(Mandatory = $true)][string]$Path ) $FileName = "$env:COMPUTERNAME - $(get-date -f yyyy-MM-dd_HHmmss).bmp" $File = "$Path$FileName" Add-Type -AssemblyName System.Windows.Forms Add-type -AssemblyName System.Drawing # Gather Screen resolution information $Screen = [System.Windows.Forms.SystemInformation]::VirtualScreen $Width = $Screen.Width $Height = $Screen.Height $Left = $Screen.Left $Top = $Screen.Top # Create bitmap using the top-left and bottom-right bounds $bitmap = New-Object System.Drawing.Bitmap $Width, $Height # Create Graphics object $graphic = [System.Drawing.Graphics]::FromImage($bitmap) # Capture screen $graphic.CopyFromScreen($Left, $Top, 0, 0, $bitmap.Size) # Save to file $bitmap.Save($File) Useage: Powershell.exe -file sc.ps1 -path c: 截图工具有了,需要截取当前登录用户的屏幕还需要切换到登陆的用户,首先我能想到的就是runas。 1,RUNAS RUNAS是WINDOWS系统自带的允许用户用其他权限运行指定的工具和程序,而不是用户当前登录提供的权限。 Useage: Default runas /user: administrator "nircmd.exe savescreenshot shot.png" runas是交互式的,需要输入密码,无奈放弃。 2,RUNAS + Sanur http://www.commandline.co.uk/sanur_unsupported/index.html Sanur is a tiny Win32 console utility that ‘pipes’ a password into the Windows 2000/XP/2003 Runas utility, thereby making Runas scriptable. Useage: Default runas /u:domain\username program.exe | sanur password Win7下测试无反应,而且在密码为空的时候很蛋疼(系统拒绝登陆)。 3,CPAU Useage: Default cpau -u administrator -p " " -ex "nircmd.exe savescreenshot shot.png" -lwp 很有用的一个小工具,Win7下测试通过。 但是在菜刀中执行报错,不能从LocalSystem启动。 Default CPAU V01.11.00cpp Joe Richards ([email protected]) November 2005 Current Security Context: NT AUTHORITYSYSTEM ERROR: ERROR: CPAU doesn't support running from LocalSystem. ERROR: 通过错误关键字百度搜索,找到一篇很老但是很有用的文章,作者惨痛的叙述了客户坑爹无礼的要求后最终给实现了(日了狗)。 http://blog.superliufa.com/2008/04/ 姑且认为次工具无法从SYSTEM的权限下面切换用户,最后用API CreateProcessAsUser实现功能,然后搜索CreateProcessAsUser函数,找到篇” localsystem以指定用户身份运行程序“,作者和我需求有些类似,此致我们知道了session 0 隔离的问题。 http://blog.csdn.net/laotse/article/details/6331368 “system运行的服务直接截图那么用的就是system的handle,所以是个黑屏或者根本没法截,这时就需要程序在用户账号下运行,可以在服务里嵌入一个exe,然后在账户身份下运行这个exe截图并返回给服务返回给远程连接者,下面就是在system账号下如何以指定用户身份运行程序的方法。 大体就是用wts***的终端服务api枚举所有用户的sessionid,然后query出token来……最后用createprocessasuser运行程序,这样程序就以某用户身份运行了,关键是createprocessasuser是用的可以query出来的token而不是用户名和密码,这样就解决了不知道该用户用户名密码的情况下“让他运行程序”了。” -引用自原文,我怎么觉得这么乱呢 Default WTSEnumerateSessions -> WTSQueryUserToken -> CreateEnvironmentBlock ->CreateProcessAsUser Session 0 隔离 https://technet.microsoft.com/zh-cn/ee791007.aspx Windows 7服务的Session 0隔离 在Windows XP、Windows Server 2003,以及更老版本的Windows操作系统中,服务和应用程序使用相同的会话(Session)运行,而这个会话是由第一个登录到控制台的用户启动的。该会话就叫做Session 0,如下图所示,在Windows Vista之前,Session 0不仅包含服务,也包含标准用户应用程序。 ![]() 将服务和用户应用程序一起在Session 0中运行会导致安全风险,因为服务会使用提升后的权限运行,而用户应用程序使用用户特权(大部分都是非管理员用户)运行,这会使得恶意软件以某个服务为攻击目标,通过“劫持”该服务,达到提升自己权限级别的目的。 从Windows Vista开始,只有服务可以托管到Session 0中,用户应用程序和服务之间会被隔离,并需要运行在用户登录到系统时创建的后续会话中。例如第一个登录的用户创建 Session 1,第二个登录的用户创建Session 2,以此类推,如下图所示。 ![]() 使用不同会话运行的实体(应用程序或服务)如果不将自己明确标注为全局命名空间,并提供相应的访问控制设置,将无法互相发送消息,共享UI元素,或共享内核对象。这一过程如下图所示: ![]() 我的简单理解是:
下面我们需要了解几个必须的API WTSEnumerateSessions Retrieves a list of sessions on a Remote Desktop Session Host (RD Session Host) server. 枚举远程桌面session列表。 WTSQueryUserToken Obtains the primary access token of the logged-on user specified by the session ID. To call this function successfully, the calling application must be running within the context of the LocalSystem account and have the SE_TCB_NAME privilege. 通过session ID获取access token。这个函数很重要,它需要要求程序是 LocalSystem account(组内)用户启动的并且还要有SE_TCB_NAME权限,所以在当前vs下调试这个函数是没法执行的。 ![]() CreateProcessAsUser Creates a new process and its primary thread. The new process runs in the security context of the user represented by the specified token. 这个项目编写完毕(见下载地址),本地测试。 ![]() 由于习惯性把工具传到C:$Recycle.Bin目录下,在测试的时候老不生成文件,powershell脚本也报无签名不允许执行,最后放到C:Windows emp 下执行成功,估计本地用户对C:$Recycle.Bin目录的访问存在权限问题。 Default C:$Recycle.Bin> powershell.exe -file sc2.ps1 -path C: 无法加载文件 C:$Recycle.Binsc2.ps1。文件 C:$Recycle.Binsc2.ps1 的内容可能已 被篡改,因为该文件的哈希代码与数字签名中存储的哈希代码不匹配。系统将不执行该脚本 。有关详细信息,请参阅 “get-help about_signing”。。 Default + CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordE xception + FullyQualifiedErrorId : RuntimeException C:Windows emp> powershell.exe -file sc2.ps1 -path C: 使用“5”个参数调用“CopyFromScreen”时发生异常:“句柄无效。” 本文出处: https://www.toutiao.com/a6681237514776216068/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|