0day审计实战案例

代码审计的思路

代码审计核心在于通过源代码,知道代码如何执行,然后根据代码执行中可能产生的问题来寻找漏洞。

代码审计一般泛指白盒审计,但是要记住,通用性漏洞,例如CMS通杀漏洞,其实并不是仅仅只有代码审计能好到,本地搭建然后纯黑盒测试也可以的。只不过代码审计更为全面的容易找到漏洞

代码审计其实思路很简单,一共两条路线,全文通读和敏感函数定位。

全文通读:我看了每一行代码不是还不够清楚吗?

敏感函数定位:掌握住可以存在危险函数的地方 反推


渗透测试人员 -> 渗透测试 -> 找漏洞 -> 找Bug -> 开发人员的技术不到关|衔接问题|项目经理得罪了|任何原因

安全不能孤立:业务方便 <-> 安全 (没有绝对的安全)->纳什均衡 => 漏洞一定存在

代码设计的核心

变量覆盖 $$

文件包含 include

黑盒渗透测试 -> 信息收集
如果没有功能没有传参,怎么可能拿得下

黑盒部分 -> 寻找功能点 -> SQL注入 -> XSS -> CSRF -> XXE -> SSRF -> 文件上传 -> 逻辑漏洞 <=> 验证码绕过、密码找回、支付漏洞、越权

白盒部分 -> 变量覆盖-> 文件包含 -> 反序列化

黑盒测试没成功 -> 为什么 -> 过滤 <=> 传参错误 -> 过滤规则、传参后参数经过什么处理?

CMS是个通用的东西,但是你的环境不一定和所有人相同,php肯定要交互数据库,你的数据库密码和库名不可能和每个人相同

**——笔录**

*无论是哪一个审计方法都需要一定的编程功底,但是如果你的编程功底不够怎么办? *

等死吗

也并不是,其实也可以尝试使用黑盒+白盒代码审计的方式进行一个学习,通过黑盒的方式来进行测试,然后去了解究竟传参进去经过处理发生了什么?

然后构建出合适的语句进行尝试,最后找到问题所在点。

思路就是这个两个,具体的会用曾经写的文章为案例进行分析。

白盒测试

测试CMS:BlueCMS

一、安装板块 install 能不能多次安装

1、重复安装代表着你能破坏网站

2、重复安装你能进入后台

站库分离 => 数据库 和网站不在同一个机器

3、其实重装的时候也会产生安全问题

网站访问数据库,你的数据库账号密码会储存在哪里? 配置文件

安全防御

内网比外网弱、后台比前台弱

边缘知识你们不知道 、 这个叫做骚姿势

漏洞地方1:进入注册窗口可以通过burp用户名已存在爆破出用户

burp抓包之后看到一个act的传参,在代码审计中查询do_reg

img

*由此可以看出后端是使用insert进行数据库插入,这里可能存在Mysql注入,也没看到XSS过滤可能存在,我们去实践一下 *

漏洞地方2:白盒审计注入以及XSS

进行mysql监控查看我们输入的数据,并且在

1、注册页面进行单引号双引号和#号进行mysql注释测试,2、明显有前端测试,我们用burp抓包进行修改邮箱进行sql注入测试,注册成功表明我们输入的单引号和双引号闭合,和#注释并没有起到作用,

3、我们去审计里面看看是什么操作,明显发现有魔术引号,这里我们可以使用宽字节注入进行闭合操作,根据sql语句的语法,补全value的值,进行sql注入

4、明显出现了报错,这里可以尝试报错注入使用updataxml进行中的0x7e和路径拼接报错数据库,在本地环境执行、弹出数据库报错,但是网页上怎么也报不出来,问题暂时未知,可以用盲注进行SQL注入。

5、接着我们进行XSS,结果弹框了,可以用存储型XSS获得adminCookie

6、延续SQL注入,insert into这个语法可以插入多行数据,我们可以试试进行信息插入,我们继续mysql监控审计姓账号是字符串可以用0x十六进制代替,虽然报错了,但是上传打到了本地数据库并且可以确定数据语句执行了,接着我们可以直接查询管理员密码和md5解码

