第一次渗透测试的分享和小结

isnull   ·   发表于 3个月前   ·   漏洞文章

说在前面

首先很重要的是授权 ~ 首先很重要的是授权 ~ 首先很重要的是授权 ~

“为了给家乡做点贡献” 男子入侵政府网站...

之前也看过很多关于渗透测试的文章,但是因为一些现实因素等等问题,没(bu)有(gan)真正实操,最近由于一次偶然的机会,什么都不会的我接到了一个渗透测试项目



然后就把最近学到的一些东西,和一些小感悟,小技巧记录下来,由于一些特殊原因,本文中不涉及到渗透过程中的任何敏感信息

第一次进行渗透如何优雅的"装"成是个"老手"

首先跟我一样菜当然是装不出大神的,当然还是多学,多积累最重要,但是既然都开始了,就不能显得太划水,下面的操作不能让你成为大神,但是可以让你在整个过程中"忙"起来

相比于网上那些很详细的手把手渗透教学,本文主要写一些到 xx公司 直接内网渗透测试的那种简要步骤

所以这一小节主要写给那些才接触安全,或者没有真正做过渗透测试的人

大佬轻喷,如果有错误的地方也欢迎批评指正...

需要准备什么?

能够使用以下工具

Nessus

AWVS

Appscan

burpsuite

sqlmap

Github & Google 搜索框

Hydra

自己收集的一大堆 CVE 的 exp

各个中间件漏洞的利用工具

工具当然是越多越好

一些好用的字典

弱密码是一个亘古不变的问题,可能公司后台弱密码改掉了,可是一个公司这么多员工,可能有员工没有改自己原先的弱密码...或者公司一些设备没有改掉默认密码...所以一个好用的密码字典显得尤其关键

配合上 Hydra 或者其他好用点的爆破工具的使用,常常能够有不错的收获

