渗透测试、安服等面试资料

可能看着有些乱,可以下载我上传的word版那个清晰并附有图片
https://download.csdn.net/download/FODKING/85186806
也可以私聊我我给你们发。
希望大家都有一份满意的工作。

1常见网络知识	2
1.1常见协议的工作原理	2
arp协议的工作原理	2
rip协议是什么?rip的工作原理	3
什么是RARP?工作原理	3
OSPF协议?OSPF的工作原理	3
TCPUDP区别总结	4
什么是三次握手四次挥手?	4
tcp为什么要三次握手?	4
HTTPSHTTP的区别	5
session 的工作原理?	5
OSI 的七层模型都有哪些?	5
session 的工作原理?什么是TCP粘包/拆包?发生原因?解决方案	6
TCP如何保证可靠传输?	6
URIURL的区别	6
什么是SSL6
1.2常见常用端口	7
1.3Linux目录	7
1.4常见系统版本	8
1.5常见的安全设备及技术	9
1.6 HTTP的请求方法	9
1GET方法	9
2POST方法	10
3HEAD方法	10
4PUT方法	10
5DELETE方法	11
6CONNECT方法	11
7OPTIONS方法	11
8TRACE方法	11
GETPOST 的区别	12
1.7 Python的常用库	12
1.8 web会话管理	12
session的管理方式	13
Cookie的管理方式	13
TOKEN的管理方式	14
2漏洞利用和攻击手段	14
2.1常用渗透工具	14
2.2 web安全漏洞	15
XSS漏洞	16
csrf漏洞	16
XXE漏洞	17
文件包含漏洞	17
文件解析及上传漏洞	18
3语言方面漏洞	19
3.1 unserialize反序列化漏洞	20
3.2 owasp 漏洞都有哪些?	20
3.3缓冲区溢出漏洞	23
3.4 SQL报错注入方法	24
通过floor报错,注入语句如下:   	24
通过ExtractValue报错,注入语句如下:	24
通过UpdateXml报错,注入语句如下:	24
通过NAME_CONST报错,注入语句如下:	24
通过join报错,注入语句如下:	24
通过exp报错,注入语句如下:	24
通过GeometryCollection()报错,注入语句如下:	24
通过polygon ()报错,注入语句如下:	25
通过multipoint ()报错,注入语句如下:	25
通过multlinestring ()报错,注入语句如下:	25
通过multpolygon ()报错,注入语句如下:	25
通过linestring ()报错,注入语句如下:	25
3.5 SQL常用函数:	251isnull(expression,value)	252)聚合函数	263)字符串操作函数	264) 字符串比较函数	275) 数据类型转换函数	276) 日期函数	287)数学函数	298)数据类型判断	29

1常见网络知识
1.1常见协议的工作原理
arp协议的工作原理

ARP是在发包之前获取目标mac地址的。ARP协议是以ARP方式发送广播数据包,数据包里写明发送端mac FF:FF:FF:FF:FF:FF(此mac地址是在索要对方的mac),源ip地址,目的ip地址,对方电脑接收到数据包时打开此数据包,根据ip地址判断是否把自己的mac地址告诉源机器。当源机器得到mac地址后,就可以正常发送数据了。

rip协议是什么?rip的工作原理

RIP动态路由选择协议(网络层协议)
RIP是一种基于距离矢量(Distance-Vector)算法的协议,它使用跳数(Hop Count)作为度量来衡量到达目的网络的路由距离。RIP通过UDP报文进行路由信息的交换,使用的端口号为520。

什么是RARP?工作原理
1.发送主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
2. 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
3. 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
4. 如果不存在,RARP服务器对此不做任何的响应;
5. 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

OSPF协议?OSPF的工作原理

OSPF(Open Shortest Pass First,开放最短路径优先协议),是一个最常用的内部网管协议,是一个链路状态协议。(网络层协议,)
原理:
OSPF组播的方式在所有开启OSPF的接口发送Hello包,用来确定是否有OSPF邻居,若发现了,则建立OSPF邻居关系,形成邻居表,之后互相发送LSA(链路状态通告)相互通告路由,形成LSDB(链路状态数据库)。再通过SPF算法,计算最佳路径(cost最小)后放入路由表。

02222200…221222

TCP与UDP区别总结

