APP渗透测试篇(上)

每日一句:

		渗透测试,一定要有耐心,所有的功能点都要测试。
		
		很多地方不亲身经历是没有太多的感受的。

一、App渗透测试原理

	1.简介
		
				App渗透测试与Web渗透测试从某种角度说基本没有区别
			
				App其实就是手机软件,咱们不需要害怕他。
				
				说一个简单的道理,一个网站存在sql注入,用电脑访问存在,用咱们的手机去访问一样存在注入。
				
				大部分漏洞的存在并不是在客户端而是在服务端
				
				例如:
						SQL注入、验证码绕过、越权漏洞、支付漏洞、CSRF、XSS、
						
						变量覆盖、反序列化、文件包含、SSRF、XXE、文件上传等等
				
				这些漏洞web存在,app也存在。


	2.换个思维角度
	
				我们再换一个思路,渗透测试网站,其实核心思想是控制传参访问,与服务器产生交互。
				
				如果说我们不对他进行访问和传参,那么他有可能被你渗透攻击下来吗?
				
				答案是否定的。
						
				渗透测试的核心其实就是把控传参。其实和App交互的还是服务器,用的还是HTTP协议,
				
				交互的服务器还是同一个,网站和App和同一个服务器交互都是很正常的事情。
				
				一般都是用api通信,例如:
				
						http://xxx/api.xxxxx.com/Api/xxx

	3.小结
	
				正常网站的交互: 浏览器 -> 网站

				App的交互: App -> 网站

				我们既然可以抓网站的数据包,那么我们能否抓App的数据包?
					当然可以
	
	4.补充
			(1)
			
				提起app,有的朋友可能会在自动在脑海中给App渗透增加一些难度,比如通信加密、重打包、脱壳、逆向 apk解包等等
				
				我就说一句,难到web网站的传输没有加密传输的? 一个目标网站没有源码,就不测试了?src没有源码就不挖掘了?
				
				不要将自己的思维固定。	在多说一些,其实微信小程序与web也有着千丝万缕的联系,本质区别并不大。
				
				大多app的安全性会比web网站的还差,各种app的破解软件基本遍布大街,
				
				因为大多刚刚入门的白帽子认为app很难,很少去搞,加上大多app开发的安全性并不比web开发者强多少。
				
				而且经过这么多年的发展,其实web的发展也有了一定的瓶颈,特别是对一些大厂的测试,app的渗透测试是比web更容易下手。
				
				话不多说上一些前辈们的案例。
				
			(2)前人案例
			
					https://www.uedbox.com/?s=wooyun+app
					
					逻辑漏洞:https://www.uedbox.com/post/10278/ 
					
					假装打码:https://www.uedbox.com/post/10714/
					
					越权漏洞:https://www.uedbox.com/post/10172/ 
					
					任意密码找回:https://www.uedbox.com/post/9621/
					
					SQL注入:https://www.uedbox.com/post/11214/
					
					XSS:https://www.uedbox.com/post/10169/ 
			
			(3)扩展
			
					看这些案例,想起一个之前项目中遇到的情况。
						
					测试某集团,注册登录上去,查看我得个人资料。
						
					在前端界面看到了我注册时的一些手机号等待,但是在浏览器的JS源码中有所有人的资料
						
					其实这些东西(伪打码导致的信息泄露)在项目中很常见,
						
					比如,前端显示手机号为:185xxxx6666。抓包就可以看到完整的手机号。
					
					有很多小伙伴说挖不倒洞,这些小伙伴问问自己在一个网站上,自己花了多少时间,是不是将与服务器的传参都测试了?
					
					是不是返回包都仔细检查了?  我想大概率是没有的,很多时候菜鸡与大佬的区别就是细心,
					
					对一般的网站测试中,大佬挖到的洞,只要你细心基本也可以挖掘的到。抛去见识与经验之谈,多多少少总会有一些收获。
					
					绝大多数刚入门的白帽子最大的问题是没有耐心与细心。
					
					一个网站5分钟找不到漏洞直接放弃,说网站防护的太好,不存在漏洞,这种行为是很不可取,并且可笑的。
					
					建议刚刚入门不久但小有实力的白帽子一定要戒骄戒躁,要有一定的耐心与恒心。

