由于感到自己一直摸鱼,很紧张,感觉脑袋很空,什么都不会,遂写博客,hxd加我自己找了很多资料,今天就在一边学习一边自查的过程中安慰心情吧。
当然干web其实就是尝试,不断的探索,自己很久没有这种心态了,去不断试探中间件的情况,编码的情况,想象整个结构,思考可能的漏洞。
常见web漏洞类型:
sql(sql注入
rce(命令执行
lfi(文件包含,File Inclusion
upload(文件上传
serialize(序列化
其他的xss,scrf,xxe遇见比较少,了解大概内容就行。撞到算我倒霉。
web结构差不多是:
浏览器----中间件----后端编码----后端数据库,文件这些
编码问题是最常见的,比如sql,rce这些很多都是因为编码问题导致的
中间件配置不当在文件上传处我们也遇到过
数据库和后端文件就不多说了,redis未授权访问这些也很常见。
当然计网也会考到,具体可以看上一篇博客,还是得了解
这里还得补充一下上一篇的一些内容,因为面试的时候问到我了,
问了我ssl的卸载,ssl是http和https的区别,那个s就是因为使用了ssl和tls两个协议,增加了安全性,大多数ssl都不是免费的,所以你自己打靶场环境访问的时候可以观察url是否是https导致的无法访问,我遇到好几次,把s去掉就可以正常进行了。
ssl的卸载内容太多了,还是大伙自己去找吧,我觉得大多考不到,云安全考的多。
对了,白盒,黑盒和灰盒还是得有常识的,
白:上帝视角,编码配置一览无余
黑:生存视角,配置,编码都一无所知
灰:黑白交加,你只会知道一部分内容。
web代码审计常见思路:
首先是找到参数或者一些入口,比如get,post参数
然后是找函数调用过程,专业点名词就是找污点数据流
最后就是分析经过调用后的输出结果,思考破解之法。
比较经典的php里md5的强弱比较
==弱比较 弱比较会把不同类型转化为数字类型,比如字母开头a13和0比较,在a的时候就会转换为0并且停止,所以是相等的
===强比较 会比较内容和格式,两个都相同才会为true
而md5在转换字符串的时候经常会产生0e开头的,结合以上内容,我们会得到两个原本字母不同,但是md5后都是0e开头的字符,在弱比较的过程中却会返回true,数组同理,在弱比较时,因为无法处理数组类型,所以数组会返回null,两个null肯定相同
强比较在限制了string类型时,则利用fastcoll等软件生成两个md5值完全相同的文件进行碰撞
常见函数缺陷概述:
一个是intval(),他会将其他类型转化为数字类型,但是遇到非数字时候会返回0
例如 asdjasl 返回0 3sada 返回3 5sad12qwe64 返回5
然后是ereg(),遇到%00隔断的时候会中止读取后面内容,这里%00是url中止符,要url编码后使用
之后是is_numberic()可以利用数组加16进制绕过,例如a[]=58B
对于%00,无论在数字前后都是返回非数字,%20则只能放在数字后,
16进制也可以绕过,主要用来过sql的过滤
str_replace(),将匹配到的内容进行替换,双写可以绕过,在反序列化里也有涉及
preg_replace(),不存在双写漏洞,但是他的/e模式存在命令执行漏洞
在/m的时候是多行匹配,/i是不区分大小写 如果出现%0a,会把一行内容当作两行处理,后面那一行将会被忽略,实现绕过
urldecode(),存在的问题是,浏览器本身会解析一次url,函数又会解析一次,恶意代码会由此传入,例如p=1%2527---》php收到p=1%27---》urldecode后p=1'
函数回调:将一个函数作为参数传入另一个函数的函数,因为可以把函数当作参数传入执行,
将一些危险的函数作为参数传入,可能成为一个不易检测的后门
call_user_func(‘assert’,$QUEST['pass'])
assert()函数直接作为回调函数,以$_REQUEST["pass"]作为assert参数调用。
明天再继续更
那么,今天就到此了
这里是很强的wl,
期待能帮到你
我们下一集再见!