代码审计的思路
代码审计核心在于通过源代码,知道代码如何执行,然后根据代码执行中可能产生的问题来寻找漏洞。
代码审计一般泛指白盒审计,但是要记住,通用性漏洞,例如CMS通杀漏洞,其实并不是仅仅只有代码审计能好到,本地搭建然后纯黑盒测试也可以的。只不过代码审计更为全面的容易找到漏洞
代码审计其实思路很简单,一共两条路线,全文通读和敏感函数定位。
全文通读:我看了每一行代码不是还不够清楚吗?
敏感函数定位:掌握住可以存在危险函数的地方 反推
渗透测试人员 -> 渗透测试 -> 找漏洞 -> 找Bug -> 开发人员的技术不到关|衔接问题|项目经理得罪了|任何原因
安全不能孤立:业务方便 <-> 安全 (没有绝对的安全)->纳什均衡 => 漏洞一定存在
代码设计的核心
变量覆盖 $$
文件包含 include
黑盒渗透测试 -> 信息收集
如果没有功能没有传参,怎么可能拿得下
黑盒部分 -> 寻找功能点 -> SQL注入 -> XSS -> CSRF -> XXE -> SSRF -> 文件上传 -> 逻辑漏洞 <=> 验证码绕过、密码找回、支付漏洞、越权
白盒部分 -> 变量覆盖-> 文件包含 -> 反序列化
黑盒测试没成功 -> 为什么 -> 过滤 <=> 传参错误 -> 过滤规则、传参后参数经过什么处理?
CMS是个通用的东西,但是你的环境不一定和所有人相同,php肯定要交互数据库,你的数据库密码和库名不可能和每个人相同
**——笔录**
*无论是哪一个审计方法都需要一定的编程功底,但是如果你的编程功底不够怎么办? *
等死吗
也并不是,其实也可以尝试使用黑盒+白盒代码审计的方式进行一个学习,通过黑盒的方式来进行测试,然后去了解究竟传参进去经过处理发生了什么?
然后构建出合适的语句进行尝试,最后找到问题所在点。
思路就是这个两个,具体的会用曾经写的文章为案例进行分析。
白盒测试
测试CMS:BlueCMS
一、安装板块 install 能不能多次安装
1、重复安装代表着你能破坏网站
2、重复安装你能进入后台
站库分离 => 数据库 和网站不在同一个机器
3、其实重装的时候也会产生安全问题
网站访问数据库,你的数据库账号密码会储存在哪里? 配置文件
安全防御
内网比外网弱、后台比前台弱
边缘知识你们不知道 、 这个叫做骚姿势
漏洞地方1:进入注册窗口可以通过burp用户名已存在爆破出用户
burp抓包之后看到一个act的传参,在代码审计中查询do_reg
*由此可以看出后端是使用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 | 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') |
获得管理员密码
万能密码漏洞
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、文件包含漏洞、文件上传漏洞,其他的还有很多等。