2023年即将过去一半,先来灵魂三连问:
好了,不扎大家的心了,接下来进入正文。
SQL注入攻击是通过将恶意构造的SQL语句插入到应用的输入参数中,再到后台SQL服务器上解析执行的一种攻击方式。
程序开发过程中未注意规范书写SQL语句,并且未对输入参数进行过滤。
使用into outfile把木马写入web目录拿到webshell需要以下几个条件:
1.拿到的mysql用户拥有file_priv权限(show global variables like '%secure%'查看)
2.对web目录有写权限
3.知道系统物理路径(需要into outfile (‘路径’))
1.判断注入点(通过扫描器,单引号,特殊符号等)
2.确定注入方式(字符型,数字型,报错注入等)
3.确定数据库类型
4.依次爆出库名–>表名–>列名–>数据
5.得到有用的数据进行利用
1.IIS
2.Apache
3.Nginx
4.Tomcat
5.Jboss
Mysql5.0以后默认添加了一个information_schema的数据库,该数据库中的表都是只读的,不能进行删除,更新,插入等操作。但它记录了数据库中所有的库名、表名、列名等重要信息。
information_schema.schemata:存储了数据库中所有数据库的库名
information_schema.tables:存储了数据库中所有表的表名
information_schema.colums:存储了数据库中所有列的列名
1.按照注入点数据类型分:
2.按照数据传参方式分:
3.按照注入方法分:
主要利用mysql在使用GBK编码时,会人为两个字符是一个汉字的特性,在转义单引号(0x27)的时候,如果加了过滤转义符号/(0x5c),我们可以利用GBK编码在/前加0xdf或者其他可以组成汉字的十六进制字符组成一个汉字(df5c)从而将单引号逃逸出来的注入方式。
1.数据库使用utf-8编码
2.使用gbk编码的修补方案:
原理:mysqlmysql_real_escape_string与addslashes的不同之处在于其会考虑当前设置的字符集,不会出现前面df与5c拼接为一个宽字节问题。当前字符集需要使用mysql_set_charset进行指定。这两个添加缺一不可。
在存入数据库的时候做了过滤,但是在取数据的时候没有做过滤,从而产生的注入方式。
1.利用mysql的into outfile写入webshell
2.利用sqlmap的–os-shell方式写入webshell
1.SQL预编译
2.严格限制参数类型,只能为数字
3.加入黑白名单
4.转义特殊字符
5.使用WAF
1.大小写、双写绕过
2.替换关键字
3.使用编码
4.使用注释
5.使用等价函数与命令
6.使用特殊符号
7.填充垃圾数据
攻击者通过在web界面中嵌入恶意脚本(通常为js代码),造成用户在浏览网页时,控制用户浏览器进行操作的攻击方式
1.反射型
一般是在url构造恶意js,将链接发给目标用户,当用户访问该链接的时候,会向服务器发起一个GET请求来提交一个带有恶意代码的链接
2.DOM型
脚本程序可以通过DOM来动态修改页面内容。
3.持久型
常见的就是在博客留言板,反馈投诉,论坛评论等将恶意代码和正文都存入服务器的数据库,每次用户访问都会触发恶意代码。
弹窗
xss盲打是一种攻击场景,也属于存储型xss
盲打的意思是无法直接在前端看到反馈效果,只有后台能看到输入的内容,从前端无法判断是否存在xss。
这种情况下我们可以存入一些加载恶意脚本的url链接,当管理员查看时,就会获取其键盘记录或者cookie等信息
1.HTML实体化编码
2.黑白名单
3.设置http-only(限制cookie劫持)
4.CSP内容安全策略
5.WAF
攻击者通过跨站请求(利用url短网站诱导点击),以合法的用户身份进非法操作,简单来说盗用你的身份信息,向第三方网站发送恶意请求,包括利用你的身份发邮件,发短信,交易转账等。
1.验证HTTP Referer字段
2.在请求地址中添加token并验证
3.在HTTP头中加入自定义属性并验证
首先CSRF需要登录网站获取你的cookie,才能做下一步攻击。而XSS不需要
xss原理上利用的是浏览器可以直接执行js代码,然后攻击者嵌入构造好的恶意JS代码,让浏览器自动地给服务器端发出请求,一般为get请求。csrf原理上利用的是网站服务器端所有参数都是可预先构造的原理,然后攻击者拼接好具体请求url,可以引诱用户(url一般做短网址让用户不容易看出所提交的参数)提交构造好的请求。
1.扫描内网开放服务
2.向内网任意主机的任意端口发送payload来攻击内网服务
3.DOS攻击(请求大文件,始终保持链接keep-alive always)
4.攻击内网web应用,例如直接SQL注入,xss攻击等
5.利用file、gopher、dict协议读取本地文件、执行命令等
http、https、file、gopher、phar、dict、ftp、ssh、telnet
http、https、file、ftp、jar、netdoc、mailto
SSRF涉及到的危险函数主要是网络访问,支持伪协议的网络读取。
PHP:file_get_contents()、fsockopen()、curl_exec()等
1.IP地址转换其他进制或点换成句号绕过
2.短网址绕过
3.利用其他协议绕过
在任意能够对外发起网络请求的地方,利用SSRF的成因进行验证。
1.白名单
2.过滤,内网ip,添加不可信域名
3.禁用其他协议
1.文章分享
2.图片下载或加载
3.从远处服务请求资源
外部实体注入攻击,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的攻击
1.使用开发语言提供的禁用外部实体的方法
2.过滤用户提交的XML数据
由于程序员在对用户文件上传功能实现代码上没有严格限制用户上传的文件后缀以及文件类型或者处理缺陷,而导致用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。
1.网站被控制
2.对文件增删改查,执行命令
3.如果服务器长久未更新,可利用exp提权
1.禁用js绕过
2.修改文件类型绕过
3.大小写,双写绕过
4.文件头绕过
5.二次渲染绕过
6.条件竞争绕过
7.00截断绕过
8.配合解析漏洞绕过
在低版本的Nginx中,php的配置文件中有一个关键的选项cgi.fix_pathinfo默认是开启的,这导致在url中有不存在的文件时,php就会默认向前解析
Apache允许文件有多个后缀名,会按照.来分隔文件后缀,如果有不被识别的后缀便会向前继续解析,直到识别为止。
1.当创建.asp文件目录的时候,在此目录下的任意文件,服务器都会解析为asp文件
2.服务器默认不解析“;”以后的内容,导致xx.asp;.jpg被解析成xx.asp脚本文件
1.文件上传的目录设置权限为不可执行
2.判断文件类型
3.使用随机数改写文件名和文件路径。
4.使用WAF等安全设备
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时候直接调用此文件,而无需再次编写,这种文件调用的过程被称为文件包含,开发人员一般希望代码更灵活,所以讲被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞,也就是通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致文件泄露甚至恶意代码注入的攻击方式。
1.利用文件包含上传webshell
2.查看系统的敏感信息
1.sysytem()
2.exec()
3.popen()
4.shell_exec()
5.passthru()
1.变量拼接
2.单引号、双引号绕过
3.编码绕过
4.反斜线绕过
1.不要执行外部命令
2.使用自定义函数或函数库来代替外部命令的功能
3.使用escapeshe||arg函数来处理命令参数。
4. 使用safe_mode_exec_dir指定可执行文件的路径。
越权漏洞是一种很常见的逻辑安全漏洞。是由于服务器端对客户提出的数据操作请求过分信任,忽略了对该用户操作权限的判定,导致修改相关参数就可以拥有了其他账户的增、删、查、改功能,从而导致越权漏洞
1.前后端同时对用户输入信息进行校验,双重验证机制
2.执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
3.特别敏感操作可以让用户再次输入密码或其他的验证信息
4.从用户的加密认证cookie中获取当前用户id,防止攻击者对其修改,或在session、cookie中加入不可预测、不可猜解的user信息
5.直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理
发送验证码时,通常会存在逻辑漏洞(比如说短信轰炸、任意用户注册)
短信轰炸防御方法:
1.设置时间间隔
2.加入其他认证
任意用户注册:
1.对验证码校验做限制
2.缩短验证码有效时间
3.限制每个验证码验证错误次数
逻辑漏洞,例如:
修改商品支付价格
修改商品支付数量
修改商品优惠卷(附属值)
修改支付状态
登录功能一般会有用户注册,忘记密码,修改密码,验证码等功能
用户注册可能产生任意用户注册,忘记密码,修改密码可能产生越权漏洞,验证码可能产生短信轰炸等漏洞。登录框也可能产生SQL注入,防御手段可以加入对验证码校验做限制,关键操作前做认证,SQL预编译等。
序列化就是将对象转化为字节流,字节流中包括这个对象的数据和信息,序列化和反序列化便于类的持久保存,并且也利于网络传输。反序列化,就是通过序列化过来的字节流的数据和信息,还原成一个类,这里如果字节流没有任何过滤,那么攻击者可以用过恶意构造,让反序列化产生非预期的类或对象,这个类或对象在产生过程中就有可能带来任意代码执行。
同源是指“协议+域名+端口”三者相同,如果两个不同的域名指向相同一个ip地址,也非同源;SOP(同源策略)是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,浏览器很容易收到XSS、CSRF等攻击
session和coolie都是用来跟踪浏览器用户身份的,但session是存储在服务器端的,cookie是存储在客户端的。cookie不是很安全,可以分析存放在本地的cookie进行cookie欺骗,seesion会在一定时间内保存在服务器上,当访问增多,会比较占性能。单个cookie在客户端的限制是3K。
1.sniper(狙击手)
就是一个一个来,最基础的模式,如果payload有N个的话,就执行N次
2.battering ram(攻城锤)
如果添加了两个参数的时候,会一起爆破。
3.pitchfork(草叉模式)
添加两个payload对称是否,例如p1:1,2;p2:3,4。那么第一次为1,3,第二次为2,4
4.cluster bomb(集束炸弹)
添加两个参数,会计算两个payload的笛卡尔积
1.直接上传webshell
2.文件上传获取webshell
3.例如SQL注入获取webshell
4.例如日志写入功能获取webshell
5.利用文件包含获取webshell
应了解应用程序当前提供的所有功能,并获取与这些功能相关的所有业务限制规则,从上下文、敏感数据、用户角色及访问权限、应用类型、代码设计等方面确定攻击面,来保证代码审计的全面性。
文章的最后,还给大家整理了一套网络安全面试题和简历模板,需要的可以后台私信我“面试”获取,希望对大家有帮助!
对于从来没有接触过网络安全的同学,我帮你们准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题,如果需要的话,可以在评论区告诉我。