零基础从sqli-labs开始学SQL注入【个人记录向】【1】

纯安服小白,想自学入坑一点,无基础也没有头绪,打算从打靶场开始一点点扩展开学习,如果有大佬愿意带带我的话感激不尽TAT

文中内容皆为自己查资料以及一部分个人理解,不保证完全正确,如果有错误的地方非常欢迎大佬们提出指导。

Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

提示输入数字型参数作为ID

输入?id=1,url中,?后为参数。出现用户名密码,表示获取到数据库中的数据,不同的id可获得不同的数据。

判断注入点

此处判断出sql注入的第一个条件:可能存在注入的位置。GET的参数id是与数据库进行交互的点

在数字参数后加单引号,判断语句是否拼接以及是字符型还是数字型。

单引号报错,双引号不报错,推测语句闭合方式为单引号。加单引号报错,说明参数类型是字符型。(参考sql注入基础原理(超详细)_牛牛Blog的博客-CSDN博客_sql注入攻击的原理^v52^pc_rank_34_queryrelevant25,201^v3^add_ask&spm=1018.2226.3001.4187)

在单引号后加上注释符号(#或--+等),验证闭合方式。

判断第二个条件:是否能注入

id分别为1' and 1=1 --+和1' and 1=2--+,通过回显情况,进一步判断能否注入。1=1为永真,当1成功查询,若1=1也成功查询,则页面返回正常,1=2为永假,因此若1=2得到执行,则页面必返回不正常。通过对比二者返回结果,可知改点能否进行注入。

mysql数据库可以通过and 1=1和and 1=2来判断字符型还是数字型,输入?id=1 and 1=1和?id=1 and 1=2时,返回的都是id=1的结果,是由于id是一个int型的数值,无论是1还是1 and 1=1都判断为1,所以返回id=1的结果;如果是数字型,则?id=1 and 1=1返回id=1的结果,?id=1 and 1=2会没有回显,因为id=1是正确语句可以被查询,而1=2是永假,所以会有异常或无回显。

实际执行命令为SELECT name,password FROM 表 WHERE id = ‘1’ and 1=1 --+'(由于是字符型,所以需要将最后的单引号注释,保证可以正常执行。如果是数字型,则不需要加单引号,实际执行命令为SELECT name,password FROM 表 WHERE id = 1 and 1=1)

联合注入union

存在sql注入漏洞,接下来使用联合查询,联合查询需要两张表列数相同,所以先判断当前表的列数。order by 4时报错,表示超过列数(order by 1和order by列名没有什么区别,超过当前有的列数之后会报错,常用于判断列数)

联合查询union,将多条select语句的结果合并到一起,要求查询时多个select语句的检索到的字段数量必须一致,每一条记录的各字段类型和顺序最好一致,union默认去重,可使用union all包含重复项

联合查询union select1,2,3(前面order by得到的列数),可以显示我们插入的语句的返回位置。(参考链接:union select的使用sql注入中的union联合查询,union select 1,2,3_头顶蜘蛛网,脚踩大水缸的博客-CSDN博客_sql注入unionselect

回显没有变化是因为union查询中前半部分id=1查询成功,因为源码中带了一个limit 0,1的语句,所以只回显是第一个也就是id=1的结果,就不会回显select 1,2,3的内容,所以我们要让前半部分查询失败,就会显示后半部分的内容(具体解释看上面那个参考链接)

因为id是从1开始的,所以id=-1时是查询不到的,这时候回显显示的就是select 1,2,3的结果,回显的是2,3的部分,也说明这里可以进行sql注入

使用mysql数据库中的一些函数获取一些数据信息,此处获取当前数据库名和版本号,使用database(),version()函数

获取该数据库中的表信息。将group_concat(table_name) from information_schema.tables where table_schema='security'--+ 翻译成人话就是:从information_schema数据库中的tables表中查找数据库security所含有的表有哪些

?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

mysql语法:select xxx,xxx,xxx from xxx where xxx,犯傻写成?id=-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security',3--+结果就报错了,应该是?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+

获取表信息之后可以看到,security数据库中包含四个表,推断账号密码信息存在user表中,下一步获取字段信息。

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

该语句的意思是查询information_schema数据库下的columns表里面且table_users字段内容是users的所有column_name的内。注意table_name字段不是只存在于tables表,也是存在columns表中。表示所有字段对应的表名。

可以看到user表中有username和password字段,判断账号密码对应这两个字段。中间的id起到分隔账号和密码的作用,可以用其他代替。

?id=-1' union select 1,2,group_concat(username ,id , password) from users--+

参考链接:

  1. 详细sqli-labs(1-65)通关讲解 详细sqli-labs(1-65)通关讲解_糊涂是福yyyy的博客-CSDN博客_sqllabs通关
  2. 简单聊聊SQL注入的原理以及一般步骤 https://www.jb51.net/article/238148.htm
  3. sql注入基础原理(超详细) sql注入基础原理(超详细)_牛牛Blog的博客-CSDN博客_sql注入攻击的原理
  4. 新人学习sqli-labs!最全教程(更新中)【写的很详细但不知道为什么只有第一关…】 新人学习sqli-labs!最全教程(更新中) - wuhuKD - 博客园
  5. sql注入中的union联合查询,union select 1,2,3 sql注入中的union联合查询,union select 1,2,3_头顶蜘蛛网,脚踩大水缸的博客-CSDN博客_sql注入unionselect
  6. SQL注入中可利用的函数,如database()、user(),@@datadir SQL注入中可利用的函数,如database()、user(),@@datadir_头顶蜘蛛网,脚踩大水缸的博客-CSDN博客_sql注入 user()
  7. 详解union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘ ‘--+ 详解union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘ ‘--+_头顶蜘蛛网,脚踩大水缸的博客-CSDN博客
  8. sql注入,关于id=‘1 and 1=1‘ sql注入,关于id=‘1 and 1=1‘_一晓风的博客-CSDN博客_sql注入id=1
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值