信息搜集
信息搜集就是对我们要进行渗透测试的目标主机进行一些信息搜集,以此来找到漏洞。信息搜集贯穿于我们整个渗透过程,无论是web的渗透,还是后面的内网渗透。因为在实战中,我们碰到的网站架构或者是内网topo结构都千奇百怪。所以信息搜集很重要,只有搜集到更多的信息,我们才能更有几率的找到漏洞。
信息搜集分为主动信息搜集和被动信息搜集
主动信息搜集就是我们主动的对网站进行端口扫描,目录爆破等。
被动信息搜集就是利资产测绘进行搜集,从边缘的地方进行搜集。
更推荐的是被动信息搜集,因为在实战中,如果对目标主机进行主动的信息搜集。对对方网站进行了多次的敏感访问。我们的ip会进入黑名单。就是被ban
对web服务器的信息搜集
第一步:CDN(分布式网络)的绕过
对于一个目标网站,我们首先的是要判断对方是否有CDN节点,如果不进行判断,那么我们搜集的信息就是对方网站的缓存节点。访问的不是对方的真实主机,那么信息搜集毫无意义。
当我们判断对方没有CDN节点,我们就进行下一步的信息搜集,如果判断对方有CDN节点,那么我们就要进行CDN节点的绕过,去访问他的真实主机。接下来将介绍一些判断和绕过的方法
判断是否有CDN:
1.超级ping
超级ping是一个网页,我们可以通过输入对方的域名,查看ip的是否相同。如果相同,那么说明没有CDN,如果不相同,那么就可能存在CDN。这里说一下CDN的作用,CDN就是公司服务器对比较偏远的地方设立的一个节点,就理解为一个虚拟服务器,上面有服务器的一些缓存。当离主服务器较远的客户端机进行访问时,就会去访问CDN节点,加快用户的访问速度。
CDN绕过
1.网站查询法 get-site-ip
2.查询DNS的历史解析记录,原理就是查找对方还未设置CDN时候的真实IP
3.用冷门的国家访问,对于一些比较偏远和冷门的国家,那里的用户会更少,所以公司一般为了节约资金,不会在那里设置CND节点,所以访问的就是真实服务器的IP
4.邮件源码对比第三方查询,有些公司会有第三方服务器,也会支持邮箱注册,那么你注册时候,对方邮箱会给你发送一个验证码,我们查看对方给我们发送邮件的源码,可以找到对方的真实ip,然后用第三方软件进行对比。筛选出真实ip
5.软件 fuckCDN
第二步:查相关子域名信息,查相关企业信息
我们查询相关企业信息和相关子域名信息的目的都是为了从他的非主站入手,因为查询到的子域名,企业信息,也就是一些子公司。他们的服务器都很有可能在同一个园区,甚至是一个机房。假如主站防护做的很好,或者是一个静态页面。我们无从下手,从他的子域名,子公司进行入手,我们的攻击面会扩大,且在同一园区,同一机房,我们拿到他们的权限,也就等同于拿到了主站的权限。接下来我来介绍几种查询的方法。
查相关企业信息:
1.站长工具,whois ,ENscan(查询app,公众号,公司信息)
查相关子域名信息:
1.软件查询,oneforall, layer挖掘机。
2.搜索引擎 bing google 微步在线情报社区
3.黑暗引擎
4.旁站和c段
Googlehacking 语法
site:找到与指定网站有联系的URL。例如输入Site:family.chinaok.com,返回所有和这个网站有关的URL。
intitle:返回所有网页标题中包含关键词的网页。例如输入intitle:cbi,这样网页标题中带有 cbi 的网页都会被搜索出来。
inurl:搜索包含有特定字符的URL。例如输入inurl:cbi,则可以找到带有 cbi 字符的URL。
intext:搜索网页正文内容中的指定字符。例如输入intext:cbi,将返回所有在网页正文部分包含 cbi 的网页。
link:例如link:thief.one,返回所有和 thief.one 做了链接的URL。
filetype:搜索指定类型的文件。例如输入filetype:cbi,将返回所有以 cbi 结尾的文件URL。
第三步:查站点信息
我们对已经准备渗透的网站进行战点的信息查询,这些信息可以扩大我们的攻击范围。我们主要查询的站点信息有这些
1.系统
window不区分大小写,Linux区分大小写。
ttl值,window128 linux255.....
让网站报错(404)
抓返回数据包,头部可能有相关服务器信息
一些特殊服务(端口)或者软件,ssh 22 linux ,3389 远程桌面 window
路径特征 比如linux var/www
根据脚本特性 例如asp只能在window上用
软件Netcat瑞士军刀,插件Wappalyzer,amap
banner欢迎语
这些判断不一定准确,需要配合进行筛选
2.网站架构
查询到cms或者网站框架进行漏洞利用,whatweb,黑暗引擎,wappalyer
(cms和框架的区别,cms相当于精装房,添加数据就可以使用,相当于二次开发,框架就是毛坯房,把功能写好了剩下的需要自己装,相当于一次开发。)
3.相关资产
旁站的利用,同ip,同端口,不同目录,同ip不同端口。直接yujian扫就行了
4.敏感信息
一些开发人员会把源码上传到GitHub等平台进行备份,可以通过网盘,GitHub,社交媒体获取到源码。还有敏感目录或者文件robots.txt(不让爬虫爬的后台) ,phpinfo.php svn,git(用scrabble软件),web zip mdb 文件等。软件有weakfilescan dirbuster
漏洞讲解和利用
对于漏洞的发现和利用,我们需要了解OWASP十大漏洞的一些原理。可以手动发现和进行使用漏扫工具。漏扫工具有Nessus,Comodo HackerProof,OpenVAS漏洞扫描工具等。接下来要说明一些手动的发现和利用漏洞。还有一些防御手段。
sql注入
sql注入的原理:sql注入就是通过传参恶意sql语句并与数据交互,使数据库返回各位我们想要的内容。sql注入的危害:比如说数据库的中管理员的账户和密码,我们就能拿到webshell,还有的可以用sql语句进行执行文件上传,那么我们就可以直接上传一句话木马,拿到webshell,甚至可以拿到主机权限。但是也要根据数据库的类型进行输入恶意sql语句。现在介绍一下sql注入的一些流程和自己的一些看法。
核心:主要的第一步就是明确参数的传参方式,然后明确参数的类型
第一步:判断注入点
我们想要进行sql注入,第一步肯定是判断我们的注入点和传参的变量名字,如果一上网站一顿瞎注入,该传参点又没有和数据库产生交互,那岂不是白费功夫。所以,我来说一下判断注入点的方法。判断注入点,首先就要判断传参的位置,再去判断是否与数据库有没有交互。我们以mysql数据库为例 if(isset($_GET['id'])) 则这里的传参点就是?id=1。然后很简单输入 ‘ 特殊符号使数据库无法查询到数据,那么数据库就会报错,那么就说明与数据库存在交互。盲注有另外的方法。
第二步:判断参数类型
我们在在判断注入点后,就要对参数类型的判断检查他是字符型注入还是数字型。然后对前面所查询的语句进行闭合。’ ” ( (( 进行猜解。这样我们就可以闭合前面的查询语句,来查询我们想要的语句。当然后面也需要对后面的符号进行注释# ,--+ 等。这时我们也要注意URL编码的问题。很简单例如我们以mysql数据库为例 if(isset($_GET['id'])) 这是字符型注入所以在传参点输入1时候他的sql语句是这样的SELECT * FROM users WHERE id='1 and SQL语句=2' LIMIT 0,1。 我们要对查询的1进行闭合所以 ’ 闭合掉前面的语句 就剩下1=2' LIMIT 0,1 但是mysql字符串’ 是成对出现的。我们在前面 ’ 已经闭合了前面的语句,但是本身后面还有一个自带的 ’ 就没有去闭合,所以,我们把他注释掉就行了
第三步:判断字段数
我们一般使用的是union select 联合查询,union select 在mysql在数据库中有个规则,就是需要前面查询的字段数和后面语句查询的字段数必须要一致,否则就会报错。比如 slect admin from users 从users表中查询admin字段有哪些内容 假如 users表中有四个字段,那么union SELECT 也必须是4个字段。所以,我们用 union select 1,2,3,4才可以正常使用。判断字段数的方法就是 order by 加字段数 进行判断
第四步:判断回显列
让前面的语句无法查询到数据,从而显示我们后方的结果,所以一般现根据字段,查看他的回显位。主要目的就是让前方的语句查询错误,比如-1啊,1=2 等
第五步:查
table_schema:数据库名
table_name:表名
column_name:字段名
information_schema.tables 记录所有表名信息的表
information_schema.column 记录列名信息的表
这些是数据库mysql 5.0自带的表。一些函数使用group_concat输出所有字段信息 limit现在输出信息
其实sql注入,这里以mysql数据库为例,注入的手法无非就是提交方式的变化,有的是通过get,post,cooike,UA。就是判断他接受参数值的地方,再进行恶意语句的传参。
sql注入的常见的几种方法
总的来说,sql注入的方式是根据开发人员的后端代码编写来判断的,例如,只允许某个提交方式来进行数据传参,get,post,REQUEST,HTTP头部,HTTP头部就包括头部的一些信息,再则,后端代码的编写限制了网页的页面回显,有无报错信息来判断,当网页无报错信息,就是我们所说的盲注,盲注分为报错盲注(强制让数据库报错,并将相关数据带到页面),布尔盲注(传入的参数查看页面的最基本的对错回显信息),时间盲注(传入的参数查看页面是否会延时)。我们一般首选的是报错盲注,其次是布尔盲注,再者是时间盲注。因为时间盲注等待的时间最长。还有宽字节注入和dns注
宽字节注入的介绍就要来说php的魔术引号,高版本的改为了addlashes,低版本是magic_quote_gpc的开关,这种魔术引号开启后,会将传参内容中的 ‘ ” \ 前面加上注释符号 \ ,使语句无法闭合,从而无法形成注入。 数据库如果使用GBK编码的话。我们就可以使用宽字节注入。主要原理就是使\和另外的字符组成为一个字符。使注释无法生效,这样就起到了闭合符号的逃逸。例如
原本语句 id=1' and 1=1#
魔术引号 id=1\' and 1=1# 使我们的单引号无法产生作用,语句无法闭合。
宽字 id=1%df\' and 1=1# %df和\组成了中文汉字运。使\失去了注释作用。语句可以闭合。就可以进行注入了。还有一个注意的点是查表的时候,表名字是字符串,那么,表明就会被"包裹,那么我们就需要使用替代法,或者是套娃法,套娃就是将表明变成语句查询的结果,而不是直接输入表名。替代法就是使用16进制代替表名。 比如你的表名是user 16进制为42141241.那么就使用42141241代替表名,数据库识别16进制,但是16进制的识别需要标识,0x42141241 0x 用来标识是16进制。数据才会识别。
DNS注入
DNS注入,dns注入的出现是为了解决繁琐的盲注,因为盲注要输入太多的语句。我们可以使用dns的log将我们想要的数据带出。前提是对方的load_file函数需要开启,目标也必须可以出外网。核心就是利用load_file用UNC路径发起请求。实现oob数据带外。load_file在数据库的高版本被限制。所以也要注意对方数据库的版本。还有一个要注意的就是在数据库中,写绝对路径时候,F:\ 中的\会被当成转义字符,解决方法就是双写\\ 或者写 / 来书写路径
二次注入,二次注入的原理分为两步,第一步是插入恶意语句,第二步是引用恶意语句。通常使用在注册页面,比如,我们注册页面输入用户名 admin'# 密码随便,然后我们注册成功后就可以修改密码,那么修改密码的用户名是 admin'# 数据库的执行语句就会是
update users set password='$new_pass' where username='admin'# and password='$old_pass'; 很明显,admin后面的语句被注释掉了,那我们修改的密码就是admin的密码,而不是admin'#的密码。就可以使用别人的账号进行了登录。
堆叠注入,堆叠注入我们首先要讲解到数据库语句执行的一个特点,就是可以多条语句一起执行。sql语句以;结束。所以,我们执行的语句可以;结尾后继续输入语句,来查询我们所需要的内容
绕waf
waf的中文是web应用防护系统,waf分为云waf,硬件waf,软件waf等。但他们的实际作用和核心都是一样的,都是由开发人员基于正则表达式进行开发的。其核心目的就是防御网站入侵。
具体防手段:1.拦截你访问的页面 2.对访问的页面进行跳转 3.ban ip
waf的检测机制就是正则表达式,而且waf检测的程度很深,可以检测上传的文件内容。
绕waf
绕waf就是为了躲避waf的检测,从而获取我们想要得到的数据。
绕waf的核心就是 既躲过了正则表达式的匹配,又可以让语句正常的执行。
接下来讲解几种绕waf的常见手段
1.替换法,写法替代,函数替代。
2.大小写绕过
3.编码绕过
4.注释绕过
5.白名单绕过 文件白名单,用户白名单,比如把http头中的ip改为127.0.0.1
6.垃圾数据填充 waf检测东西需要时间,有时候也会有长度限制。
例如 例如 Id=1/*dsadadasadjljj*/ order by 1 %23
我们进行waf的绕过时,不要对主网站进行实验,最好的方式是把waf下载到本地,然后进行实验。这样可以节省时间
sqlmap绕waf讲解
sqlmap中的tamper目录中有很多绕waf的脚本。可以直接使用。sqlmap中tamper的调用方法 --tamper=名字
用工具扫扫描网站的时候,需要更改头文件UA 不然会直接被拦截 --random-agent 随机出现头部
--user-gent='' 模仿头部,例如像百度爬虫的头部,就可能不会被检测
访问时间过快,发包速度过快,也会被恶意拦截,所以要更改时间 -- delay 时间 单位是s
还有一个就是 -r 指定数据包进行跑包,一般使用bp进行抓包,保存到sqlmap的目录中,然后进行跑包
防御方法:1.正则表达式过滤掉一些特殊字符,函数,语句
2.降低用户对数据库的操作权限。
3.安装waf,并时常跟新
4.对数据库进行加密
5.传参使用小众编码或则多层编码或者自创编码
文件上传漏洞
文件上传漏洞的原理就是对上传的文件没有过滤,或者过滤不完整,导致用户上传文件时将恶意的木马后门文件传入服务器。文件上传对方服务器的过滤手法分为两种,一种是前端过滤,一种是后端过滤。前端过滤大部分都是js,js就是纸老虎,直接找到网站的js给他过滤的部分删除了就行了。后端过滤就分为白名单过滤和黑名单过滤。
文件上传的思路就有常规类 扫描获目录上传位置 后台会员中心上传 后台系统上传
cms类 已知的cms漏洞配合文件上传漏洞进行文件上传
编辑器类 cheditor fckeditor kindeditor 一些编辑器漏洞也可以配合文件上传,编辑器就是输入的内容经过网站后,网站还得进行处理,然后输出到网页
其他类/CVE类 进行代码审计,平台,第三方应用配合文件上传漏洞
黑名单就是不允许一些文件的上传,白名单就是只允许一些文件的上传。接下来就介绍黑名单和白名单的一些绕过手法
黑名单:
1.特殊解析文件后缀。这要取决于对方服务器是否开启此种文件后缀的解析 例如:phtml php3 php5 pht等
2.htaccess文件。这种文件后缀的上传只有是apache服务器才行。它属于apache的配置文件,可以帮助我们实现:网页301重定向、自定义404错误页面,改变文件扩展名、允许/阻止特定的用户或者目录的访问,禁止目录列表,配置默认文档等功能。如果网站未限制该文件类型的上传。我们可以直接做好.htaccess文件,文件内容为
<FilesMatch "evil.gif">
SetHandler application/x-httpd-php #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
AddHandler php5-script .gif
</FilesMatch>
进行上传,代码的含义就是在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
3.利用Windows的命名机制,shell.php. shell.php空格 shell.php:1.jpg shell.php:$DATA 文件流
4.配合解析漏洞上传图片马。可以把马藏在图片中,只要图片马可以正常显示。那么就可以利用
5.双写后缀名绕过 pphphp,大小写绕过
白名单
1.MIME文件类型绕过,有些检测方式是文件类型,比如说burp抓包中的content-type 可以进行修改绕过
2.文件头的检查。记事本打开图片,打开后文件头部是不一样的,如果对方检测机制是通过文件头,那么可以进行修改绕过
3.%00 截断 地址方面的 比如说抓包后数据包有上传的路径,%00后的内容都截断 php5.3以下才行
4.0x00 截断 文件命名方面的
其他绕过手法:
1.文件头检测:每个文件打开后头部的标识都是不一样的。比如说jpg图片使用txt打开后,文件头得到标识就是jpg的。当对方使用文件头检测的话,我们上传图片马的时候更改文件头就可以达到绕过上传
2.二次渲染和条件竞争:因为我们在打开文件时候,就不能对文件进行删除或者移动等操作。这是一个逻辑漏洞,就是当上传文件后,如果服务器是先保存,然后再验证,更名,那么我们就可以利用条件竞争,burp发包,抢先在服务器检测到文件是php时候,对文件进行打开。这样的话,连上webshell后,文件也无法被删除。但是速度要快。
二次渲染:上传文件后,网站会对图像进行二次处理
二次渲染会有一个逻辑漏洞,未验证文件之前已经移动了
配合条件竞争意思就是在上传图片后,网站对图片会进行二次渲染,二次渲染会有一个逻辑漏洞,就是未验证文件,未对文件进行操作之前,文件就已经存储到了服务器,然后会 引起条件竞争,我们在文件被操作之前对该文件进行访问的话,那么网站对文件就无法更名,无法进行操作,这就称为条件竞争。 条件竞争是有几率的,因为可能网站在你之前对文件进行了修改。方式就是用burp进行发包,然后浏览器对目标地址文件进行访问。
这也是一种逻辑漏洞,如果先检测,再对文件进行操作
还有一些就是编辑器和CVE,CMS和解析漏洞了。这些如果可以判断到对方的版本,直接可以去百度搜索复现。就不一一赘述了。
绕waf
数据包
content-dispostion 接受的类型 可以更改
name from表单的中的名字 无法更改
filename 上传的文件名 可以更改
content-Type 文件类型(Mime) 视情况更改
1.数据溢出-防匹配
在filename 前面加入垃圾数据(分号结尾)
在content-dispostion 后面加入垃圾数据(分号结尾)
2.符号变异
filename="qq.jpg"
改为
filename="qq.jpg
让安全狗无法匹配完成,就可以上传成功,也可以不写单引号或者双引号。找最后一个双引号,前面内容进行检测,敏感文件后缀进行拦截
;代表语句结束
3.数据截断(换行)
对后缀名字进行换行
把数据包分开传输,因为换行后\n。安全狗无法识别。所以达到绕过
4.重复数据
递归上传,匹配的是最后一个为准。不是所有的都匹配
filename中嵌套filename
5.fuzz(模糊测试)
用模糊测试字典跑。
用burp跑。本地测试中只要有一个php脚本进行上传了。就可以直接拿去实际网站上用
防御方法:
1.采用后端验证
2.检测后缀,MIME,内容。
3.自带函数过滤 get_image_pointer
4.自定义函数过滤 黑名单,白名单双重验证
5.安装waf
XSS(跨站脚本攻击)
xss产生在前端,是未对页面的输入和输出进行限制和过滤,让输出的内容被用户控制。
产生条件:1.对方存在xss漏洞
2.对方浏览器的内核和版本不会组织脚本的运行
3.对方浏览器要保存cooike
4.无过滤
5.要看对方网站用cooike还是session验证,将决定获取cooike是否可以登录后台
xss类型分为三种,反射性,存储型,dom型。反射型就是你使用后一次,他才会响应一次,存储型是xss代码被存储到了数据库,不论谁点击网站页面,都会触发xss漏洞。dom是在html上可以看到,只在前端处理,危害最大的是存储型。
cooike和session
他们都是用户的凭据,cooike是存在于客户端上,而session是存在于服务器上。cooike存在的时间较久,session存在的时间较短,所以session比cooike安全。
cooike和session 都是一种用户凭据
cooike是用户的凭据,通过凭据可以判断身份信息 中小型公司
储存在本地,存活时间较长。
session会话 存储在服务器 存活时间短。更加安全 大型公司(session占用服务器资源)
这里要提出一个小知识点,叫webshell箱子反杀,以前网上有人上传绕狗免杀的后门大马,因为大马是一个脚本文件,所以别人会在大马中再藏一个后门。你拿下的网站别人都会又数据,相当于你在帮别人打网站。而我们可以找出被传送至webshell箱子的数据,加上我们的xss代码,那么就可以获取到对方管理的凭据。实现箱子反杀。
我们用软件POSTman可以更换cooike。
一些网上的xss平台或者自己搭建的蓝莲花平台。或者kali的beef。上面会生成xss代码。来达到获取cooike,获取键盘操作等功能。xss漏洞可以尝试攻击的位置有留言板,评论区,订单系统,反馈系统
如果对方获取的session验证,那么就需要使用beef使它跳转到phpinfo页面,然后用xss平台获取页面内容。就可以劫持到session
前端绕过
http-only
如果你在cooike设置了http-only属性,那么对方将无法获取到cooike。(防止js获取cooike)他并不是防止xss攻击和解决了xss漏洞
有两种方式进入后台
一种是cooike
一种是账号密码 有的浏览器会登录直接保存 我们可以利用xss读取保存的密码
如果没有保存的话,我们可以利用表单劫持(需要把攻击语句写在登录框页面,而且跨站漏洞必须产生在登录框)
如果账号密码被浏览器记录了,那么就可以通过xss平台中的js脚本进行获取明文的账号密码。只需要后台触发就行了
waf绕过
常规waf绕过思路。
先做关键字的拆分,看他拦截的部分。
标签语法替换 xss的执行效果可以用其他的操作语句来实现
特殊符号干扰 一些特殊符号可以启到截断的作用 例如 / # @
提交方式更改
垃圾数据溢出
加密解密算法
结合其他漏洞绕过
防御方式
1.htmlspecialchars() 这个函数将特殊字符转换为HTML实体
2.检测来源 同源策略 是否是同一域名。
3.http-only
4.输入过滤 输出过滤
代码验证实体化
RCE(远程代码执行漏洞)和 系统命令执行漏洞
远程代码执行漏洞就是对方使用了相关函数eval(),传参未过滤,我们通过脚本调用操作系统命令 eval()函数的意思使将字符串当作代码执行。 php asp jsp
系统命令执行漏洞就是对方使用了相关函数system(),同样传参未进行过滤,直接调用操作系统命令。 Windows linux
其实总的来说,web漏洞形成的原因就只有两点
1.使用了漏洞函数
2.可空变量
漏洞函数决定了漏洞的类型,漏洞是否存在使看是否有可控变量。 网站功能又决定了漏洞函数,比如说注入中的sql查询,文件上传的upload等函数。所以网站功能决定漏洞类型。
执行命令可以用管道符来连接
防御方式:
1.变量过滤或固定 把变量值固定
2.敏感函数禁用 防止漏洞产生的根本条件 php:eval assat system 等等
3.waf产品
csrf和ssrf
csrf 跨站请求伪造
ssrf 服务器端请求伪造
csrf就是攻击则盗用你的身份,以你的名义向网页去发送请求。
防御方式:
设置随机token,检测数据包的唯一性
cookie hashing
验证码
ssrf就是通过对方的服务器对对方的内网进行探测等操作。以web服务作为有个跳板,探测内网。
file协议
主要是用于访问本地计算机中的文件,利用它可以直接读取系统文件,例如:ssrf.php?url=file:///etc/passwd
dict协议
dict://serverip:port/命令:参数
gopher协议
gopher协议是一个在http协议诞生之前用来访问Internet资源的协议可以理解为http协议的前身或简化版,虽然古老但现在很多库都还支持gopher。
gopher协议允许数据包整合发送,用一条gopher协议命令就可以完成复杂的操作 。gopher://<host>:<port>/<gopher-path>后接TCP数据流
防御方式:
禁用不需要的协议
做返回过滤
文件包含漏洞
文件相关的漏洞有三种,文件上传,文件包含,文件下载。文件包含主要漏洞函数未include()函数造成的。include()函数会让指定的文件用脚本去执行。可以理解类似于解析漏洞
http://4.chinalover.sinaapp.com/web7/index.php?file=show.php
这是一个小题
如果访问
文件包含分为远程包含和本地包含
本地包含很简单,就是去读取本地的文件内容或一些敏感文件。
远程包含就是让去包含远程文件,远程文件可以直接挂马,或者txt,jpg,img中写马都可以,因为有include()函数,所以都会当成当前网站的脚本文件进行执行。远程文件有一个开关(php文件有个远程包含的开关allow_url_include)。
本地包含和远程包含都会有限制。一般限制的方法就是在包含的文件后缀中拼接一个.html 这样使无法正常读取包含的文件。
绕过方法 本地包含限制绕过 1.%00 截断 2.加. windows 点号长于256 linux长于4096
远程包含限制绕过 1.加个? 2.加个%23
php伪协议(用法https://www.cnblogs.com/endust/p/11804767.html)
php://filter 读取源文件
php://input+[post data] 执行php代码 ,写入一句话木马
通用协议
file:///需要完整路径
data://
防御方法:
固定后缀
检查参数,固定参数
禁用一些非必要的协议
waf
文件下载漏洞
文件下载漏洞就是下载文件的参数变成了由用户控制,用户可以去下载任意内容。(在知道路径的情况下)。比如说获取网站后端源码。网站服务器的盘符
如何知道文件的路径:1.对目录进行爆破扫描
2.读取相关文件进行一步步的信息搜集
防御方法:
魔术引号开启,让他无法更改目录
对目录设置权限。
php.ini配置open_basedir限定文件访问范围
逻辑漏洞水平越权和垂直越权
属于代码层面的未考虑到的逻辑安全问题
水平越权顾名思义,同级别用户的权限跨越。例如A和B的权限是一样的,A通过更换某个ID值类的身份标识,从而使A账号(获取,修改,删除)B账号的数据。
垂直越权就是通过普通用户来享受比你高等级用户权限 使低权限用户来享受高权限用户的操作。
水平越权漏洞利用:比如说登录到自己的账户时,对自己的账户进行修改密码,这时候抓数据包,一般数据库中admin 字段类型如下 id username usertype passwd .... 数据包如果未对id值进行加密,你刚好又知道了别人的id值,进行替换,那么,你就修改了别人的密码。这就是同级别用户的权限跨越
垂直越权漏洞利用:比如说在登录自己的账户的时候。 一般来说,开发人员为了区别普通用户和管理人员的区别 会设置字段 usertype (仅举例) 假如说普通用户的 usertype 值为0 而管理员的 usertype 值为 1 。且验证仅仅是在前端认证,那么,你通过修改usertype的参数值。就成为了管理员。
防御方法:
对数据包的参数值进行加密,防止枚举
对可控参数进行严格过滤
前后端进行信息校验 双重检验机制
waf
逻辑漏洞支付安全漏洞
介绍漏洞前先讲个题外话。
登录点的暴露破解。http和https,https就是对数据进行了加密,如果对方是https,你用burp进行暴力破解时,你需要先了解到对方的加密方式。然后进行爆破。但也可以选择不用burp进行爆破 meidusa 等等
支付漏洞常见的就是数据篡改问题,常见的篡改的参数有,商品id,购买的价格,购买数量(改为负数)支付方式(API接口改为自己) 订单号,订单状态。
常见的修改方法:替换支付,重复支付,最小额支付,负数支付,溢出支付,优惠券支付。
产生的原因就是:未检测数量和价格的唯一性。以网站的接受参数为准。未检测数据包的唯一性
防御方法:
设置token
以数据的校验为准
验证码安全
我们常说的验证码分为两种,一种是短息发送的验证码。另一种是登录或注册时候检测是否为机器人的验证码。
短信验证码漏洞
这里出现的漏洞也有两种
第一种,比如说我们进行账号重置密码时候,会发送短信,而发送的短信验证码值,我们可以在返回包中抓取,就可以直接利用。那我们如果忘记密码,重置密码是别人的账号呢
第二种,有的检测是前端检测,就是前端根据返回包中返回的一种状态码 比如说,我们的验证码输入正确后,返回包中有一个状态码为 100 ,然后这个网站也是通过前端检测状态码是否为100,如果是100,那么验证码就是通过的。我们可以利用这样的,更改状态码的值为100。那么即使我们输入的验证码是错误的,我们更改值后,网站为前端验证。还是验证成功 burp中有个inject respond 可以抓返回包,更改返回包的状态码
机器人判断验证码
这种验证码分类有很多,相同图片啊,语音,划一下,识别图片的中的字符和数字啊。这几种我们要说的就是识别,我们进行暴力破解的时候。登录需要验证码,就会防止我们暴力破解。
burp中有个插件 captcha-killer 验证码识别工具,方法自行百度。
验证码绕过
1.验证码复用(服务器验证) 有的验证码用过一次还可以使用
2.更改参数值(客户端认证)
如何判断是前端验证还是后端验证(看源代码)(源代码有时候会隐藏,抓数据包后缀为js)
token(每次登录都会产生一个新的token)
爆破:猜测token的加密方式。判断token的规律
回显:有的token是返回包中携带,于发送包中进行匹配。我们再burp中将密码和token值设置为变量 , 百度pikuchu token绕过
短信轰炸,来电轰炸
原理:各种网站发送验证码的API接口。
抓网站的注册包,或者是找回密码的包,抓的足够多再用他人的手机号进行循环。他人的手机号设置一个固定参数。带入包中进行循环