提供以下几个生成字典方式

  • Github上有很多收集好的字典
    https://github.com/rootphantomer/Blasting_dictionary
    更多的可以在Github上自行寻找

  • 可能你需要生成一些特殊定制的
    在线生成地址一
    在线生成地址二

  • 下面的py脚本你也可以尝试使用
    pydictor 下载地址 使用指南

  • somd5 提供的字典:
    https://www.somd5.com/download/dict/

  • 可能你需要学会配置IP

    如果你需要你接进内网进行测试的时候,通常会要求你手动配置IP,如果不会配置到了现场就会像我一样很丢人...

    右键点击:



    右键点击当前你链接,选择属性:



    填入他们给你提供的IP:

    新手的渗透测试的打开方式

    本着划水也要划得合理一点的态度,如果刚好你也是第一次做渗透测试,就算不知道具体干什么,过程中也不要显得太无所事事了...

    下面的操作适用于在放开中间一切安全设备(各种防火墙等...),所以作为一个技术不是很高超的新手,合理利用手里的现有工具就显得至关重要

    很多大佬都说过渗透测试的本质是信息收集,信息收集的步骤和手段在先知已经有很多专门文章详细的阐述过

    信息收集

    一般去这种公司帮忙做渗透他们都会给你一定的资产(如内网IP,设备型号等),但一般是不够的。所以完成以下的步骤,也可以在一定程度上帮助你收集一些信息...

    全都丢进工具跑

    首先把资产里所有IP丢进 Nessus


    Nessus 本身扫描的过程中也会包含端口,但是如果你嫌慢你可以使用nmap扫描...
    nmap -p 1-65535 -T4 -A -v <IP>

    然后你嫌nmap慢可以使用 masscan...
    masscan <IP> -p0-65535 - rate 1000000

    扫出来了Web的端口,如80,8080,443等(具体的还得具体看),丢进AWVS进一步扫描分析



    含有 ftp,ssh,mysql的端口可以丢进 hydra 爆破

    1、破解ssh: 
    hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip ssh 
    hydra -l 用户名 -p 密码字典 -t 线程 -o save.log -vV ip ssh 
    
    
    2、破解ftp: 
    hydra ip ftp -l 用户名 -P 密码字典 -t 线程(默认16) -vV 
    hydra ip ftp -l 用户名 -P 密码字典 -e ns -vV 
    
    
    3、get方式提交,破解web登录: 
    hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip http-get /admin/ 
    hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns -f ip http-get /admin/index.php
    
    
    4、post方式提交,破解web登录: 
    hydra -l 用户名 -P 密码字典 -s 80 ip http-post-form "/admin/login.php:username=^USER^&password=^PASS^&submit=login:sorry password" 
    hydra -t 3 -l admin -P pass.txt -o out.txt -f 10.36.16.18 http-post-form "login.php:id=^USER^&passwd=^PASS^:<title>wrong username or password</title>" 
    (参数说明:-t同时线程数3,-l用户名是admin,字典pass.txt,保存为out.txt,-f 当破解了一个密码就停止, 10.36.16.18目标ip,http-post-form表示破解是采用http的post方式提交的表单密码破解,<title>中 的内容是表示错误猜解的返回信息提示。) 
    
    
    5、破解https: 
    hydra -m /index.php -l muts -P pass.txt 10.36.16.18 https 
    
    
    10、破解rdp: 
    hydra ip rdp -l administrator -P pass.txt -V

    如果扫出445端口可以尝试一下 ms17-010 ,丢进msf里使用相应的模块进行验证



    如果扫出3389端口可以尝试一下最新爆出的 CVE-2019-0708 (其实真的挺多都没打补丁的),也能使用msf扫描,还可以使用 360 的漏洞扫描工具,或者使用Github上搜索其他poc进行验证
    CVE-2019-0708: Windows RDP远程漏洞无损检测工具下载

    然后在各种扫描时候的闲暇时间,你就可以开展对一个网站的常规渗透,先扫个目录(dirsearch和御剑都行),然后熟悉web站点的各个功能点,再根据功能来测试相应的漏洞是否存在...必要的时候burpsuite抓包,一个包一个包的看...

    PS:一般对Web站点准备开始渗透时往往都变成了和登陆框的战斗,可以先上来burpsuite跑个几个弱密码字典,然后对登录框进一步测试sql注入,另外:如果有注册账号界面或者忘记密码界面可以尝试验证码爆破(4位数验证码就试一下),短信轰炸,任意账号注册找回等,然后记得看一下URL,如果后面的参数为 ?returnurl=xxx.com,可以尝试一下url跳转...
    (如果经历了大量的工程,对登录框毫无办法,连网站都没进去,无法展开下一步测试的时候,就自己注册一个账号,或者找他们提供一个测试账号叭...

    然后在你忙以上操作的时候,就显得不是那么的划水,作为一个脚本小子也要有脚本小子应有的样子

    善用搜索进行辅助验证

    经过一段时间的等待,可能 Nessus 和 AWVS 都扫得差不多了...这个时候如果自己积累不多就寻找一切能够搜索的东西对扫描结果进行辅助验证...(百度、谷歌、Github等...

    如果是 CVE 就先去msf里面search一下,如果没有也可以去 Github 上找一波可以直接利用的 exp,或者可以看看各大论坛有没有大佬之前分析过...然后跟着手动复现,途中可能遇到很多莫名其妙没有复现成功的问题也可以通过善用搜索进行解决

    然后各大论坛真的有很多很多很强的师傅们,每当你遇到过没见到过的漏洞,基本上都会有师傅分析过,吸取他们的经验完成你的渗透任务也是个事半功倍的事情

    浅谈遇到过的有趣的东西

    后知后觉还是积累太少

    NFS的安全隐患

    这个是真的第一次遇到,一开始还以为没什么,一顿操作发现可以看到几乎全部共享的数据(orz...

    起因是 Nessus 爆洞



    然后我现找了写的很详细的文章进行对该漏洞进行了复现

    针对NFS的渗透测试

    简单来说就是两步走:
    showmount -e <IP>


    然后挂载到本地

    mkdir <创建一个目录>
    mount -t nfs <ip>:/<你要挂的目录> /<你刚刚创建的目录> -o nolock

    这个点真的能拿蛮多数据的



    后面就不贴图了...

    弱密码啊弱密码

    真的好多好多弱密码!

    小技巧就是
    验证爆破用户名的方法就是看response包里的返回结果...比如存在用户名但是密码不对,就会显示用户名和密码不匹配,但是如果没有用户名就会显示不存在用户名
    然后先根据返回包找到合适的用户名,再用字典有针对性的爆破该用户名的密码。如果没有回显可以通过 忘记密码 等选项来进一步测试,找回过程中如果说用户正确就会进入下一步操作,比如发送短信验证码,如果说没有用户就不会进入下一步操作

    首先一般弱密码发生在如下几个地方:

    1. 没有限制登录失败次数的登录框
    2. 没有验证码或者验证码可以绕过(比如采用前端校验)的登录框

    经过渗透测试统计和分析,将弱密码大致分为以下几个情况

    1. js里有注释掉的测试账号密码
    2. 各种登录界面,各种后台存在测试账号,且可以看到敏感数据(这就可能是为什么test test 可以进去的原因吧)
    3. 改了管理后台页面的所有弱密码,但是在其他地方,比如办公系统等,有员工没有改自己的登录密码,经过爆破可以登录员工账号
    4. 很多公司采用的系统是外部开发的,外部开发的时候有
    5. 测试账号是弱密码,但是可能交接过程中存在一些问题,导致这边公司根本就不知道有这个账号密码
    6. 很多设备,比如内网里面的防火墙,直接使用了出厂默认的密码
    7. 大家都比较懒,都不想注册很长的密码,然后可能又觉得11111这种不合适,所以就有了那种键盘连键,如qwe123之类的,导致跑一个字典出一堆账号密码

    MS17-010能验证但是反弹不了会话

    永恒之蓝这种东西之前跟着网上的复现过...网上复现文章通常也是在C段然后MSF一把梭...

    所以真正当我遇到这个漏洞的时候,用 验证模块(use auxiliary/scanner/smb/smb_ms17_010)验证成功之后就以为成功了,但是利用攻击模块却并不能反弹会话

    然后去了t00ls发了一篇求助帖 [【求神问卜】] 求问关于内网中ms17-010的利用

    下面的回答都很大程度上帮助到了我...

    03使用永恒浪漫攻击,不要使用永恒之蓝,没用。请使用原版,不要用msf的。

    然后我了解了一下永恒之蓝的历史,和 NSA 原版攻击工具

    具体可看一下我转载的博客 Shadow Brokers - From git clone to Pwned

    还有网上一个大师傅的复现真的非常详细(膜orz)
    永恒之蓝、永恒浪漫、永恒冠军复现

    很可惜的是因为一些时间的原因最后也没能成功利用,很多时候跟漏洞都是一个擦肩而过的距离

    真的没办法进行sql注入了吗?

    这个点给我的感触蛮深的,学sql注入的时候知道sql注入发生的点是: 增 删 改 查,一切与数据库交互的地方都有可能进行sql注入

    但是真正实际操作的时候满脑子都是登录框的用户名密码,甚至为了追求速度,养成了指定参数这种不好的习惯,所以连着很久都没有挖出sql注入

    最后由于网站的特殊性,该网站忘记密码界面需要提供注册界面的手机号(emm不方便截图...),最后在POST包里面的一个不显眼的参数存在sql注入...

    给的体会就是渗透过程中千万不要偷懒,所有get,post的参数凡是你觉得能够和数据库进行交互的,能手测就手测,不能手测就用sqlmap跑

    细心一点,每个地方都测试一下

    利用了sqlmap最终跑出用户名密码...



    还有一点小感悟是 XFF 头注入是真的存在,渗透测试本身的过程就是把不可能的事变为可能,虽然我之前也一直觉得讲 XFF 头的注入是为了绕过gpc的过滤,需要很巧合才能完成,但是在测试一个办公系统的时候,开发跟我说到他们需要记录一下每个人登录的IP。所以为什么构成这种漏洞也就不奇怪了

    cookie也敢明文传输用户名密码?

    这个也是真的第一次遇到,教科书般的漏洞...

    首先用弱密码进入了网站(手动滑稽)

    然后在测试其他漏洞的时候突然发现cookie使用明文传输了用户名密码

    第一个想到的当然是XSS,XSS如果能够打到cookie那么将会是很严重的问题...

    找了一下午XSS,终于在一个参数那寻找到了一个反射型XSS,且没有设置httponly,最后成功打到了经过base64位加密的用户名密码




    Redis未授权访问

    Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。  部分服务器上的Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置)

    这个真的蛮多公司都存在,没有接触过的老哥建议补充一下...

    Freebuf上有篇文章写得很详细...

    Redis未授权访问详解

    一把梭进去还是 root 权限...

    由于全是敏感数据就不贴图了

    各种中间件的漏洞

    各种中间件的漏洞的话在各大论坛都有很详细的文章,大家可以自行查阅

    一点小感悟就是,很多公司用的版本真的很老很老,而且几乎不打补丁...虽然可能有的时候 IIS ,Nginx那些解析漏洞没办法使用(真的挺难遇到上传点的)...但是如果看到老一点版本的 JBoss 、 weblogic 就可以利用很多工具了

    以下提供一些好用的工具

    Java反序列化集成工具

    【技术分享】Java RMI 反序列化漏洞检测工具的编写

    WeblogicScan

    写在最后

    渗透测试中,工具,经验,还有灵活的思维都是很重要的东西(虽然自己一样也没有)...

    有的时候连上了shell之后,然后如同机器人一般的反弹shell,执行 whoami,发现权限不够就进一步查看系统信息,接着尝试各种提权的操作。其实可能有的时候这些操作没有必要,可能最终的目标都是拿到一些信息或者数据。所以根据实际情况判断一下是否需要提权,是一个提高效率不错的办法。

    此外,一个 cat ~/.bash_history 命令有时候可能会给你带来一些惊喜

    最后,根据信安之路的史上最强内网渗透知识点总结,补充了里面的一点东西。
    分享给大家 内网渗透之常用命令小结

    本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。


    转自先知社区

    打赏我,让我更有动力~

    3 Reply   |  Until 29天前 | 547 View

    miniboom
    发表于 3个月前

    优秀啊,老哥,向你学习,我刚开始真是一头雾水,看了看你的过程,还是学到了不少东西啊

    评论列表

    • 加载数据中...

    编写评论内容

    tryln
    发表于 3个月前

    你是在内网吧。

    评论列表

    • 加载数据中...

    编写评论内容

    ctf_leadsec
    发表于 29天前

    评论列表

    • 加载数据中...

    编写评论内容
    LoginCan Publish Content

    掌控者 © 2016. All Rights Reserved. 掌控者

    Powered by 掌控者 Version 2.1.3