飞道的博客

网络安全进阶篇(十一章-1) 0day审计思路(上)

525人阅读  评论(0)
本文内容:
	~代码审计得思路
	~实战文章分析
	~总结
	
每日一句:
	当排除了所有的可能,剩下的无论是多不可能也是真相。

自新手篇后,好久没有更新。最近很忙,一直没有时间来写写文章。
但是大家放心,一有时间的话,即更新进阶篇或者其他的文章。
不多说,开始正题

一、代码审计得思路

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场