sqli-labs(1-10)

最近期末复习,不太想用脑做比较难的ctf题了,所以把以前自己做过简单的东西写出来复习复习,大佬退让。

前言

这是一个关于sql注入的靶场,囊括了小白从0开始学习sql注入所需要的几乎所有初级的姿势和方法,后面(大概会在暑假的样子吧)我应该还会补一篇关于sql注入的各种姿势的总结以及绕过等等。这个靶场前面的一些题目对我而言非常的简单,期末考试要复习的东西太多了,这个全当放松放松了。

靶场下载链接:https://github.com/Audi-1/sqli-labs

放在自己本地的WWW目录下即可,配置环境什么的可以自行百度搜索,网上文章挺多的。第一题我针对零基础的细说一下,后面的直接就讲怎么绕过了。

目录

前言

简单的联合注入

Less-1

Less-2 

Less-3

Less-4 

报错注入&盲注

Less-5

extractvalue()

Less-6 

Less-7

Less-8 

Less-9

Less-10


简单的联合注入

Less-1

考点:GET注入、字符型注入(单引号)、联合注入

提示输入一个数字ID,我们试试

 一般判断存不存在注入只需输入一个单引号,如果有报错,那多半是存在注入,但是如果没有回显也不一定没有注入。

ok,知道了,是单引号闭合,我们用单引号在把后面的数据注释了即可闭合 ,可以使用or或者and判断一下。

于是我们可以在1后面输入一些恶意的sql语句,比如联合查询union把前面的数据和后面的数据一同查出来,如果前面的数据查询失败则会把union后面的数据回显到页面。不过再次之前我们需要知道数据所在表中有多少列,因为union需要联合必须保证两个表的列数量相同,这里用order byorder by本意是为了排序的,但是由于它的报错机制就可以被我们利用上,如本来我们只有三列,但是我们要第四列排序那不就报错了吗?但是第三列排序不报错,所以我们断定只有三列。

4报错,3没有报错。如此,我们便知道了数据表的列有三个,利用union select 查询。

 感觉没什么不同,那是因为union把第一个表的数据显示在页面上,所以如果我们让第一个数据不存在,如下,

可以看到Login name=2,Password=3,也就是我们后面的查询语句select中的2、3。所以我们通过对2或者3两个位置进行进一步查询。

查库:select 1,2,group_concat(schema_name) from information_schema.schemata

查表:select 1,2,group_concat(table_name) from information_schema.tables where table_schema="库名" 

 查列:select 1,2,group_concat(column_name) from information_schema.columns where table_name="表名" 

查字段:select 1,2,group_concat(字段) from 表名

能查到字段,sql注入就已经把它的作用发挥到一定程度了。

Less-2 

考点:数值型注入、GET注入、联合注入

 

不需要闭合,直接开注,先order by看看列,再查库、查表、查列、查字段。

 就这样,和第一题的写法一毛一样。

Less-3

考点:GET型注入、字符型注入(单引号+括号)、联合注入

报错发现他是通过单引号和一个小括号闭合的所以我们也用它的闭合前面注释后面的数据。

 再利用和第一题相同的方法,进行查列的数量,再查库、查表、查列、查字段。

不细写了,后面的步骤和前面的是一样的。

Less-4 

考点:GET型注入、字符型注入(双引号+括号)、联合注入

看报错信息就知道是双引号+括号闭合,所以我们的方法还是和前面的一样闭合以后查列数,再联合注入。

 

 后续操作也是一样,查库、查表、查列、查字段。

报错注入&盲注

Less-5

考点:报错注入、GET注入、字符注入(单引号)

不在回显账号密码了,但是可以报错信息如下,

 单引号闭合,但是无回显,我们这里利用报错注入来解决这个问题,在用报错注入前先了解两个函数,extractvalue、updatexml

extractvalue()

extractvalue(xml_document,xpath_string)

 第一个参数xml_document是传入目标xml文档,第二个参数xpath_string为查找路径,如果XPATH格式输写错误则会报错,

 加个~是主动使它报错,如果不加它只会返回部分错误信息,

 另一个updatexml有兴趣可以自己去了解,我个人比较喜欢用extractvalue。

可以开始做题了,

就这样,用第一关的知识查库、查表、查列、查字段。

Less-6 

考点:报错注入、GET注入、字符注入(双引号)

 除了是双引号闭合以外,和上一个题目的解法一模一样。

 不细写了,没有什么新东西。

Less-7

考点:into outfile写马、字符型注入(单引号+双括号)、GET注入

这个题需要审源码,否则盲做很难受。

可以看到闭合采用了单引号和双括号,而且报错信息也被注释了,但是没关系,题目提示了用into outfile命令,这玩意儿可以通过sql语句在本地写文件,但是这个命令最大的缺陷就是必须得知道文件路径,否则是空谈。这个用在mysql getshell比较多,我们只是测试,用在这里其实也不是不可以。

写入成功,我们可以通过这个顺势用菜刀或者蚁剑连接,当然这个题目除了into outfile还有一个方法,就是布尔盲注,这里先不说,后面的题目会用到。

Less-8 

考点:GET注入、布尔盲注、字符型注入

还是得分析源码,其实说来说去和上一个题目没什么两样,这里也可以使用into outfile写马,上一篇说过了,所以我们这篇用另一种方法,布尔盲注

Length():返回字符串的长度
substring():截取字符串
Ascii():返回字符的ascii码

Length()获取数据库的长度,采用ascii()substring()将截断的字符转换为ASCII码,再通过爆破或者py脚本跑出库名、表名、列名和字段名。脚本网上很多,我演示一下用burp爆破跑,

查库:?id=1'and ascii(substring(database(),1,1))=110--+

查表:?id=1'and ascii(substring((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0--+

查列:?id=1'and ascii(substring((select column_name from information_schema.columns where table_schema='security' and table_name='users'limit 0,1),1,1))>0

查字段:?id=1'and ascii(substring((select id from users limit 0,1),1,1))>0--+

?id=1'and ascii(substring((select password from users limit 0,1),1,1))>0--+

?id=1'and ascii(substring((select username from users limit 0,1),1,1))>0--+

 爆破跑出来有一条数据的长度和其它的不一样,那一条为正确的,所以第一次字符的ASCII码为115,以此依次往下爆破。

Less-9

考点:GET注入、时间盲注、字符型注入(单引号)

审计一下源码,可以发现无论正确还是错误,它的回显是一样的,而且还没有报错信息,遇到这种情况我们只能人为的构造一个方式,使得即使没有回显我们也可以判断它是否是正确还是错误,这里用到的就是sleep()配和if(),如果正确就直接执行,如果错误就sleep()几秒,我们就可以把它看作布尔型盲注了。(当然,这里也可以用into outfile来解题)

sleep(n):将程序阻塞n妙
if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

 

 这样确实也可以注入,很麻烦,而且非常的鸡肋,实战中我们还得从时间盲注的脚本下手。

Less-10

考点: GET注入、时间盲注、字符型注入(双引号)

和Less-9雷同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

errorr0

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

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

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

打赏作者

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

抵扣说明:

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

余额充值