TCP面向连接(如打电话要先拨号建立连接)提供可靠的服务;UDP是无连接的,即发送数据之前不需要建立连接

什么是三次握手四次挥手?

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据

客户端先发送FIN,进入FIN_WAIT1状态,用来关闭Client到Server的数据传送
服务端收到FIN,发送ACK,进入CLOSE_WAIT状态,客户端收到这个ACK,进入FIN_WAIT2状态
服务端发送FIN,进入LAST_ACK状态,用来关闭Server到Client的数据传送
客户端收到FIN,发送ACK,进入TIME_WAIT状态,服务端收到ACK,进入CLOSE状态(等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。)

tcp为什么要三次握手?
防止重复连接 同步初始化序列化
dns是什么?dns的工作原理
将主机域名转换为ip地址,属于应用层协议,使用UDP传输。(应用层协议)

总结: 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存。
一、主机向本地域名服务器的查询一般都是采用递归查询。
二、本地域名服务器向根域名服务器的查询的迭代查询。
一次完整的HTTP请求过程
域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户
Cookies和session区别
存储的位置不同,cookie:存放在客户端,session:存放在服务端。Session存储的数据比较安全

HTTPS和HTTP的区别
1.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全, HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
2. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
https://www.cnblogs.com/wqhwe/p/5407468.html
session 的工作原理?
session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。
http长连接和短连接的区别
一个快,一个慢
由上可以看出,长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户端适合使用长连接。在长连接的应用场景下,client端一般不会主动关闭连接,当client与server之间的连接一直不关闭,随着客户端连接越来越多,server会保持过多连接。这时候server端需要采取一些策略,如关闭一些长时间没有请求发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件允许则可以限制每个客户端的最大长连接数,这样可以完全避免恶意的客户端拖垮整体后端服务。
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费较多时间和带宽。

OSI 的七层模型都有哪些?

物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
数据链路层:接收来自物理层的位流形式的数据,并封装成帧,传送到上一层
网络层:将网络地址翻译成对应的物理地址,并通过路由选择算法为分组通过通信子网选择最适当的路径。
传输层:在源端与目的端之间提供可靠的透明数据传输
会话层:负责在网络中的两节点之间建立、维持和终止通信
表示层:处理用户信息的表示问题,数据的编码,压缩和解压缩,数据的加密和解密
应用层:为用户的应用进程提供网络通信服务

session 的工作原理?什么是TCP粘包/拆包?发生原因?解决方案
session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。
TCP如何保证可靠传输?
TCP协议保证数据传输可靠性的方式主要有:
校验和
序列号
确认应答
超时重传
连接管理
流量控制
拥塞控制

URI和URL的区别
URI 是统一资源标识符,而 URL 是统一资源定位符。
什么是SSL ?
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
https是如何保证数据传输的安全(SSL是怎么工作保证安全的)
SSL代表安全套接字层。它是一种用于加密和验证应用程序(如浏览器)和Web服务器之间发送的数据的协议。 身份验证 , 加密Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。SSL/TLS协议作用:认证用户和服务,加密数据,维护数据的完整性的应用层协议加密和解密需要两个不同的密钥,故被称为非对称加密;加密和解密都使用同一个密钥的 对称加密。 优点在于加密、解密效率通常比较高HTTPS 是基于非对称加密的, 公钥是公开的,
(1)客户端向服务器端发起SSL连接请求;
(2) 服务器把公钥发送给客户端,并且服务器端保存着唯一的私钥
(3)客户端用公钥对双方通信的对称秘钥进行加密,并发送给服务器端
(4)服务器利用自己唯一的私钥对客户端发来的对称秘钥进行解密,
(5)进行数据传输,服务器和客户端双方用公有的相同的对称秘钥对数据进行加密解密,可以保证在数据收发过程中的安全,即是第三方获得数据包,也无法对其进行加密,解密和篡改。
因为数字签名、摘要是证书防伪非常关键的武器。 “摘要”就是对传输的内容,通过hash算法计算出一段固定长度的串。然后,在通过CA的私钥对这段摘要进行加密,加密后得到的结果就是“数字签名”

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
TCP对应的应用层协议,UDP对应的应用层协议
TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)是运输层的两个主要协议,均是互联网的正式标准。
常见的状态码有哪些?
200 OK //客户端请求成功403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误URI和URL的区别URI,统一资源标识符,用来唯一的标识一个资源。URL可以用来标识一个资源,而且还指明了如何定位这个资源。

