跳转至

第 10 天(下):文件上传与渗透

文件上传漏洞

是程序员在对用户文件上传部分的控制不足或者存在处理缺陷而导致的漏洞。

文件上传这个行为本来是合法的,而问题在于服务器怎么解释和处理这些文件。

WebShell

WebShell 是以 asp、php、jsp 等网页文件形式存在的一种命令执行环境。你可以把它视作一种网页后门。

本意是方便网络管理者的,但是……

WebShell 后门隐蔽较性高,可以轻松穿越防火墙;访问 WebShell 时不会留下系统日志,只会在网站的 web 日志中留 下一些数据请求记录。

也因此,asp、php、jsp 等语言写的网站更容易被这样攻击。

执行命令:

  • system,passthru
  • eval

文件读:

  • file_get_contents("/etc/passwd")
  • highlight_file
  • show_source

文件写:

  • file_put_contents

PHP 语法

函数

当前目录:getcwd。

列出目录:scandir。

编码:base64_encode,base64_decode。

打印:

  • var_dump
  • print_r
  • echo(不能打印 array)

标签

  • <?php phpinfo(); ?>(一直支持)
  • <?=phpinfo();(5.4 以上支持)
  • <? phpinfo(); ?>(支持,开启短标签时)
  • <script language="php">phpinfo();</script>(7 以下不支持)
  • <% phpinfo(); %>(5 需要开启 asp_tags;7 不支持)

文件上传校验

前端校验:调用 JS 函数来检查上传文件的扩展名(此时客户端还没有向服务器发送任何消息)。这很不安全,因为很容易被绕过。

后端校验:

  • 文件头 content-type 字段校验(比如,image/gif)。
  • 文件内容头校验(GIF89a、\x89PNG、\xFF\xD8\xFF)。
  • 后缀名黑名单 / 白名单校验。
  • 自定义正则校验。
  • 函数校验。

合法的渗透

《中华人民共和国刑法》285 条

违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。

违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。【刑法修正案七】

提供专门用于侵入、非法控制计算机信息系统的程序、工具,或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严重的,依照前款的规定处罚。【刑法修正案七】

  • 护网行动
  • SRC(各个公司的应急响应中心)
  • hackerone

渗透的流程

渗透的本质是信息收集。

  • 确定目标
  • 信息收集
  • 漏洞探测
  • 漏洞利用
  • 内网转发
  • 内网渗透
  • 痕迹清除
  • 撰写渗透测试报告(?)

确定目标

  • 我的目标是谁?
  • 允许社工吗?
  • 我有几天时间可以攻击
  • 重点突破口在哪里
  • 哪个是核心

信息收集:OSINT

公司架构:

  • 公司的组织架构
  • 公司的邮箱格式
  • 公司的员工姓名格式
  • 公司的运维IT人员联系方式
  • 公司的合作伙伴
  • 子公司

可以用天眼查等应用看看。

GitHub:

  • 源代码
  • 数据库密码,邮箱密码
  • 内网地址,VPN 密码
  • 堡垒机密码,TeamViewer
  • AccessKey,SSH 密码
  • 网络设备

Google(Googlehack):

  • inurl:在 url 中搜索关键词。
  • intext:在网页中搜索关键词。
  • filetype:特定后缀的文件。
  • site:子域名。

比如:

1
2
3
4
5
6
7
inurl:/cms/login.php
inurl:/manage/index.php
inurl:/manager/login.php
inurl:/system/login.php
inurl:/webadmin/login.php
inurl:admin_login.php
inurl:/admin/login.php

信息搜集:域名

怎么搜索子域名?

  • 搜索引擎
  • 子域名挖掘机
  • fofa

信息搜集:IP

网站所有者、电话、邮箱:

DNS 解析:threatbook:https://x.threatbook.cn/

IP 反查:

信息搜集:敏感端口

远程连接服务端口:

  • 22:SSH 远程连接 -> 爆破、SSH 隧道及内网代理转发 -> 文件传输
  • 23:Telnet 远程连接 - > 嗅探、爆破、弱口令
  • 3389:RDP 远程桌面连接 -> Shift 后门、爆破
  • 5900:vnc -> 弱口令爆破,未授权访问漏洞

网络服务端口:

  • 80 / 443:常⻅的 Web 服务端口 -> Web 攻击、爆破
  • 7001 / 7002:weblogic 控制台 -> Java 反序列化、弱口令
  • 8080:Jboss / Resin / Jetty / Jenkins -> 反序列化、控制台弱口
  • 9200:Elasticsearch 服务器端口 -> 未授权访问漏洞

数据库服务端口:

  • 1433:MSSQL -> 注入、提权、SA 弱口令、爆破
  • 1521:Oracle -> TNS爆破、注入、反弹shell
  • 3306:MySQL -> 注入、提权、爆破
  • 5000:SysBase / DB2 -> 爆破、注入
  • 5432:PostgreSQL -> 爆破、注入、弱口令
  • 6379:redis -> 未授权访问、弱口令爆破
  • 27017 / 27018:MongoDB -> 爆破、未授权访问

NMAP

nmap 10.202.203.0/24 -Pn -n -p 0-65535 -sV -sT -oN result.txt

  • -v:打印的更详细一点。
  • -p 22,80,443,10000-10100:指定扫描这些端口。
  • -sS:SYN 扫描(tcp 半连接扫描)。速度更快,隐蔽性更强。
  • -sV:启用服务识别。
  • -Pn:禁用主机存活探测。
  • -n:禁用反向 DNS 解析。速度好像会更快。
  • -O:打印操作系统信息。
  • -oN:打印输出到指定文件。

FOFA:收集证书

1
2
3
4
5
title="目标名称" && region="xx省"
title="目标名称" && city="xx市"
cert="目标域名或者证书关键字" && region="xx省"
cert="目标域名或者证书关键字" && city="xx市"
((title="目标名称" || host="目标域名") && country="CN") && region!="HK"

信息搜集:指纹

  • js
  • favicon.ico
  • 响应头
1
2
3
4
5
6
7
import mmh3,sys,requests,base64
def ico_hash(url):
    r = requests.get(url=url + "/favicon.ico")
    favicon = base64.b64encode(r.content)
    print(mmh3.hash(favicon))

ico_hash(sys.argv[1])

信息搜集:C 段

IP 中的 C 段:b110xxxxx.x.x.x(192~255.x.x.x)。

有些处于 C 段的网站可能处于同一个内网,用 Censys 调查它们。

注意,可能会攻击到非目标单位!

信息搜集:目录扫描

去使用 dirsearch

外网打点

  • 弱口令登录——文件上传——获取权限——权限提升——内网漫游
  • 组件漏洞——获取权限——权限提升——内网漫游
  • 社会工程学——木⻢通信——权限提升——内网漫游

强口令,弱口令

弱口令常见的内容:

  • 包含自己生日的
  • 包含自己身份证后六位的
  • 包含自己姓名的
  • 包含自己学校的
  • 包含自己前任信息的(但是我没有啊)
  • 包含年份的(出生年份、某个重要的年份、注册的年份、……)

内网漫游

  • 主机层面漏洞
    • 永恒之蓝(MS-17-010)
    • 永恒之黑(CVE-2020-0796)
  • 数据库弱口令
    • 扫出端口 判断服务
    • 弱口令字典
  • 组件命令执行漏洞(weblogic,fastjson,struts2,等等)