7、万能密码用户登录测试成功

汉’,1,1),(1012,0x646a646a,md5(123456),(select pwd from blue_admin limit 0,1),1,1)#

1
2
3
INSERT INTO blue_user (user_id, user_name, pwd, email, reg_time, last_login_time) VALUES ('', 'admin123', md5('admin1'), 'admin' or updatexml(1,concat(0x7e,(select database())),1),1,1)#1123@qq.com', '1618314159', '1618314159')

INSERT INTO blue_user (user_id, user_name, pwd, email, reg_time, last_login_time) VALUES ('', 'admin123', md5('admin1'), 'admin汉',1,1),(100,0x646a646a646a646a,md5(123456),(select pwd from blue_admin limit 0,1),1,1)#1123@qq.com', '1618314159', '1618314159')


















获得管理员密码


万能密码漏洞


SESSION 变量覆盖

验证码死都对不上 SESSION

网站存在SQL注入的时候,我们其实要注意,当这个页面存在,代表着可能很多页面都会中枪

后台比前台脆弱的多

内网比外网脆弱的多

宽字节核心 魔术引号 在‘ “ \前面加一个\

GET POST COOKIE 传参都会被魔术引号处理


INSERT INTO blue_comment (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check)
VALUES (‘’, ‘1’, ‘1’, ‘1’, ‘6’, ‘ewafwaf’, ‘1618386586’, ‘192.168.136.1’, ‘1’)

1’ and updataxml(1,concat(0x7e,(select database())),1),1)#

闭合问题

前台GETshell 带走服务器

windows路径长度限制 include 长度最大限制

截断方法 5.3以下

../../1.txt………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
文件包含+图片马=组合拳
文件写入

漏洞地方3:文件包含漏洞+图片马组合拳

INSERT INTO blue_comment (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check) VALUES (‘’, ‘1’, ‘1’, ‘1’, ‘6’, ‘awfeeawfeaw’, ‘1618448970’, ‘192.168.136.1’, ‘1’)

‘or updataxml(1,concat(0x7e,(select database()),1) ,1)#

1、因为GET POST COOKIE传参都会被魔术引号处理 我们可以尝试一下是否会被魔术引号转义,Head请求头注入XXF

当我们在index文件中添加die进行输出页面测试使用GET进行传参时,发现GET/REQUEST/POST都会被魔术引号转义


所以我们选择尝试用head请求头burp进行抓包传参,使用$_SERVER[‘HTTP_USER_AGENT’]来接收传参

burp抓包

发现并没有被魔术引号转义,测试出可能会有head请求头注入

尝试在审计系统里面全局搜索SERVER,突然发现ip变量,并且同时存在调用函数getip()


于是我寻找getip的关键词,发现了sql语句insert into并且有插入getip()


存在XXF,进行尝试,发现这个ip传参是在评论系统里面,于是我们进行评论

进入mysql监控,查看是进行了什么sql语句,可以看出是传入是我们的X-Forwaded-For所以可以进行抓包head头报错注入




我们可以采用sqlmap进行盲注,因为会报错,在需要跑sql语句的地方打*用level3级



接着就完成盲注了。

本地文件包含漏洞前台getshell图文操作












因为这个inlcude包含的路径是固定的include/payment/‘.$_POST[‘pay’].”/index.php,在php5.3以下的版本可以进进行windows路径长度限制256进行截断最后的index.php,所以我们尝试截断





但是我们只是在本地上创建文件所以成功,接下来我们进行图片马

图片马和文件包含组合

制作一个能写入文件的图片马






总结

BlueCMS:目前操作中,能发现万能密码、mysql注入、盲注、head头注入(XXF)、XXS反射、存储、DOM、文件包含漏洞、文件上传漏洞,其他的还有很多等。

本文标题:0day审计实战案例

文章作者:孤桜懶契

发布时间:2021年04月12日 - 11:24:57

最后更新:2021年10月20日 - 13:25:00

原始链接:https://gylq.gitee.io/posts/90.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------