1.2常见常用端口
21 FTP(文件传输)协议
22 ssh服务
23 Telnet(远程登录)协议
25 简单邮件传输协议(SMTP)
53 dns服务 (域名服务器)
67 dhcp (动态地址分配协议)
80 http服务器
443 https服务器
445 文件共享打印机端口
3306 mysql数据库服务
3389 远程桌面
8080 tomcat的默认安装端口 WWW的默认代理
手动式常用攻击方式
SQL注入,宽字节注入,XSS攻击,CSRF攻击,文件上传漏洞,文件包含漏洞,Dos攻击,DDos攻击,XXE攻击,arp欺骗,arp毒化,提权等。

1.3Linux目录
/bin 存放着最经常使用的命令
/dev 存放的是Linux的外部设备
/etc 存放所有的系统管理所需要的配置文件和子目录
/home 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
/lib 存放着系统最基本的动态连接共享库
/media linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下
/root 系统管理员,也称作超级权限者的用户主目录
/tmp 存放一些临时文件
/usr 是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录
/usr/bin 系统用户使用的应用程序
/var 存放日志
Linux常用命令
cd:进入文件或目录
ls:查看当前目录文件
cat:查看文本
grep:查找文件或字符串
cp:拷贝
find 搜索文件或文本目录
pwd 查看当前路径
tree 树状图列出目录内容
tar 解压文件
ps 列出进程
kill 删除
1.4常见系统版本
redhat ubuntu suse debian centos
Kali BT5 windwos server2003-2008-2012-2016 win7 win10
Linux文件类型

1.5常见的安全设备及技术
IDS IPS 入侵检测 漏洞扫描 waf VPN 蜜罐 APT
1.6 HTTP的请求方法
HTTP的常用方法
1、GET方法
GET方法用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不应对数据产生其他影响。
在GET请求的URL中发送查询字符串(名称/值对),需要这样写:
说明:
GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中;且GET请求有长度限制,仅用于请求数据(不修改)。
注:因GET请求的不安全性,在处理敏感数据时,绝不可以使用GET请求。
2、POST方法
POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。
POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。
3、HEAD方法
HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分。这对于恢复相应头部编写的元数据非常有用,而无需传输整个内容。
4、PUT方法
PUT方法用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。
它会将包含的元素放在所提供的URI下,如果URI指示的是当前资源,则会被改变。如果URI未指示当前资源,则服务器可以使用该URI创建资源。
5、DELETE方法
DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。
6、CONNECT方法
CONNECT方法用来建立到给定URI标识的服务器的隧道;它通过简单的TCP / IP隧道更改请求连接,通常实使用解码的HTTP代理来进行SSL编码的通信(HTTPS)。
7、OPTIONS方法
OPTIONS方法用来描述了目标资源的通信选项,会返回服务器支持预定义URL的HTTP策略。
8、TRACE方法
TRACE方法用于沿着目标资源的路径执行消息环回测试;它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量。
GET 和 POST 的区别

get是获取数据,post是修改数据
1.7 Python的常用库
Pygame :游戏库
Random :随机库
Datetime :日期和时间的操作库
Math :数字常数和数字函数
Sys :命令行参数库
1.8 web会话管理
WEB会话管理概述

存在意义
1、http是无状态的,一次请求结束,连接断开
2、服务器再收到请求,无法判断连接用户
3、为了需要辨别访问用户,需要一种记录用户的方式
WEB应用会话管理方式
1、session的管理方式
2、cookie的管理方式
3、token的管理方式
Session的管理方式
认证过程
1、服务端session时用户第一次访问应用时,服务器就会创建的对象
2、服务器为每一个session都分贝一个唯一的sessionID
3、服务器在创建晚session后,会把sessionID通过cookie返回给用户所在的浏览器
4、当用户第二次向夫妻发送请求的时候,就会通过cookie把sessionID传回服务器。
5、用户再次请求,服务器能狗根据sessionID找到与该用户对一个的session信息
认证过程图:

session的管理方式
1、这种方式将会话信息存储在web服务器里,当用户同时在线量比较多时,这些会话信息会占据比较多的内存
2、多台应用贡献session时,会遇到跨域问题
代码逻辑图:

