SOL Inject 本质——后端程序未对前端传上来的数据,进行严格校验、过滤或转义(如使用参数化查询Parameterized Query),导致用户可控的数据被拼接进SQL查询语句中,被数据库执行。被注入的变体(包括数字/字符/搜索/盲注/二阶等)一句话概括:数据被当成了代码执行,就是注入;
漏洞原理:为什么数字型更容易被忽略
注入步骤1——判断字段列数(ORDER BY):Burp拦截到请求后,右键-> Send to Repeater, 修改id后面参数,依次提交id=1 order by 2 ; id=1 order by 3, 直到回显Response500代表超过实际列数;确认是2列;
注入步骤二——确认回显位,爆数据库名(UNION SELECT)构造union select 1,2, 观察页面上1和2出现在哪个位置即"回显位",通过内置函数database(),获取数据库名pikachu;(version版本,user用户);
注入步骤三——爆数据库表名,MySQL 5.0以上版本,自带系统库information_schema, 其中tables记录所有数据库表信息// id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
注入步骤四——爆数据库中的列名,同样借助information_schema,查询columns//
id=-1 union select 1,group_concat(column_name) from infomation_schema.columns where table_schema=database() and table_name=‘users’
防御层一句话——把数据与代码分开,用参数化查询