用途:个人学习笔记,有所借鉴,欢迎指正!
声明:只用于学习交流,点到为止,请勿非法测试。
概念:
联合查询注入:联合注入是回显注入的一种,也就是说联合注入的前提条件就是需要页面上能够有回显位。回显位就是客户端将数据展示在页面中,这个展示数据的位置就叫回显位。
报错盲注:报错注入就是利用了数据库的某些机制,人为的制造错误的条件,使得查询的结果能够出现在报错页面错误的信息中。
数据库内置函数:
user() 数据库用户名
database() 当前数据库名
version() 当前数据库版本信息
@@hostname 服务器主机名
@@basedir 数据库安装路径
@@version_compile_os 操作系统
一、联合查询注入
联合查询步骤
判断注入点——》判断注入类型(数字型或字符型)——》判断字段数——》判断显示位——》确定数据库名——》确定数据库的表名——》确定数据库的列名——》确定数据库的字段名——》获取数据。
1、判断注入点(理想情况)
(1)URL地址中的注入点,网址类似 :main.php?id=1等id值可注入的页面
(2)登录页面的注入点,点击登录后提交的账号密码都会拼接到SQL语句中查询与数据库中进行比对,所有账号和密码就存在注入点
还有很多,只要用户提交的参数被拼接到SQL语句中和数据库交互,就存在注入点,当然仅仅是说存在注入点不一定成功,因为现在大数都有过滤参数和防火墙黑白名单等等另说。
2、判断注入类型(数字型或字符型)
?id=1 and 1=1--+ 页面 正常 --+:SQL语句的注释符,注释符号后面的语句不执行
?id=1 and 1=2--+ 页面 正常 如果不正常就可以判断为数字型
都正常基本上可以判断不是数字型了,然后用干扰字符尝试发现:
?id=1’ and 1=2–+ 页面不正常
所以判断为字符型注入。
3、判断表中字段数
order by 函数是对MySQL中查询结果按照指定字段名进行排序,除了指定字段名还可以指定字段数进行排序,第一个查询字段为1,第二个为2,依次 类推。若输入数值为n时报错,那么表示没有n个字段,总的字段数为n-1。
4、判断显示位
通过上面得到字段数,后面通过union select 1,2,3…n(n为字段数)对其进行判断回显位。
例如:
www.sztest.net.cn/about.php?ID=1+and+1=2+union+select+1,2,3,4,5,6,7,8,9,10--+
测出显示位:2和4
5、确定数据库名
将显示位替换成database() 例如:
www.shsuna.com/en/company.php?id=35+and+1=2+union+select+database()
www.sztest.net.cn/about.php?ID=1+and+1=2+union+select+1,version(),3,database(),5,6,7,8,9,10
mysql 5.0以下为低版本,5.0以上为高版本(有information_schema数据库)这个数据库是存储所有数据库名,表名,列名,相当于可以通过查询这个数据库获取指定数据库下面的表名列名信息。
数据库中"."代表下一级,如haha.user表示haha数据库下的user表名
information_schema.tables 记录所有表名信息的表
information_schema.columns 记录所有列名信息的表
information_schema.schemata 记录所有数据库信息的表
table_schema 数据库名
table_name 表名
column_name 列名
group_concat() 显示所有查询到的数据
参考:
1、WEB攻防-通用漏洞&SQL注入&MYSQL跨库&ACCESS偏移-CSDN博客
SQL注入基础原理与案例(详细总结)_sql注入案例-CSDN博客