Cookie的管理方式
Cookie基础
1、cookie是由HTTP服务器设置的
2、cookie信息保存在浏览器中

Cookie与session最大的区别:
1、cookie将数据存储客户端
session将数据村春在服务器端
Cookie的认证过程
1、用户发起登录请求,服务端根据传入的用户密码之类的身份信息
2、服务器验证用户是否满足登录条件,如果满足,就根据用户信息创建一个登录凭证。
3、服务端把上一步创建好的登录凭证,先对他做数字签名,然后再用堆成加密算法做加密处理
4、将签名、加密后的字串,写入cookie。cookie的名字必须固定
5、用户登录后发起后续请求,服务端根据上一步存登录凭证的cookie名字,获取到相关cookie值
认证过程图:

相关问题
1、实现了服务端无状态化
2、cookie有大小限制,存储不了太多数据
3、每次传送cookie,增加了请求数量,对访问性能也有影响
4、同样存在跨域问题
TOKEN的管理方式
1、流程和实现上跟cookie-based基本无区别
2、cookie-based里面写道cookie里的ticket
3、token在请求都必须通过url参数或者是http header的形式,主动带上token

2漏洞利用和攻击手段
2.1常用渗透工具
Sqlmap:一个便捷的自动化SQL注入工具
Burpsuite:通常用来抓取网站数据包,(更有爬虫,web集成工具,暴力破解,弱口令,解码等功能。。。)
Nmap:用来扫描各种协议,端口。
中国菜刀:通过22端口远程连接目标机器的工具
蚁剑:通过22端口远程连接目标机器的工具
Arpspoof: ARP欺骗工具
Arping:探测目标MAC 地址的arp级别扫描工具
Wireshark:用来抓取以太网内所有从你主机经过的流量
Xshell:强大的SSH连接主机工具,(支持ssh1,ssh2和telnet协议)
御剑:扫描网站域名信息
Winhex:十六进制文件编辑,磁盘编辑
AWVS:强大的自动化web漏洞扫描工具

2.2 web安全漏洞
xss漏洞 反射型 存储型 dom型
csrf&ssrf漏洞
sql注入
XXE注入
文件包含
文件解析和文件上传
命令执行
逻辑漏洞
xss漏洞 反射型 存储型 dom型
csrf&ssrf漏洞
sql注入
XXE注入
Sql注入
原理: 通过将恶意的sql查询语句插入到应用的输入参数中,欺骗数据库服务器执行非授权的任意查询
注入点分类: 数字型注入 字符型注入
提交方式分类:
get注入
POST注入
Cookie注入
http头部注入
执行效果分类:
布尔盲注
时间盲注
报错注入
宽字节注入
Sql注入防御:
代码层面
对用户输入的内容进行转义(PHP中addslashes()、mysql_real_escape()函数)
限制关键字的输入(PHP中preg_replace()函数正则替换关键字),限制输入的长度
使用SQL语句预处理,对SQL语句首先进行预编译,然后进行参数绑定,最后传入参数
网络层面
部署防火墙

