WEB攻防-通用漏洞&SQL注入&MYSQL跨库&ACCESS常规注入

目录

#知识点:

#前置知识:

-SQL注入漏洞产生原理分析

-SQL注入漏洞危害利用分析

SQL注入攻击流程

ACCESS 独立存在

MYSQL 统一管理

案例:

PHP+MYSQL-简易注入-存储特性

PHP+MYSQL-跨库注入-权限属性

SQL注入实战演练

墨者:SQL手工注入漏洞测试(Access数据库)


#知识点:

1、脚本代码与数据库前置知识

2、Access数据库注入

3、MYSQL数据库注入-简易&权限跨库

#前置知识:

-SQL注入漏洞产生原理分析

脚本代码在实现代码与数据库进行数据通讯时(从数据库取出相关数据进行页面显示),将定义的SQL语句进行执行查询数据时。其中的SQL语句能通过参数传递自定义值来实现控制SQL语句,从而执行恶意的SQL语句,可以实现查询其他数据(数据库中的敏感数据,如管理员帐号密码)。这一个过程就可以叫做SQL注入漏洞

漏洞产生根本条件:可控变量 特定函数

http://192.168.46.160:85/Production/PRODUCT.asp

http://192.168.46.160:85/Production/PRODUCT.asp?id=1513

如果下面的URL地址测试注入判断id有注入,手工测试该如何进行?

http://192.168.46.160:85/Production/PRODUCT.asp?id=1513&page=1

Production/PRODUCT.asp?id=1513 注入语句&page=1  对

Production/PRODUCT.asp?id=1513&page=1 注入语句  错

-SQL注入漏洞危害利用分析

通过sql注入可以实现对数据库数据的增删改查

SQL注入攻击流程

1、猜测数据库类型

2、根据类型选择思路

ACCESS 独立存在

ACCESS:access数据库是单独存在的数据库,它不像mysql存在多个数据库。

信息:数据库名、表名、列名、数据

MYSQL 统一管理

MYSQL数据库:为了网站和数据库的安全性,MYSQL内置有ROOT最高用户,划分等级,每个用户对应管理一个数据库,这样保证无不关联,从而不会影响到其他数据库的运行。

信息: 最高数据库用户=root用户、表名、列名、数据

数据库A=网站A=数据库用户A、数据库B=网站B=数据库用户B

MYSQL注入的思路:

1、非ROOT的注入攻击:常规类的猜解

2、ROOT用户的注入攻击:文件读写操作,跨库查询注入等

黑盒测试中可以采用user()获取当前用户权限,白盒中看连接用户即可!

MYSQL5.0以上版本:

自带的数据库名information_schema,注入时可以通过以下数据库名查询信息

information_schema:存储数据库下的数据库名及表名,列名信息的数据库

information_schema.tables:记录表名信息的表

information_schema.columns:记录列名信息表

information_schema.schemata:记录所有数据库名

version():查询数据库版本

user():查询用户是否为root

@@version_compile_os:查询系统

database():查询数据库名

案例:

PHP+MYSQL-简易注入-存储特性

先查看一下数据库信息。(正常的SQL注入下肯定不知道数据库的信息,为了方便讲解先透露一下数据库信息,以防出错)

访问该页面并传参id为1,成功获取了数据

 

那么开始利用and判断是否有注入点

and:可以理解为与的关系,当and左右的两个数据有一个为假时,结果就为假。比如:1=1 and 1=0 结果为假。

下面测试中,and左边的页面刚才访问过可以正常访问,证明为真。如果and后面的数据为假,那么整个表达式都为假,页面就不会正常显示。证明了后面数据可以被执行,那么就是有注入点。(注:也可以使用or,or的表达式中只有一个为真表达式就为真。)

union select 1,2,3:union代表联合查询,为了执行后面的代码。select为查询语句,select直接加数字时,可以不写后面的表名,那么它输出的内容就是我们select后的数字。

通过查询可以看见有1和2两个返回值,那么证明了1的位置和2的位置的数据可以被显示出来。(目前知道数据库中有三列数据,黑盒测试的情况下需要使用折半查找去试)

后面就非常容易了,知道了返回的位置,那么就可以直接利用一些函数查询出数据库的一些基本信息。

PHP+MYSQL-跨库注入-权限属性

首先利用函数database()获取数据库名,数据库为mozhu

UNION SELECT table_name,2,3 from information_schema.tables where table_schema='mozhu'

语句分析:union和select上面有解释不在多说。information_schema.tables是mysql数据库中记录表名的表。table_schema代表的是数据库名称。table_name能理解为information_schema.tables表中的一个列名,而这个列名存储的是数据库中的表名。

语句含义:查询数据库中记录表名的表中的table_name的列,条件为数据库名是mozhu。

已知:数据库为mozhu        表名为ink

UNION SELECT column_name,2,3 from information_schema.columns where table_name='ink' and table_schema='mozhu'

语句分析:information_schema.columns是mysql数据库中记录列名的表。column_name就是information_schema.columns这个表中的一列,列名存储的是数据库中的列名。

语句含义:查询information_schema.columns这个表,条件为表名是ink,数据库名是mozhu,获取表里的column_name信息。

已知:数据库为mozhu        表名为ink        列名为id gName age

UNION SELECT id,gName,age from ink

语句分析:获取ink表中的id,gName,age的信息

由于页面只有两个显示位,age无法显示,可以修改对应的显示位信息进行显示。

SQL注入实战演练

连接:www.comresearch.org/researchDetails.php?id=MQ==

通过连接可以知道id后面的值为base64加密(==结尾通常为base64加密),那么注入的语句也要是base64加密

利用order by查询表名的列数,order by后面跟数字可以进行列数的查询,若列数正确正常返回页面,否则报错。

利用折半查找可以发现列数为7

 

 根据上面的思路,使用union select查询显示位,暴露位置为2,5,4

 

 利用user,database,version查询用户是否为root,数据库名和版本类型

因为版本号时4.1.22,所以没有办法利用information_schema。小编尝试过利用字典并使用python进行暴力破解,但是没有成功。感兴趣的兄弟可以尝试一下。如果是5.0以上的版本,可以直接使用infomation_schema,思路最重要。

墨者:SQL手工注入漏洞测试(Access数据库)

进入漏洞之后记得点维护通知,这里是突破口,不要上来就暴击破解,它是一只数据库漏洞。

和mysql数据库的注入原理一样,直接用and进行注入点探测,发现页面报错,证明存在注入点。

 

经过小编的认真查询,order by为5时报错,为4时正确,证明表中存在四个字段

and 1=2 union select 1,2,3,4测试显示位,显示位为2和3 

union select 1,2,3,4 from admin 

admin表直接利用猜解即可,通过返回值知道显示为2和3

提示:在Access数据库中,union两边的数据都为真才会进行显示。在偏移注入的时候,先用order by查询网页表的列数,再利用union查询其他表的列数,如果其他表的列数较少,直接利用*代替。

比如:www.mozhu.com 的order by为8,admin表为4列。语句www.mozhu.com union select 1,2,3,4,* from admin即可正常返回值,查询制表位。

and exists(select id from admin)

使用exists查询列名是否存在,存在则正常返回页面。靶机中常用列名id,username,passwd或者password,最后会发现username和passwd可以正常返回,代表存在列名。

 

union select 1,username,passwd,4 from admin

利用显示位获取信息即可

 md5对密码进行解密并登录获取flag

MD5:32或16位位由数字"0-9"和字母"a-f"所组成的字符串

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值