二、安装安卓模拟器 + 抓包(夜神)

	1.安装模拟器
	
			既然是App抓包,那肯定需要先安装App,那么Windows电脑上怎么安装App?
			
			这里我建议使用安卓模拟器,我用的是夜神模拟器
	
					下载地址:https://www.yeshen.com/cn/download/fullPackage
		
					直接下载就行,安装就行
					
			别的模拟器与真实的手机也是可以的,只要连接到同一个内网(WIFI)。
	
	2.原理
	
			模拟器的核心就是在电脑上面模拟出一个手机,然后你可以在上面进行一系列的操作,
			
			你可以在上面打游戏,也可以办公,
			
			比如:我以前拿这个模拟器来挂微信,后面拿来钉钉打卡,最后还玩过吃鸡,模拟器物理挂,专门带妹吃鸡。
			
			这些让人脸红的往事就不多提了。
	
	3.设置代理
		
			模拟器既然拿来做渗透测试,那么我们该如何对安卓模拟器抓包?

			其实很简单。
			
			(1)配置模拟器
			
				找到设置中的Wifi然后长按当前使用的Wifi,会出现高级选项(修改网络),然后选择手动设置代理就可以。
				
				模拟器的IP同虚拟机的IP一样,与本机的IP不是同一个IP。
			
				所以大家设置模拟器的代理主机名,不要写127.0.0.1。要设置本机IP,如:192.168.1.66。
				
				端口写8080(其实这个端口写什么都行),然后我们去配置Burp。
				
			(2)配置burp
				
				打开burp,点击Proxy(代理)--Options(设置)--Add(增加)--Specific address(具体地址)
				
				选择192.168.1.66。将Bind to port(监听端口)设置为8080--点击ok即可。
					
				此时模拟器(手机)上的所有数据都将先发送给burp。
				
				可以在模拟器中打开浏览器,访问一些网址,都会在burp中抓到数据。
				
				这个时候可能会弹出一些证书问题,一直点击接受就行,
				
				当然,想要从根本上解决问题,需要我们给模拟器安装个一下burp的证书。
			
			补充:
			
				模拟器上这么设置。真实的手机上也这么设置就行。主要真实的手机要与电脑连接同一个内网(WIFI)。
				另外,其实手机上也有一些抓包软件,但是我个人用不太习惯,且不是太方便就在展开,大家有兴趣可以自己去找找。
			
			(3)
			
				方式一:
						打开模拟器浏览器,访问192.168.1.66:8080下载证书
						
						点击模拟器的文件管理器,找到刚刚下载的证书。
						
						将证书文件的后缀(一般是cacert.der)改为“.cer”
						
						点击设置--安全--从sd卡安装(证书)
						
						找到刚刚修改后的证书,(找不到直接在搜索框搜索)
						
						安装证书,可能会让起名字任意起一个名字即可(如:a)
				
				方式二:(推荐)
				
						直接在本机浏览器访问192.168.1.66:8080下载证书
						
						将后缀改为“.cer”之后,直接拖进模拟器
						
						点击设置--安全--从sd卡安装(证书)
						
						找到刚刚修改后的证书,(找不到直接在搜索框搜索)
						
						安装证书,可能会让起名字任意起一个名字即可(如:a)
						
				其实这些和web浏览器安装证书几乎没啥区别,原理也大同小异。