上述漏洞详解
XSS漏洞
XSS漏洞概述
跨站脚本(Cross Site Scripting)攻击,是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料,利用用户身份进行某种动作或者访问者进行病毒侵害的一种攻击方式。
没有对web前端的输入边界进行严格的过滤是XSS漏洞的主要原因。
XSS漏洞发生在web前端,主要对网站用户造成危害,并不会直接危害服务器后台数据.
2. XSS分类
反射型xss
简单地对用户输入的数据直接或未经过完善的安全过滤就在浏览器直接输出,导致输出的数据中存在可被浏览器执行的代码。一般是页面弹窗
存储型xss
web应用程序对用户输入的数据不严格,导致web应用程序将黑客输入的恶意跨站攻击数据信息保存到服务端的数据库或者其他文件中,当页面进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在页面中进行输出展示,进而导致跨站脚本代码的执行.
常见的场景就是在留言板,博客或者新闻发布系统,恶意代码直接写入文章,评论 ,留言中,浏览时即会执行相应的脚本代码。
DOM型XSS
通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击
XSS漏洞防御
对前端输入进行过滤和编码
对输出进行过滤和编码
对关键的cookie使用http-only
csrf漏洞
原理:
跨站请求伪造,盗用用户的身份,以用户的身份发送恶意请求,对服务器来说这个请求是合法的,却完成了攻击者所希望的一个操作.
csrf防御
1.在请求地址中添加 token 并验证
2.验证 HTTP Referer 字段
3.设置cookie的域,cookie有效期
4.在 HTTP 头中自定义属性并验证
ssrf漏洞
原理
由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
漏洞出现点
1)分享:通过URL地址分享网页内容
2)转码服务
3)在线翻译
4)图片加载与下载:通过URL地址加载或下载图片
5)图片、文章收藏功能
6)从URL关键字中寻找
漏洞防护
1.禁用不需要的协议,仅仅允许http和https请求
2.过滤输入信息,永远不要相信用户的输入,判断用户的输入是否是一个合理的URL地址
3. 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法
4. 设置URL白名单或限制内网IP
5. 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态
XXE漏洞
原理
简单来说,XXE就是XML外部实体注入。当应用程序允许引用外部实体时,通过构造恶意内容,就可以导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害
xxe危害
读取任意文件
执行系统命令
探测内网端口
攻击内网网站
导致DOS攻击
xxe防御
过滤用户提交的xml数据
配置XML处理器使用禁用DTD、禁止外部实体解析
文件包含漏洞
什么是文件包含
简单一句话,为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含函数将文件包含进来,直接使用包含文件的代码
文件包含漏洞成因
在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞。通常文件包含漏洞出现在PHP语言中。

include( ) include_once() require() require_once()
区别 include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;
而require函数出现错误的时候,会直接报错并退出程序的执行
本地文件包含
当包含的文件在服务器本地时,就形成了本地文件包含
远程文件包含
当包含的文件在远程服务器上时,就形成了远程文件包含。
1). 需要php.ini中allow_url_include = on以及allow_url_fopen=on
2). 所包含远程服务器的文件后缀不能与目标服务器语言相同。(比如目标服务器是php脚本语言解析的,那么包含的远程服务器文件后缀不能是php)

文件包含漏洞之伪协议
data:text/plain 或 data:text/plain;base64

php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。
php://filter 该伪协议可以读取php文件代码以base64编码输出,比如说我们想读取一个php文件但是不想让它正常php执行代码后的结果,我们想要这个php文件的代码的时候就可以使用这个伪协议。
使用方法:
php://filter/read=convert.base64-encode/resource=需要读取的文件代码内容
file:// 用于访问本地文件系统,且不受allow_url_fopen与allow_url_include的影响。
使用方法:file://文件绝对路径 file://C:/Windows/system.ini

zip://可以访问压缩文件中的文件。但是需要绝对路径。
使用方法: zip://[压缩包绝对路径]#[压缩文件内的文件名]
文件包含漏洞防御
1.白名单策略,仅允许包含运行指定的文件
2.过滤.(点)/(反斜杠)\(反斜杠)
3.禁止服务器远程文件包含
文件解析及上传漏洞
原理
当文件上传点没有对上传的文件进行严格的验证和过滤时,就容易造成任意文件上传,包括上传动态文件(asp,php,jsp)等
如果上传的目标目录没有限制执行权限,导致所上传的动态文件可以正常执行,就导致了文件上传漏洞
存在上传漏洞的必要条件:
(1)存在上传点
(2)可以上传动态文件
(3)上传目录有执行权限,并且上传的文件可执行
(4)可访问到上传的动态文件
绕过
JS检测绕过 使用burpsuite可以突破
文件后缀绕过
1.文件名大小写绕过,例如Php,AsP等类似的文件名
2.后缀名字双写嵌套,例如pphphp,asaspp等
3.可以利用系统会对一些特殊文件名做默认修改的系统特性绕过
4.可以利用asp程序中的漏洞,使用截断字符绕过
文件类型绕过 使用burpsuite,修改Content-Type的参数
文件截断绕过 00截断
文件内容绕过 利用成功上传到删除文件的时间差
服务器解析漏洞
Apache解析漏洞
IIS解析漏洞
Nginx解析漏洞

防御
1.上传文件重命名
2.文件后缀名白名单
3.隐藏上传文件路径
4.文件扩展名服务端白名单校验
5.文件内容服务端校验
6.图片二次渲染
命令执行漏洞
原理
应用有时需要调用一些执行系统命令的函数,如PHP中的system()、exec()、shell_exec()、passthru()、popen()、proc_popen()等,当用户能控制这些函数的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞

