Pikachu SQL注入之数字型注入

本文通过实际操作演示了GET和POST请求的区别,并介绍了如何通过SQL注入技术,逐步获取数据库名、表名和列名,最后展示了MD5密码解密的过程。
摘要由CSDN通过智能技术生成

我们在点击选择框里面的123456时,url没有变化,不是get请求,我们直接抓包试试:

看到这个说明是POST请求:

区分一下GET请求和POST请求:

1. GET请求:GET请求用于从服务器获取资源,通过将参数附加在URL的末尾来传递数据。这些参数以键值对的形式出现在URL的查询字符串中,例如:http://example.com?param1=value1&param2=value2。GET请求的特点包括:
   - 数据以明文形式出现在URL中,可以被缓存、书签等记录。
   - 传输的数据量有限,受URL长度限制。
   - 数据通过URL传输,对于敏感信息不太安全。
   - GET请求可被浏览器主动缓存。

2. POST请求:POST请求用于向服务器提交数据,将数据放在请求的主体部分传输。与GET请求相比,POST请求的特点包括:
   - 数据不会暴露在URL中,而是在请求的主体中传输,更加安全。
   - 传输的数据量较大,不受URL长度限制。
   - 数据不会被浏览器缓存,更适合传输敏感信息。
   - POST请求对于服务器来说是无副作用的,即多次提交相同的POST请求不会引起数据的变化。

这题是SQL注入之数字注入,我们通过更改burpsuite里id的值,内容也会不断变化,所以这个地方就是注入点,

接下来我们进行sql注入:

第一步:找列数

构建payload:
id=1 order by 6 #&submit=%E6%9F%A5%E8%AF%A2

上面一共有6个选项,于是单猜一个6:

界面报错,我们继续猜,直到猜到2的时候回显才是正常的。

第二步:爆库名

构建payload:
id=1 union select database(),2#&submit=%E6%9F%A5%E8%AF%A2

这段代码是一个SQL注入的示例,用于尝试获取数据库名称。它使用了UNION联合查询和注释符号来绕过数据库查询的限制。

让我们逐步解释这段代码:

1. `id=1`:这是一个条件语句,假设存在一个名为`id`的参数,值为1。

2. `union select database(),2`:这是UNION联合查询的一部分。`database()`是MySQL函数,用于获取当前数据库的名称。`2`是一个伪造的列,用于与原始查询结果的列数匹配。

第三步:爆表名

构建payload:
id=1 union select group_concat(table_name),2 from information_schema.tables where table_schema=database() #&submit=%E6%9F%A5%E8%AF%A2

让我们逐步解释这段代码:

1. `id=1`:这是一个条件语句,假设存在一个名为`id`的参数,值为1。

2. `union select group_concat(table_name),2`:这是UNION联合查询的一部分。`group_concat(table_name)`是MySQL函数,用于将多个行的值连接成一个字符串。在这个例子中,它将返回当前数据库中所有表的名称作为一个字符串。`2`是一个伪造的列,用于与原始查询结果的列数匹配。

3. `from information_schema.tables where table_schema=database()`:这是从information_schema.tables表中获取数据的子查询。information_schema.tables是系统数据库中的一个表,包含了关于数据库中所有表的信息。`table_schema=database()`是一个条件,用于限制查询只返回当前数据库的表。

第四步:爆列名

构建payload:
id=1 union select group_concat(column_name),2 from information_schema.columns where table_name='users'#&submit=%E6%9F%A5%E8%AF%A2


让我们逐步解释这段代码:

1. `id=1`:这是一个条件语句,假设存在一个名为`id`的参数,值为1。

2. `union select group_concat(column_name),2`:这是UNION联合查询的一部分。`group_concat(column_name)`是MySQL函数,用于将多个行的值连接成一个字符串。在这个例子中,它将返回名为"users"表中所有列的名称作为一个字符串。`2`是一个伪造的列,用于与原始查询结果的列数匹配。

3. `from information_schema.columns`:这是从information_schema.columns表中获取数据的子查询。information_schema.columns是系统数据库中的一个表,包含了关于数据库中所有列的信息。

4. `where table_name='users'`:这是一个条件,用于限制查询只返回名为"users"的表的列。

 

找到了用户名username和密码password的列名,所以我们直接改一下payload直接梭哈就行:

账号密码都有了,不过看得出来,密码是经过md5加密的:md5解密网站

我们把密码拿去解密即可:

 admin的密码是123456,pikachu的密码是000000,test的密码是abc123。

拿下! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zTale

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值