安全漏洞是指受限制的计算机、组件、应用程序或其他联机资源无意中留下的不受保护的入口点。通过对该入口点的系列操作,能使计算机遭受病毒和黑客攻击,从而产生安全问题(如信息泄露、系统破坏等问题)
Sql注入是指web应用程序没有对用户输入数据的合法性进行判断,前端传入给后端的参数是黑客可以控制的,然后将参数进行拼接,形成一个完整的Sql语句,在后端服务器中获取数据库的信息。
产生的条件:1.参数是用户可以控制的;2.参数要带入数据库进行查询
根据不同的查询参数,分析网页的返回内容判断应该采用哪种Sql注入方式。这里以查询参数id,url为http://www.ccctf.cn举例,通过观察http://www.ccctf.cn?id=1(正常页面),http://www.ccctf.cn?id=1’(可能是错误页面,如开发人员采取了防范措施,则会返回正常页面),http://www.ccctf.cn?id=1 and 1=2(利用and关键字进行测试),http://www.ccctf.cn?id=1’ or 1=1(利用or关键字进行测试)等测试用例,若返回内容不一致,则判断存在sql注入的问题。
根据返回的内容判断采用哪种Sql注入攻击方式
Union攻击:返回内容不是yes或者是no,而是别的提示信息。确认采用union攻击之后需要确认该数据表的字段数量,通过order by去判断,如http://www.ccctf.cn?id=1 order by 1返回内容于id=1的返回内容相同,则数据表字段不为1,接着尝试order by 2,直到页面返回内容与id=1的返回内容不同为止,最小的数字就是该数据表的字段数量。得到字段数量之后,就可以使用union注入了,这里假设字段数量为3,如访问http://www.ccctf.cn?id=-1 union select 1,2,3来获得union select的查询结果,若返回结果为2:3,则表示在2,3的位置上可以注入Sql语句,从而获取数据库的信息
boolean攻击:返回内容是yes或者no。则只能通过不断地尝试去获得数据库的信息,如http://www.ccctf.cn?id=1’ and length(database())>1–+,看返回内容,若返回内容为yes,则证明数据库的表名长度大于1
时间注入攻击:其本质和boolean攻击相似,不过是采用了时间盲注的方法,若符合条件则进行sleep操作,否则进行其他操作。语法类似于c++中的三元运算符,如http://www.ccctf.cn?id=1' and if(length(database())>1,sleep(3),1)–+,即若数据库的表名长度大于1,则休眠3秒,否则返回1
除此之外,还有cookie、宽字节、base64等注入攻击方式
可以通过预编译(如JDBC中通过?占位符来拼接字符)以及对用户传入的参数进行判断或者是过滤来防范该漏洞(如将测到了select等关键字之后将其丢弃,不带入sql语句去后端进行系列操作)。用户可以通过大小写绕过注入、双写绕过注入、编码绕过注入、内敛注释绕过注入等手段去避开一些过滤检测
XFF漏洞是利用抓包工具获取数据的X-FORWARD-FOR字段并且修改该字段的值,从而对该值进行修改,找到对应主机的Sql漏洞,该种漏洞属于Sql漏洞类型
XSS(Cross-Site-Scripting)是一种跨站脚本,是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,从而影响其他用户的正常访问。特点就是可以将恶意HTML/JavaScript代码注入到受害用户浏览的网页上,从而达到劫持用户会话的目的。XSS根据恶意脚本的传递方式可以分为3种,分别为反射型、存储型、DOM型,前面两种恶意脚本都会经过服务器端然后返回给客户端,相对DOM型来说比较好检测与防御,而DOM型不用将恶意脚本传输到服务器在返回客户端
反射型攻击需要用户去点击url,用户点击的url是攻击者提前写好的带有攻击页面的js脚本,并且将攻击脚本放在url的参数里面,用户点击url的时候,就会触发服务器接收该攻击脚本,从而达到XSS攻击;
存储型攻击是指恶意用户提前将攻击脚本注入,并且传入了数据库,一旦其他用户访问该网站时,便会触发服务器返回数据库的信息,从而就执行了恶意脚本
反射型攻击和存储型攻击的主要区别在于反射型攻击需要用户去点击攻击者构造的url,需要用户参与,而存储型攻击则不需要,存储型攻击的攻击脚本已经由攻击者存入数据库中了,因此一旦用户访问,则会自动调用该攻击脚本
客户端JS可以访问浏览器的DOM文本对象模型是利用的前提,当确认客户端代码中有DOM型XSS漏洞时,并且能诱使(钓鱼)一名用户访问自己构造的URL,就说明可以在受害者的客户端注入恶意脚本。和反射型很类似,但是唯一的区别就是,构造的URL参数不用发送到服务器端,可以达到绕过WAF、躲避服务端的检测效果。
当我们打开或者登陆某个网站的时候,浏览器与网站所存放的服务器将会产生一个会话(cookies),在这个会话没有结束时,你就可以利用你的权限对网站进行操作。主要原因是因为浏览器保存了合法用户的cookie信息,攻击者可以利用该信息去进行操作。
CSRF产生的前提:
登录受信任网站A,并在本地生成Cookie。
在不登出A的情况下,访问危险网站B
XSS: XSS漏洞——构造payload——发送给受害人——受害人点击打开——攻击者获取受害人的cookie——攻击者使用受害人cookie完成攻击
CSRF: CSRF漏洞——构造payload——发送给受害人——受害人点击打开——受害人执行代码——受害人完成攻击(不知情)
可以通过添加token字段去避免该漏洞
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造,形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统),可以通过在外部访问内部对外服务的主机,然后在该主机上重定向到内部私密的网站。其本质类似于跳板机
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
可通过对跳转的url进行限制,从而避免暴露服务内部网络的信息
若不对上传的文件进行限制,则用户可以上传恶意的脚本文件到服务器,从而达到攻击服务器的目的。
可通过在前端对文件后缀名进行过滤检测、在服务器端添加黑白名单等措施进行防范
暴力破解是在知道用户账号和密码之一的信息下通过不断地尝试从而获取用户的账号密码信息。
通常可使用锁定用户(当同一个用户名的用户输入密码超过3次错误就不允许登录,但是该方法不适用于已知密码,破解用户名的情况)、添加验证码(同一个ip地址只能尝试指定次数的登录)的方式去避免
命令执行是指用户传入的参数作为系统命令(cmd中可以使用的命令)的参数进行使用
可通过尽量少的调用执行系统命令的函数、对于参数进行过滤等措施防范
逻辑漏洞常见于开发时没有进行良好的设计,从而能够使用户发生越权行为,有水平方向的越权和垂直方向的越权,水平方向的越权是指用户可以获得其他用户的信息,垂直方向的越权例如普通用户能够行驶系统管理员用户的权限。
XXE(XML External Entity)漏洞是指XML外部实体注入,当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害
可通过过滤XML数据或者是禁止使用外部实体的方式去防范
黑客攻击过程:搜集信息→ 渗透测试→ 后渗透
搜集信息,信息一般包含如下几种:
1、基本初始信息:网站的基本信息,以及背景,经营内容信息等。
2、技术信息:网站的技术栈、版本、IP地址,端口,DNS,域名,子域名,子目录、敏感信息、关联系统,关联APP等,如子公司的网站,或者内部使用的APP
常见的工具有:nmap, dirsearch, subbrute等
3、社工:关键重要人物信息(网站备案人的信息),员工信息、内部运营方式,公司文化、社交媒体等信息
4、漏洞扫描
有很多漏洞扫描工具,可以帮助提前发现一些比较严重或者可以利用的漏洞。常见的工具有:Nikto等
5、抓包
通过抓包可以获取一些重要API或者敏感信息以及指纹识别信息等,也可能伪造中间人攻击
常见的工具有:Fiddler,Wireshark等
6、Google hacking
可以帮助你收集关于这个网址的一切,比如可能找到一些敏感信息或后台入口等
渗透测试,是为了证明网络防御按照预期计划正常运行而提供的一种机制。渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。是出于保护系统的目的,更全面地找出测试对象的安全隐患
常见的渗透测试工具有SQLMap、Burp Suite、Nmap等。
其中SQLMap主要是用来进行SQL注入攻击的工具、Burp Suite是用来捕捉HTTP和HTTPS协议的流量。以拦截代理的方式拦截所有通过代理的网络流量,如客户端的请求数据、服务器端的返回信息等,以中间人的方式对客户端的请求数据、服务端的返回消息做各种处理,以达到安全测试的目的。Nmap是一款端口扫描工具。
后渗透是在通过渗透测试获取目标主机的系列信息之后采取的攻击措施以及后续的操作
渗透的本质是信息搜集,而要把信息搜集发挥最大效果,一定是离不开“线索关联”,而信息搜集,无论是对内,对外,更或者是主动信息搜集,被动信息搜集
可利用metasploit、PowerShell、PowerSploit、Empire等工具进行后渗透