3语言方面漏洞
Php危险函数
eval() 把字符串作为php代码执行
phpinfo() 输出php配置信息
getenv() 获取环境变量
putenv() 设置环境变量

包含函数
include() include_once()
require() require_once()
exec() 执行一个外部程序
system() 执行外部程序,并且显示输出
file() 被整个文件读入一个数组中
fopen() 打开文件或者url
3.1 unserialize反序列化漏洞
序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,类ObjectInputStream类的readObject()方法用于反序列化。下面是将字符串对象先进行序列化,存储到本地文件,然后再通过反序列化进行恢复
问题在于,如果Java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行。
所以这个问题的根源在于类ObjectInputStream在反序列化时,没有对生成的对象的类型做限制;假若反序列化可以设置Java类型的白名单,那么问题的影响就小了很多。
防御
1.在反序列化之前,重写ObjectInputStream的resolveClass方法对即将序列化的对象进行校验
2. 禁止JVM执行外部命令Runtime.exec
判断出网站的CMS对渗透有什么意义?
查找网上已曝光的程序漏洞。
如果开源,还能下载相对应的源码进行代码审计。
如何手工快速判断目标站是windows还是linux服务器?
linux大小写敏感,windows大小写不敏感。

Nmap扫描的几种状态
Open:端口处于开放状态
Closed:端口处于关闭状态
Filtered:过滤
Unfiltered:未过滤
Open|filtered状态
这种状态主要是nmap无法区别端口处于open状态还是filtered状态。这种状态只会出现在open端口对报文不做回应的扫描类型中,如:udp,ip protocol ,TCP null,fin,和xmas扫描类型.
Closed|filtered状态
这种状态主要出现在nmap无法区分端口处于closed还是filtered时。此状态只会出现在IP ID idle scan中.
3.2 owasp 漏洞都有哪些?
SQL注入
2、失效的身份认证和会话管理
3、跨站脚本攻击XSS
4、直接引用不安全的对象
5、安全配置错误
6、敏感信息泄露
7、缺少功能级的访问控制
8、跨站请求伪造CSRF
9、使用含有已知漏洞的组件
10、未验证的重定向和转发
GET和POST的区别
分类 GET POST
后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签 可收藏为书签 不可收藏为书签
缓存 能被缓存 不能缓存
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
历史 参数保留在浏览器历史中。 参数不会保存在浏览器历史中。
对数据长度的限制 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 无限制。
对数据类型的限制 只允许 ASCII 字符。 没有限制。也允许二进制数据。
安全性 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET ! POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性 数据在 URL 中对所有人都是可见的。 数据不会显示在 URL 中。
或者
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。

