SQL预编译学习笔记
知识点./git文件还原源代码工具githacker对于git的使用git命令如何查看所有提交的log如何把head指针指向某个特定log使用git log命令可以查看仓库的提交历史它会展示每个提交的哈希值、作者、日期、提交信息等详细信息。简洁展示每行显示一条提交的哈希和提交信息git log --oneline过滤特定作者/日期等条件例如只看某作者的提交git log --author作者名head指针指向当前工作分支的最新提交若要指向特定提交如历史中的某个 commit需用git checkout命令切换到指定提交git checkout commit_hash commit_hash 是目标提交的哈希值可通过 git log 查看若要基于该提交创建新分支并切换git checkout -b 新分支名 commit_hashjwtjson web token由三部分组成Header头部描述JWT的元数据通常包含令牌类型如JWT和使用的签名算法如HMAC SHA256或RSA。Payload载荷包含声明claims即要传输的信息如用户ID、权限等。载荷是自包含的但建议不要存放敏感数据因可被解码。Signature签名用于验证消息的完整性和真实性由Header、Payload和密钥通过指定算法生成。JWT的核心作用是身份验证和信息交换客户端登录后服务器生成JWT并返回后续请求中客户端携带JWT服务器通过验证签名确认请求合法性JumpserverJumpserver 是一款开源的堡垒机跳板机系统主要用于集中管理和审计 IT 资产的运维操作集中管控统一管理服务器、数据库、网络设备等 IT 资产的访问权限避免分散式管理带来的安全风险。权限隔离通过角色、用户、资产的多维度授权实现“最小权限原则”限制运维人员的操作范围。操作审计全程记录运维命令、文件操作、会话录像等满足合规审计如等保、SOX要求。安全增强支持双因素认证、操作审批、IP 白名单等防止未授权访问。协议支持兼容 SSH、RDP、Telnet 等主流运维协议覆盖多数 IT 资产类型。file-open如果exit被注释php特性id1id2传递两个相同的id值php接受的是最后一个i_di.di[d预编译绕过思路预编译防御可参数化的sql注入对于不可参数化的位置预编译没有办法order by不能参数化有可能产生注入limit mysql5.5以前有可能产生注入order by 后的参数不能放进引号中如果有引号就失效了而预编译后会自动加引号因此order by后不能预编译数据库有两种预编译虚假的预编译页面代码log日志中admin被添加‘’给admin添加‘’后log日志中单引号被转义默认的预编译模式模拟预编译被称作虚假的预编译因为他在sql执行的过程中其实根本没有参数绑定、预编译的过程本质上只是对符号做了过滤与正常查询一样唯一不同是自动给查询参数添加单引号在底层将参数原本的单双引号自动转义真实的预编译页面代码1prepare预备准备 占位后续转递的值都被认为是username2execute执行预编译其实是为了提高MySQL的运行效率而诞生(而不是为了防止sql注入)因为它可以先构建语法树然后带入查询参数避免了一次执行一次构建语法树的繁琐对于数据量以及查询量较大的数据库能极大提高运行效率。预编译下的sql注入点宽字节 有一定条件真实预编译情况下当设置编码之后日志里查询参数都被自动转成16进制不会产生歧义虚假的预编译情况下页面代码虚假预编译在底层自动转义单引号使用%df%5c使\失效生产环境下不可能出现没人使用gbk都使用真预编译无法预编译的位置 order by group by页面代码在日志中可以看到底层给username参数自动添加‘’同时在网页中可以看到order by排序失效预编译只是消除了sql执行的歧义没有消除sql注入本身代码审计中的file-open问题SQL注入复现第26关被过滤使用括号代替空格andor使用双写andor关系运算符方式and失效or生效127.0.0.1/sqlilabs/Less-26/?id1aandnd(updatexml(1,concat(0x7e,user(),0x7e),1))aandnd(1)1daiqile空格可以用/**/替换等号绕过likeregexp单双引号绕过mysql支持16进制用16进制替换表名思考为什么?i_d-1/**/union/**/select/**/1,2,3i_d1submit1 ?i.d-1/**/union/**/select/**/1,2,3i_d1submit1 ?i.d-1/**/union/**/select/**/1,2,3i.d1submit1这三种情况结果都是admin$request接参数时i.d会转换成i_dphp特性两个相同参数接收最后一个此时绕过dowith_sql函数在request_uri时i.d不变此时同时存在i_d,i.d32关宽字节注入通过%df和%5c结合使转义字符失效\通过uncode编码成%5c%df%5cuncode编码运open-file页面源代码抓包结果请求走私debug调试python脚本执行没有执行结果的原因字符编码问题