三、实战App渗透测试

	0.说明
	
		这会用到一些App,由一些前辈老师所设计的。因为一些特殊原因,
		
		不可能直接放出来公布与众,毕竟不是我写的软件。(有兴趣的同学可以私聊我)
	
	1.安装配置环境
	
		打开安装完毕的软件,需要小小设置一下。
		
		点击软件右上角的设置,填写一个服务器(靶场)地址。		//地址同上述“ 0.说明 ”
	
	2.
		(1)
			注意的是,很多App访问地址都是写死的。
		
			App也是有服务端的(客户端、服务端)
			
			客户端就是个人安装的App,服务端就是服务器
			
			所以不要认为App所有的操作都是在个人手机上完成的,很多App是不停的在和他设定好的服务器之间进行通信的。
			
			为什么上边安装App的地址没有写死呢?因为这是一个靶场。
		
		(2)
			从某种角度说,App的作用很是类似网站web页面的作用,他仅仅是将内容展示给用户。
			
			同时,将用户产生的数据发送给写死的服务端。而对于App本身是不会保存太多重要的数据,
			
			他也只是从服务器的数据库中读取到了数据,然后经过一些渲染处理展示给手机用户。
			
			其本身并不会保存像数据库账户密码等敏感内容,也没必要。
	
		(3)
			另外在模拟器商店下载一些软件的时候,最好将代理关掉。(在模拟器设置--WiFi代理)
			
			下载软件的时候可能会走一些其他的协议,代理会影响。
			
			当然有一些更加简单粗暴的解决方法:在本机下载app,然后直接拖拽到模拟器安装。
			
	3.抓不到数据包
	
			有时候一些小伙伴可能会遇到一个问题:
				
				我模拟器浏览器的包与大部分应用的数据包都可以抓取得到,但是有个别应用的个别功能数据包就是抓不到
				
			这个其实不难理解,在客户端与服务端进行通信的过程之中,有很多的协议。
			
			而burp一般仅仅可以拦截到http/https协议的数据包,对于应用的某些功能走一些特殊的协议
			
			这个时候原生的burp就显得稍微乏力一些。对于这种情况,大家可以参考一下以下文章:
			
					https://www.freebuf.com/articles/network/158589.html
					
					https://iassas.com/archives/ffc80a19.html
					
			一般这种情况多发生在一些大型App的关键业务处,如登录、找回密码等处。
		
	4.靶机问题
	
		(1)所有的功能点都要试试
				
				~忘记密码处,点击,提醒一些“巴拉巴拉”的信息。貌似这个功能点是假的
				
				~只剩下OA登录了(正常的OA办公系统是没有注册功能的)
						
						随便用一个账户(如admin,123456)试试,发现多登录几次会提示:
						
							“登录错误太频繁,请稍后在试”,这个时候无论我们在写什么密码,都一个提醒。
							
							之前查看过源码,大概意思是登录错误几次,就被拉黑了。如何绕过呢?
						
		(2)绕过登录拉黑功能 
				
				使用任意账户,如(admin,123456)登录。抓包,
				
				发现:
						~内容很简单,没有cookie
						
						~一个device(设备)的值,可以试着改一下如:
							
							将最后的数字5改成4,或者6在发包试试提示什么?密码不对。
							
							这就是一处漏洞了,通过修改传参绕后登录检测功能。
							
							补充:
							
								一般在渗透测试中,提示你登录太频繁的情况下,可以试着以下操作进行绕过
								
									~可以修改一下cookie
									
									~增加一个XFF值
									
									~修改一下包内传参
		
						~传参携带信息猜测解密
						
							在数据包中下方,有一些信息(一般是携带的账户,密码等)。
							
							而且他的值是:	user:YWRtaW4%3A&pass=.....
							
							到这可以对加密进行猜解一下。
							
		(3)猜解加密信息
			
				将user的值,先进行url解密,得知%3A是“ :”。
				
				正常加密中,这个 :是很罕见的。
				
				先百度一下前面的几个字母:“YWRtaW4”,没什么收获,但是百度结果关键词后边有的是“ = ”
					
				试了试 YWRtaW4= 进行base64解密,直接出结果:admin	//一般看到结尾是“=”的大多是base64编码。
				
				结论:先base64加密,将“ = ”替换为“ :”				//其实直接拿“ YWRtaW4:”直接进行base64解密也可以结出东西。 
						
				验证:可以将密码的加密值进行base64解密试试,果然也是输出的值。
				
						这个时候就可以爆破了
						
				补充:在渗透测试过程中,base64、md5是使用的非常广泛的,不认识的一些编码,直接丢进去先解密试试,说不定就有惊喜。
				
		(4)base64加密的字典
					
				~将自己的常用的字典进行base64加密
					
					可以去百度、谷歌一些小脚本。如下边php的小脚本
						
							<?php
								$file = fopen("1.txt","r");
								while(!feof($file))
								{
									echo base64_encode(fgets($file))."<br />";
								}
								fclose($file)									
							?>
						
					或者去一些在线网站如:https://www.sojson.com/base64.html
					
					补充:
					
						多说一句,在web测试中,字典不易过大。一般超过20M我认为都没啥必要,或者说不及格的字典。
						
						几个G,十几个G的字典也仅仅在爆破SSH,3389等服务用过。
						
						大文本字典,用win自带的notepad打开会很卡(一般超过40M就巨卡),可以去下载一些编辑器打开。
						
				~将加密后字典内容中的“=”替换为“:”
							
		(5)爆破admin账户
						
				~先将密码字典进行base加密魔改。
				
				~抓取登陆包,发到burp爆破模块。
				
					爆破选项选择第三个 标记一个绕过登录处,一个密码处。
					
					//burp的四种爆破模式,大家可以去百度、谷歌一下。了解了解。
					
					第一处,选择数字替换。进行绕过登录限制
					
					第二处,加密魔改的base字典
			
		(6)关于cms的一些补充
		
				在渗透测试中,发现目标网站是某CMS搭建的,看看能不能自己在本机也搭建一下。
				
				一些cms的数据库中是存在默认测试账户的,很多的管理员一般改密码也仅仅将默认的admin密码修改,
				
				对其他测试账户不会修改,在登录的可以试试。
						
							
				
				另外在实际环境中,爆破admin的概率,其实不如爆破一些测试账户如:
				
				test、a、b、admin1、test1、ceshi、ceshi1、公司名、域名、人名等
				
				发现这个测试账户的存在,在爆破这些测试账户容易的多。
				
		(7)假设用测试登录进去后
				
				测试一些功能点处,如打卡处:
				
					~一些框可以测试xss,多个框的情况下,可以第一个框写alert(1)、第二个写(2)等,方便区分哪个地方出现问题。
					
					~一些地方,可能会有前端过滤,即服务器存在xss,但是你在提交的过程中,前端进行实体化编码等。
					
						对这种情况就要抓包,然后再数据包中将内容进行替换为弹窗语句。
				
					~在其他有框的地方也可以进行测试,每一个框都试试。比如这个打开有追加说明、催办、评论等等处可以在插入xss语句。

						做渗透测试,一定要耐心,不放过任何交互点、功能点,所有的数据包都要进行测试查看。
						
				除了打卡处,还有很多功能处可以去测试,如思考:
					
					邮件处可否弹窗呢?看看通讯录是否可越权呢?能不能对一些功能的数据包进行篡改达到低权限看到高权限的信息呢?
					
					另外如新增客户处是否可以sql注入呢?	这些地方要想到,更要去测试。
					
		(8)App靶场的flag处,
			
				任意一个文件上传点,上传图片马。抓取返回包,发现文件保存的地址。
				
				结合数据包的其他信息,可以精确到文件的位置,这个靶场服务器是存在CGI解析漏洞的,
				
				在图片马后边加 “ /.php?a=phpinfo(); ” 。	之后连接菜刀,蚁剑都行。
				
				当然,这是最简单粗暴的,也可以测试其他的文件上传方法。

猜你喜欢

转载自blog.csdn.net/weixin_43970718/article/details/107749130
今日推荐