freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

原创:一个代码审计新手的练级之路——漏洞挖掘篇2
0x1ang 2024-07-13 20:13:10 175801

前言

这是作者通过代码审计挖的第一个cve,目前已经在cve官网公开。本身没多少技术含量,主要是分享自己学习代码审计的过程。

复现

cve编号 :CVE-2024-39174.

环境

yzmcmsV7.2

过程

该cms有一个注册用户发表文章的功能

1720872628_66926eb49f3bc8a6fc7ad.png!small

我们注意到这里使用的编辑器是富文本编辑器ueditor,去网上查询该组件的公开漏洞进行尝试,发现了一个存储型xss漏洞。

漏洞利用过程就是通过burpsuite抓包将原本要发送的文章内容替换为

%3Cp%3E1111111"><ImG sRc=1 OnErRoR=prompt(1)>%3Cbr%2F%3E%3C%2Fp%3E

1720872647_66926ec71df7305f61856.png!small

执行后发现失败

1720872658_66926ed2319b29228443a.png!small

查看html源码发现onerror事件被过滤替换

1720872669_66926edddbf78a2a1cae1.png!small

知道存在函数来过滤注入,所以去源码里审计。发现一个专门用于过滤xss攻击的函数

1720872682_66926eea2b5f3a1f1dfb7.png!small

函数主要部分如下

$string = preg_replace('/[-BCE-FF]+/S', '', $string);

$parm1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');

$parm2 = array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload', 'onpointerout', 'onfullscreenchange', 'onfullscreenerror', 'onhashchange', 'onanimationend', 'onanimationiteration', 'onanimationstart', 'onmessage', 'onloadstart', 'ondurationchange', 'onloadedmetadata', 'onloadeddata', 'onprogress', 'oncanplay', 'oncanplaythrough', 'onended', 'oninput', 'oninvalid', 'onoffline', 'ononline', 'onopen', 'onpagehide', 'onpageshow', 'onpause', 'onplay', 'onplaying', 'onpopstate', 'onratechange', 'onsearch', 'onseeked', 'onseeking', 'onshow', 'onstalled', 'onstorage', 'onsuspend', 'ontimeupdate', 'ontoggle', 'ontouchcancel', 'ontouchend', 'ontouchmove', 'ontouchstart', 'ontransitionend', 'onvolumechange', 'onwaiting', 'onwheel', 'onbegin');

函数会将所有大写字符替换为小写,所以不存在大小写绕过

于是开始思考能不能通过黑名单外的js事件来执行代码,通过查询比较发现了onpointerdown方法

1720872701_66926efd05d045f188795.png!small

简单来说该方法和onclick一样,都是当用户点击目标元素时触发。

所以构造

payload%3Cp%3E1111111"><ImG sRc=1 onpointerdown=alert()>%3Cbr%2F%3E%3C%2Fp%3E

成功执行

1720872710_66926f06dd732b815234f.png!small

尝试在正常的图片中添加该方法,使其更具隐蔽性

1720872723_66926f13947ab2e2d9911.png!small

发现无法直接弹框,但是事件还是可以执行的,实际中可以考虑外联xss平台进行盗取cookie操作

1720872731_66926f1b57b2e0bc52a7c.png!small

# 漏洞 # web安全 # 漏洞分析 # 网络安全技术
本文为 0x1ang 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
0x1ang LV.2
这家伙太懒了,还未填写个人描述!
  • 2 文章数
  • 4 关注者
一个代码审计新手的练级之路——漏洞挖掘篇
2024-07-08
文章目录