渗透测试思路
从信息收集开始->漏洞发现->漏洞利用->权限获取->证据收集->风险评估->到生成报告结束。

  1. 渗透中首先要对目标进行信息收集;

  2. 收集例如使用的脚本中间件的类型版本开发端口等情况(使用工具:whatweb、nmap、站长工具等);

  3. 对系统开发商进行分析(例如:首页底部的技术支持:xxxxxx)

  4. 对系统使用的cms进行分析(一般通过:御剑1.5、北极熊扫描器、robots.txt文件识别、cookie识别等方法);

  5. 可通过暴力枚举扫描器进行敏感目录文件的探测(一般利用:御剑等类似 或者写一个简单的脚本文件,主要通过字典的方式进行扫描,burp也可以实现);

  6. 可以的话通过扫描软件发现常规漏洞(例如:AWVS、wwwscan、appscan、北极熊扫描器);

  7. 如果知道特定的版本的cms,或者知道使用的cms名称可通过互联网进行漏洞搜索根据网络爆出的漏洞进行测试。

  8. 发现漏洞后通过对漏洞的分析,然后深度利用达到攻击效果(常用的攻击工具:sqlmap、xss平台、各种漏洞的exp、cookie编辑插件、漏洞攻击脚本);

  9. 例如通过sqlmap深度利用获取管理员的账号密码(密码一般为加密值,可通过解密网站进行解密再利用例如:http://www.cmd5.com);

  10. 通过前期敏感地址的收集进行管理员登陆;(因为管理员功能较多容易出现漏洞,如果普通用户展示页面也存在相关漏洞进行利用即可);

  11. 登陆后根据功能测试:获取shell(获取shell方法很多,本着把可执行脚本以文件形式写入或者传入或以其他形式存储在服务端可被用户访问的目录中即可。);

  12. 通过shell进行服务器权限的控制(常见方法:添加超级管理员、读hash值getpass等),shell脚本一般情况下继承中间件的权限,若权限较低则进行提权操作;

  13. 通过sa用户提权、可执行脚本提权(例如asp的网站asp脚本权限低但发现可以执行php脚本为高权限)、serv-u提权、查看系统版本和补丁情况查找可提权的EXP提权;

  14. 若进行了端口限制不能远程连接,则可进行端口转发操作进行连接。

  15. 登陆后可进行内网渗透、嗅探等一些列操作渗透同机房甚至同C段、B段主机;

  16. 整理信息,生成报告等等等等…
    3.3缓冲区溢出漏洞
    原理
    缓冲区溢出是指当计算机向缓冲区内填充数据时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。通常往程序的缓冲区写超出长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他指令,以达到攻击的目的。
    防御
    1)强制写正确的代码的方法

    编写正确的代码是一件非常有意义但耗时的工作,特别像编写C语言那种具有容易出错倾向的程序(如:字符串的零结尾),这种风格是由于追求性能而忽视正确性的传统引起的。尽管花了很长的时间使得人们知道了如何编写安全的程序,具有安全漏洞的程序依旧出现。因此人们开发了一些工具和技术来帮助经验不足的程序员编写安全正确的程序。虽然这些工具帮助程序员开发更安全的程序,但是由于C语言的特点,这些工具不可能找出所有的缓冲区溢出漏洞。所以,侦错技术只能用来减少缓冲区溢出的可能,并不能完全地消除它的存在。除非程序员能保证他的程序万无一失,否则还是要用到以下部分的内容来保证程序的可靠性能。

    2)通过操作系统使得缓冲区不可执行,从而阻止攻击者殖入攻击代码

    这种方法有效地阻止了很多缓冲区溢出的攻击,但是攻击者并不一定要殖入攻击代码来实现缓冲区溢出的攻击,所以这种方法还是存在很多弱点的。

    3)利用编译器的边界检查来实现缓冲区的保护

    这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是相对而言代价比较大。

    4)在程序指针失效前进行完整性检查

    这样虽然这种方法不能使得所有的缓冲区溢出失效,但它的确确阻止了绝大多数的缓冲区溢出攻击,而能够逃脱这种方法保护的缓冲区溢出也很难实现。
    https://baijiahao.baidu.com/s?id=1668767940652851301&wfr=spider&for=pc

3.4 SQL报错注入方法
通过floor报错,注入语句如下:
and select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a);
通过ExtractValue报错,注入语句如下:
and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));

通过UpdateXml报错,注入语句如下:
and 1=(updatexml(1,concat(0x3a,(selectuser())),1))
通过NAME_CONST报错,注入语句如下:
and exists(selectfrom (selectfrom(selectname_const(@@version,0))a join (select name_const(@@version,0))b)c)
通过join报错,注入语句如下:
select * from(select * from mysql.user ajoin mysql.user b)c;
通过exp报错,注入语句如下:
and exp(~(select * from (select user () ) a) );
通过GeometryCollection()报错,注入语句如下:
and GeometryCollection(()select *from(select user () )a)b );
通过polygon ()报错,注入语句如下:
and polygon (()select * from(select user ())a)b );
通过multipoint ()报错,注入语句如下:
and multipoint (()select * from(select user() )a)b );
通过multlinestring ()报错,注入语句如下:
and multlinestring (()select * from(selectuser () )a)b );
通过multpolygon ()报错,注入语句如下:
and multpolygon (()select * from(selectuser () )a)b );
通过linestring ()报错,注入语句如下:
and linestring (()select * from(select user() )a)b );
3.5 SQL常用函数:
(1)isnull(expression,value)
declare @num intselect isnull(@num,11) 返回:11
如果expression不为null返回expression表达式的值,否则返回value的值。

NULLIF函数
NULLIF(Expression1,Expression2)
如果两个参数相等,则返回NULL;否则就返回第一个参数。
等价于:Case WHEN Expression1=Expression2 Then NULL ELSE Expression1。
例如Select NULLIF(1,1)返回NULL,Select NULLIF(1,2)返回1。

