我从第一个SQL注入漏洞原理学起,从sql-libas到DVWA,到pikachu再到breach系列,DC系列靶场,再到实战挖洞,发现靶场与实战的区别是极其大的。
我个人觉得在这种web环境下,难的不是怎么测一个漏洞点,而是怎么找一个漏洞点。靶场与实战最大的区别在于你不知道这个地方到底有没有漏洞,尤其是在复杂的业务数据交互下,数据包,参数,接口将极其复杂。
本文将以DC系列靶场为例子,分析靶场与实战的区别,同时分享实战思路与需要用到的一些工具插件。
(本文并不主讲靶场,因为网上已经有很多这种文章了)
DC-1
探测:nmap扫描端口,dirsearch扫目录,配合插件wappalyzer识别信息。
火狐wappalyzer插件下载地址:
https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/
打点:识别出DrupalCMS,上MSF搜索利用,拿到shell。
找到flag1,根据flag1提示找到配置文件,在配置文件找到数据库账号密码,连接成功。
在数据库找出admin密码,发现有加密,根据靶场已有脚本修改数据库admin密码,成功登录web后台。
深入:进入后台后找到flag3根据提示cat/etc/passwd。找到flag4,根据flag4提示进行find提权:find / -exec"/bin/bash" -p \;找到最后的flag。
实战区别分析:
探测阶段:在拿到一个IP后除了进行基础操作nmap,dirsearch,指纹识别外,可能还要查找IP的域名,以及IP对应的公司,并根据公司名再次扩大信息搜集范围,到google,github以及资产搜索引擎上利用相关语法搜集默认密码,账号,邮箱等等信息。
并且根据关键字,及密码特征制作特定社工字典进行登录框爆破。而且实战一般情况dirsearch可能扫不出来什么东西,这时候还要到google和资产搜索引擎上查找。
靶场一般不会用到资产搜索引擎,例如fofa,鹰图,但它确实极其重要。
打点阶段:对于历史漏洞的利用不要只停留在指纹识别这些特征上,还要从数据包上分析。
但如果是登录框没进入后台哪有什么数据包呢?
如下:我在测某个系统时,将请求方法GET修改为POST直接爆出IIS版本,然后一个中间件nday通杀了两百多个站,而靶场一般是不会出现这种测试方法的:那就是想办法让系统报错!
实战中如果想对密码进行修改,我遇到过的:一种就是未授权调用后台修改密码接口修改,另一种就是忘记密码处的逻辑绕过,当然忘记密码这个功能可能前端并不会直接给出,需要自己通过js文件等等信息拼接口。
DC-2
探测:nmap探测IP端口服务,修改本地DNS文件访问靶场IP网站(找到crew字段),通过目录扫描找到后台登录口。
打点:通过cewl对网站定向搜集获取密码,通过CMS对应WPscan插件获取用户名,联合爆破进入后台。(jerry及tom的账号密码)
翻看后台提示后放弃wordpress历史漏洞,尝试ssh连接
jerry的ssh连接不上,tom连接成功(已得到的账号密码)
深入:直接SSH登录成功,执行命令发现rbash限制:
自然想到rbash逃逸,逃逸成功后拿到flag3
此时用su进行用户tom转换可以成功,拿到flag4后根据git字段提示,进行git提权拿到最后的flag
帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
实战区别分析:
探测阶段:很多IP经过nmap扫描后发现只会开放80端口,且80端口为主站,渗透难度极大,且我用dirsearch等工具扫目录很少能扫出有用的目录。
在找脆弱资产时还需要结合关键字,资产搜索引擎,google语法等搜索:
例如这个站:(浙大某脆弱资产)只能通过google语法site:xxx搜索出来,因为直接访问域名为404界面,路径极其复杂无法爆破,资产搜索引擎没有记录。
打点阶段:登录口的爆破也极有可能遇到次数限制
此时需要尝试绕过:修改为随机IP,随机UA头,修改Referrer为127.0.0.1等等
这里推荐一款工具可以用来伪造IP爆破:
https://github.com/ianxtianxt/burpsuiefakeip
即使没有次数限制,可能也需要根据公司名称缩写,系统名称缩写配合admin,administrator等字段及特殊字符通过工具(白鹿社工字典)自制密码进行爆破。
因为靶场拿到flag1后根据提示crewl(一个可以搜集账号的工具)就知道要爆破进入后台,实战可能还会在忘记密码处耗费时间。
且实战不会有如下靶场提醒:(无法利用wordpress历史漏洞,需另寻他法)
实战过程中ssh连接可能也不会如此顺利(靶场直接使用wp登录界面爆破出来的密码登录)
DC-3
探测:扫端口,扫目录,查指纹(joomla)
打点:使用joomscan工具进行漏洞扫描,找到版本,searchsploit找到sql注入漏洞,脱库拿到账号密码,john解密成功。
登录管理员后台成功,找到上传点直接getshell。
无法在虚拟终端反弹shell,于是返回上传点创建反弹shell的php文件,kali接受成功。
深入:利用用searchsploit工具搜索及蚁剑上传进行操作系统提权成功。
实战区别分析:
探测阶段:扫描目录时会找到两个登录界面,在实战中,需要将注意力放在并不对外使用的界面,它们属于脆弱资产,例如员工登录入口,管理员登录入口,像对外开放的,可以注册的那些登陆界面,虽然功能点更多,但由于经常有人访问,会经常维护,它们的安全性会更高,不容易出洞。
打点阶段:靶场依旧是利用ndaysql注入脱库拿到账号密码,但实战过程中找到一个sql注入后去脱库的可能性不大。在src中一般只用证明该漏洞存在即可,在渗透过程中要脱库就一定要先拿到有明确的渗透权限。
DC-4
探测:访问IP,出现登录框,以admin为账号,bp默认字典爆破成功
打点:后台直接执行命令抓包,radio参数执行命令成功,进行shell反弹
深入:翻找文件,找到账号与密码字典,hydra进行ssh爆破成功,继续翻找文件,找到charles账号密码,su切换用户,根据关键字teehee进行提权找到flag
实战区别分析:
探测阶段:可以看到靶场并无脚本源码,且那么就减少了很多黑盒测试点,而且靶场必定会存在漏洞这也是与实战的重大区别之一,而且很容易就爆破成功
打点阶段:本靶场后台功能极其简单只有一个功能点,且一看就是要测试RCE,但实战你遇到的可能是如下界面:
会有很多模块,很多功能需要测试,对这种后台打点通常会先尝试文件上传漏洞,因为上传点更容易寻找,而RCE测试点则极为复杂,通常会在例如"系统""命令"等字段的模块,但其实所有模块都可能存在RCE,因为模块本身就是前端与后台执行功能的地方,黑盒测试你无法从前端界面直接看出究竟哪个模块调用了执行命令的参数。
所以黑盒测试RCE需要将前端功能点转换为数据包,从接口,参数进行测试。
DC-5
探测:nmap扫端口,dirsearch扫目录,指纹识别
打点:在扫出来的目录中翻阅时发现存在文件包含,直接以file参数读取成功。
确定为本地包含后,找到靶机日志,将webshell写入日志,getshell成功。
深入:利用searchsploit对/bin/screen-4.5.0进行本地提权成功。
实战区别分析:
打点阶段:靶场文件包含的漏洞特征很明显,但实战中就并不会有这类提示,黑盒测试的思路就是多猜。而且在实战中想要利用文件包含进行getshell的难点就是找不到正确的路径和权限不够,并不会像靶场这样直接就能爆破出来,并且能直接包含。
实战更多的步骤还是在找漏洞而并不是测漏洞。
DC-6
探测:nmap扫描端口(22,80),dirsearch扫描目录,whatweb识别
打点:发现wordpress指纹,使用wpscan扫描,使用提示的命令cat/usr/share/wordlists/rockyou.txt | grep k01 > password爆破进入后台。
需要修改本地dns文件才能访问靶场。
在后台发现使用activity monitor,使用searchsploit搜索,利用脚本getshell.
深入:在后台文件找到graham账号密码,于是进行ssh登陆成功,再次找到免密码执行的sh脚本,利用脚本完成提权。
实战区别分析:
打点阶段:本靶场发现RCE有两种方式,一是nday探测二是手测,漏洞点出现在输入IP的字段,也算是RCE的高发点,在实战过程中像交换机路由器后台也通常会有类似功能点,可以进行RCE测试。
DC-7
探测:nmap探测端口,发现端口80与22(估计又要ssh爆破),扫描出目录:/user/login
打点:访问IP看到如下提示
到github上搜索左下角名称:Dc7User拿到账号密码,于是进行ssh连接成功
翻找文件,找到一个邮箱,根据邮箱内容找到脚本文件(属于root主),发现可执行drush命令,通过drush命令进行web界面密码修改,并成功登录。
基于Drupal 8特性,安装好插件后上传webshell连接成功。
深入:,将反弹shell的命令添加到先前的脚本中,因为先前找出来的脚本属主为root进行权限提升。
实战区别分析:
打点阶段:打点阶段用到的github信息搜集极其重要,在实战中通过账号密码直接登录ssh或者数据库或者web后台也是存在较大可能的。
在github上也经常能发现公司代码、账号密码、个人信息或客户key等敏感信息。
常用github搜索语法:
in:name admin 仓库标题搜索含有关键字admin
in:readme test Readme文件搜索含有关键字
user:admin 用户名搜索
language:java admin 在java语言的代码中搜索关键字
github信息搜集工具: https://github.com/FeeiCN/GSIL
本靶场的后台功能点还是很多的,但通过drush命令进入后台感觉还是属于靶场的味道。在实际挖洞过程中,如果账号密码无法爆破,更多可能是分析js文件(从js文件中找更多js再从js中提取接口),找隐藏接口,也就是前端页面并未显示有注册修改密码等功能,但可以从js中找到接口,实现登录后台的目的!
这里分享一个很适合找敏感接口信息的bp插件HAE: https://github.com/gh0stkey/HaE
DC-8
探测:nmap扫描端口(22,80),whatweb指纹识别
打点:访问靶场IP点击左方,出现参数。
加单引号后报错,用sqlmap拿到数据john解密拿到账号密码,进入后台。
此处插入webshell配合msf直接getshell成功。
深入:执行find / -perm -u=s -type f 2>/dev/null,根据exam4完成提权.
实战区别分析:
打点阶段:靶场依旧是利用的靶场思路sql注入拿到账号密码,再进入后台.但不要觉得sql注入实战很容易挖到(看你挖什么资产了),一般出sql注入就是一个高危.而且靶场sql注入还是一个前台的sql注入,这种get传参的前台sql注入已经是很多年前的了,实战中基本不要想遇到,但也要去测试.
靶场中的getshell方式实战中我没遇到过,这种插入方式感觉更像XSS漏洞测试处.
DC-9
探测:nmap探测端口,发现端口80与22(filtered状态)
打点:通过dirsearch扫出search.php,manage.php目录,进入后直接找到sql注入点。
sqlmap脱库MD5解密拿到账号密码登录manage.php后台。
根据File does not exist提示进行文件包含利用?file=../../../../
FUZZ系统文件找到/etc/knockd.conf,泄露7469 84759842端口。通过nc敲开端口,根据/etc/passwd读取账号密码进行ssh爆破。
登录爆破出的账号翻文件搜集字典,再次进行ssh爆破出新账号。
深入:登录新账号,先执行sudo-l,找到python脚本,分析利用脚本完成提权。
实战区别分析:
打点阶段:靶场sql注入点较为经典,处于搜索框。且虽然存在sql注入,但如果只添加单引号并不会出现报错,还需要进一步探测才能发现!
这里推荐一款常用工具:
https://github.com/synacktiv/HopLa
BP辅助payload插件,可以一键插入常用payload,不用额外再找字典等等。
对于sql注入的黑盒测试不要局限思路,你觉得可能带入数据库的参数都需要测试,尤其是在排序例如desc等不能被预编译的字段。
打点处的文件包含漏洞算是一种实战思路:也就是?file=../../../etc/passwd或者?path=../../../etc/passwd这类payload可以在挖洞过程随机添加,不一定要对应着功能点才去测试,只要存在file,download等敏感字段都可以添加尝试,因为这可能是隐藏功能点。
靶场可能更多的功能是练习单个的知识点,实战少遇到的知识点,比如一个新手可能挖半年漏洞都无法getshell一次,更别提后渗透等等了。但在打靶的同时也要关注对nday,1day漏洞的黑盒分析,并进行总结。
例如下对权限绕过的一个分析总结:
1:大小写替换绕过
/api/home/admin--/api/home/ADMIN
2:通配符替换字符:
/api/user/6---403
/api/user/*---200
3:路径穿越:
/api/home/user---403
/api/MYPATH/../home/user---200
/api/home/..;/..;/..;/..;/home/user---200
除此外还要关注最近的系统或者框架0day例如SQL注入,RCE等等它们的注入参数是哪个,目录特征怎样?这样在实战过程中靶场战神才不至于陨落。