本文内容:
~代码审计得思路
~实战文章分析
~总结
每日一句:
当排除了所有的可能,剩下的无论是多不可能也是真相。
自新手篇后,好久没有更新。最近很忙,一直没有时间来写写文章。
但是大家放心,一有时间的话,即更新进阶篇或者其他的文章。
不多说,开始正题
一、代码审计得思路
1,渗透测试的核心
渗透测试的核心 ---> 找漏洞 ---> 找有危害的bug --->
2,为什么存在bug?
~开发人员技术不过关
~不同功能(版本)之间的衔接问题
~公司有人得罪了开发
3,安全不能孤立
用户的体验性与安全性是成反比的
不能因为体验性放弃安全,也不可能因为安全性放弃体验性
这就需要寻找最合适的平衡点
所有有一点是确定的,那就是因为体验性的存在,安全问题也一定存在
4,代码审计的核心
~核心在于通过源代码,知道代码如何运行,然后根据代码执行中可能产生
的问题来寻找漏洞
~代码审计一半泛指白盒审计,但是要记住,通用型漏洞,例如CMS通杀漏洞
其实也可以通过本地搭建后,纯黑盒测试也能找到。只不过是白盒测试
更为全面,也更容易找到漏洞
5,代码审计思路
~全文通读
一般从index.html文件切入,因为这是系统的入口
需要有一定的代码能力,但是强烈建议有时间一定要全文审计
一个老版本的CMS,只有这样才能了解开发是怎么写一个网站的,
正所谓,知己知彼,方能百战不殆
~代码能力怎么样时,才可以审计呢?
没有统一的说法,随时都可以。
能力好,审计的快点,效率高一些
能力差,审计的慢点,效率低一些,
且审计代码的过程也是学习的过程(看不懂的函数就百度)
多提一句,第一个审计的cms时间可能会很长,1个月都正常
但是之后的就轻松多了
建议代码能力强点在去审计,不然很容易“从入门到放弃”
~敏感函数定位
掌握住可以存在危险函数的地方 反推
比如我们之前的文章:文件包含、变量覆盖都提到很多危险函数,
如include,这时直接去找这个函数。再看看有哪些地方的这个函数
是我们可以控制的。然后想办法使程序运行到我们可以控制的地方
6,个人建议
本着一个关键点出发,黑盒与白盒并不是从对立的 (即灰盒测试)
对新人来说,你去黑盒审计一个地方是否存在sql注入,可能很难测试出,
若是黑盒测试这就结束了 但是,这时候我们可以去审计源码
去找你注入点的代码,也许能明白为什么sql注入没注入出,
是被转义了,还是没有闭合呢,还是有其他的问题呢
然后见招拆招,或者根据CMS特别的参数就可以完成sql注入了
7,渗透测试的步骤(思路)
~正常来说先是信息收集 ---> 扩大攻击面积 ---> 攻击
~但是有源码了,还收集什么信息,直接干。具体:
找网站功能点(看看什么函数控制,什么传参控制)
然后黑盒测试:
试试SQL注入、xss、csrf、xxe、ssrf、文件上传
深入测试一些逻辑漏洞:验证码找回、密码找回、支付漏洞、越权等等
白盒有:
变量覆盖、文件包含、反序列化
进一步思考为什么黑盒没有测试成功?
是过滤? ---> 过滤规则 ---> 能否绕过
是传参不对? ---> 传参经过了什么处理 --> 能否绕过
二、实战文章分析
0,以一个CMS为例
1,划分功能模块(比如:)
~安装
~重复安装(覆盖原数据库内容);可以进入后台Getshell
很多网站提倡,站库分离,即网站与数据库不在同一台机器
重复安装时,可以将数据库外连到我们公开的数据库。
自定义管理员账户密码后,直接登陆后台
//需要一个公网服务器
~双引号解析,直接写shell
注意,双引号解析只会发生在php5.5以上的版本
~前台
~用户注册
可能存在的危害
~sql注入
~存储型xss
~逻辑错误可爆破用户名
标准的注册处理页面功能:
~接受传参
~过滤传参
~插入数据库
如何审计?
正常注册,提交,抓包,
~看看请求包内容。(主要是我们填写的信息那)
~看看提交给谁处理(找处理页面)
~看看有没有标识符(一般和我们填写信息在一起)
一个php文件可能有几个功能块,标识符的作用就是调用哪个功能
然后去标识符功能那看看,功能的代码(作用)
假设功能是,接受传参,插入数据库
//没有过滤参数或者可以绕过过滤
测试,值得一提的是。流程:
~先正常注册看看行不行
~在注册含有恶意代码的语句
如果正常都注册不成功,可以试试改变php版本
~扩大攻击威力
比如注册的地方存在xss,你登录后仅仅弹你自己是没什么大危害的。
一般的管理员都可以访问用户列表,你可以登录管理员
访问用户列表,假如直接弹框。即你这个危害可以从前台打到后台
恭喜你可以去审计得到一个CNVD证书,一个存储型xss一般中危跑不了
~扩大攻击面积
当打出xss的时候,思考会不会也可以打出sql注入
填写注册信息的时候,加上'")#这四个符号试试闭合
发现注册成功,没有危害,黑盒测试到这就终止了
但是白盒可以,去看看源代码怎么过滤的或用seay审计
找到具体的防护手段,可以思考如何绕过
例如碰到魔术引号,用宽字节,注意bp不能插入汉字
且%df是经过url编码的,post传参的话也是不行
综上,可以写a',去将a对应hex(16进制)61改为df
发送修改的数据包,网站报错,即存在注入
继续打危害:
可以用updatexml()并补充对应格式,最后加注释打出报错注入
对应格式可以通过seay抓到
若一直执行失败,可以先将语句直接丢到数据库执行,若没问题,则说明cms有所防护(关闭了错误回显)
此刻两个路:盲注(每次验证码会变)、有经验去寻找关闭回显怎么来的
两条路都不易,所以新姿势:能否一次插入多条数据?
insert into 表名(id,name,pw,email) values (15,'admin123',md5('admin123'),66@qq.coma'),
//注意这个a的hex改为gf
//从这开始,开始插入的语句,要避免引号出现
(100,0x自己name的16进制,md5(123456),(select databaase()))#
将这两句话插入后,我们登录刚刚注册的用户,看看邮箱处,是不是数据库的名称
若是,直接构建一个获取管理员账户密码的语句
ok,到这又一个漏洞搞定
~扩大攻击面积之逻辑错误爆破用户名
在注入时,经常会提示,你的用户名已经被使用的情况
可以注册,抓取注册语句,通过返回状态码批量爆破用户名
~用户登录
可能存在的危害
~宽字节注入 - 万能密码
~cookie未加密
如何审计?
登录处,结合bp和seay看看能否绕
注意要用一个真存在的用户名去测试,很多cms会检测你的
用户名不存在的话,连密码都不校验了
一般or 1=1#的语句放到密码处,用户名使用存在的
修改资料
~存储型xss
~sql注入
~文件上传
~后台
2,防御机制
内网比外网弱
后台比前台弱
拿下后台后可以进行,
后台写文件,或者getshell的方法。拿下目标服务器
但是代价很大,授权不到位就会进去
三、总结
1,如何提高自己的代码审计能力
~看文章,关于代码审计漏洞的文章且复现
~看CNVD,看CNVD公式xxxCMS存在xxx漏洞,然后复现
~自己去进行挖掘,可以先灰盒 在定位危险函数 再复现
2,一些注意的点
~有些时候的过滤检测是前端的,可以正常输入信息,抓包,修改
~一个地方有xss,基本也会有其他的一些漏洞如sql注入
~搭建的cms出现一些问题的时候,记得去百度或者谷歌一下
也许一个小小的改动就可以正常使用
~白盒审计可以借助工具,如Seay(监控数据库的功能很常用)
~抓包修改后提示验证码错误,可以右击验证码,复制链接,网页打开,
用这个新的验证码将包内验证码一并替换
~在bp中a'改hex,一定要放到最后做,不然会发生一些莫名其妙的问题
~记得复原环境,亲自测试一遍
blueCms号称最适合新手的cms,大家可以去找找,搭建一下练练手
转载:https://blog.csdn.net/weixin_43970718/article/details/104950620
查看评论