NULL
NULL是个神奇的东西,表示空值,未知值,任何数与它加减乘除都返回NULL。

COALESCE函数
COALESCE(Expression1,Expression2,Expression3,…)
接受一系列的表达式或列,返回第一个非空的值。
例如SELECT COALESCE(NULL,NULL,4,NULL,NULL,5),那么返回,如果里面的参数都为NULL,那么会报错。

(2)聚合函数
avg() 平均值 统计时注意null不会被统计,需要加上
isnull(列名,0)
sum() 求和
count() 求行数
min() 求最小值
max() 求最大值

(3)字符串操作函数
len() --计算字符串长度
lower() --转小写
upper () --大写
ltrim() --字符串左侧的空格去掉
rtrim () --字符串右侧的空格去掉
ltrim(rtrim(’ bb ‘))
left (str,length) --返回str 左起 length个字符。
right (str,length) --返回str 右起 length个字符。substring(string,start,length) --start起始位置(从1开始)–substring(‘abcdef111’,2,3) 返回‘bcd’
(string,oldstr,newstr)–replace(‘abcdef’,‘abc’,‘123’) 返回:123def
reverse(str) --将指定的字符串的字符排列顺序颠倒。
space(length) --返回一个有指定长度的空白字符串。
stuff (str1,start, length,str2) --用另一子串替换字符串指定位置、长度的子串。start开始为
1stuff(‘abcdef’,2,3,‘123’) 返回:a123ef
如果起始位置为负或长度值为负,或者起始位置大于str1的长度,则返回null值。
如果length 长度大于str1中 start以右的长度,则str1只保留首字符。replicate(str,length)
返回一个重复str字符串length次的字符串。
replicate(‘abc’,3) 返回:abcabcabc
(4)字符串比较函数
charindex(substr,str) --返回字符串中某个指定的子串出现的开始位置。查找substr在str中第一次出现的位置,位置从1开始。0表示没找到
charindex(‘c’,‘abcdefg’) 返回:
3patindex(’%substr%',str) --返回字符串中某个指定的子串出现的开始位置。
patindex(‘a%’,‘abcdefg’) 返回:1
可以使用通配符,但 pattern 之前和之后必须有 % 字符(搜索第一个或最后一个字符时除外)。
(5)数据类型转换函数
cast (str1 AS <data_ type>[ length ]) --将str1转换为data_ type类型
convert (<data_ type>[ length ], str1 [, style]) --将str1转换为data_ type类型length长度。
convert (nvarchar(10),getdate(),120) --返回:2017-10-21,120标识数据样式,或者说叫格式。
(6)日期函数
1、day(date_expression)
返回date_expression中的日期值
2、month(date_expression)
返回date_expression中的月份值
3、year(date_expression)
返回date_expression中的年份值
4、dateadd()
dateadd (, , )
返回指定日期date 加上指定的额外日期间隔number 产生的新日期。
5、datediff()
datediff (, , )
返回两个指定日期在datepart 方面的不同之处,即date2 超过date1的差距值,其结果值是一个带有正负号的整数值。
dateadd(day,DATEDIFF(day,0,GETDATE()),0)返回下周第一天,改成year就是本年第一天,month是本月第一天,day是今天零点
6、datename()
datename(, )
以字符串的形式返回日期的指定部分此部分。由datepart 来指定。
7、datepart()
datepart (, )
以整数值的形式返回日期的指定部分。此部分由datepart 来指定。
datepart (dd, date) 等同于DAY (date)
datepart (mm, date) 等同于MONTH (date)
datepart (yy, date) 等同于YEAR (date)
8、getdate()
以datetime 的缺省格式返回系统当前的日期和时间。

(7)数学函数
abs(numeric_expr) 求绝对值
ceiling(numeric_expr) 取大于等于指定值的最小整数
exp(float_expr) 取指数
floor(numeric_expr) 小于等于指定值得最大整数
pi() 3.1415926…
power(numeric_expr,power) 返回power次方
rand([int_expr]) 随机数产生器
round(numeric_expr,int_expr) 安int_expr规定的精度四舍五入
sign(int_expr) 根据正数,0,负数,返回+1,0,-1
sqrt(float_expr) 平方根
(8)数据类型判断
isnumeric() 确定表达式是否为一个有效的数字类型。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FODKING

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值