一、网安学习成长路线图
网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、网安视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
三、精品网安学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、网络安全源码合集+工具包
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)
五、网络安全面试题
最后就是大家最关心的网络安全面试题板块
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
* [(2)漏洞利用](#2_382)
* + [A、任务一:弹窗](#A_384)
+ [B、任务二:访问一个本地文件,如/etc/hosts](#Betchosts_393)
- [8、证书绕过](#8_400)
- * [(1)hook脚本](#1hook_404)
* [(2)hook结果](#2hook_467)
* [(3)踩坑](#3_477)
- [9、脆弱的加密](#9_495)
- * [(1)反编译查看](#1_499)
* [(2)hook加密函数](#2hook_504)
* + [A、AES](#AAES_506)
+ [B、MD5](#BMD5_546)
+ [C、Random](#CRandom_586)
- [10、本地动态链接库](#10_624)
- * [(1)反编译查看](#1_628)
* [(2)so文件查看检测函数代码](#2so_639)
* [(3)hook方法](#3hook_665)
* [(4)hook结果](#4hook_690)
* [(5)踩坑](#5_700)
1、不安全的日志记录
任务:在日志中找到key
命令查看日志中是否包含输入的key
adb logcat
2、硬编码
任务:查找硬编码user:password
查找到superadmin:supersecurepassword
3、pin绕过
任务:绕过pin检测
其实可以对NDg2Mw==,直接解码得4863
(1)反编译查看方法判断逻辑
查找areEqual方法,如下
(2)hook方法
A、Hook areEqual(Object,Object)
先是去hook了kotlin.jvm.internal.Intrinsics类的重载方法,通过传的first参数数据类型为String可知,调用的是
搜索Equal函数,是返回true or false
那么修改返回为true就行
js:
function hookChongZai(){
var utils = Java.use("kotlin.jvm.internal.Intrinsics");
utils.areEqual.overload('java.lang.Object', 'java.lang.Object').implementation = function(a,b){
console.log(a,b);
a = "2022";
b = "2022";
console.log(a,b);
var ret = true;
return ret;
}
}
function main(){
Java.perform(function(){
hookChongZai();
})
}
setImmediate(main);
输出:
页面显示
B、Hook checkPin(a)
修改返回值,只要return true就行
js:
function hookpin(){
console.log("script running .....")
var utils = Java.use("infosecadventures.allsafe.challenges.PinBypass");
console.log("test\n");
utils.checkPin.implementation = function(a){
console.log(a);
a = "2022";
console.log(a);
var ret = true;
console.log(a,ret);
return ret;
}
}
function main(){
Java.perform(function(){
hookpin();
})
}
setImmediate(main);
(3)页面效果
输入任意四位数,显示输入正确
(4)踩坑
- overload(‘java.lang.Object’, ‘java.lang.Object’)
小结:
.overload('double', 'java.lang.Double')
.overload('float', 'java.lang.Float')
.overload('java.lang.Double', 'double')
.overload('java.lang.Double', 'java.lang.Double')
.overload('java.lang.Float', 'float')
.overload('java.lang.Float', 'java.lang.Float')
.overload('java.lang.Object', 'java.lang.Object')
- 将返回设置成字符串true了,即
var ret = “true”
;
为变量赋值Boolean类型值的例子:
var found = true;
var lost = false;
需要注意的是Boolean类型的字面值true和false是区分大小写的。
4、root检测绕过
任务:绕过root检测
(1)反编译查看
首先查看infosecadventures.allsafe.challenges.RootDetection
,找了找没有啥判断逻辑
再查看infosecadventures.allsafe.challenges.RootDetection$onCreateView$1
的检测逻辑
全局搜索isRooted
方法,如图可知是布尔类型的返回结果。
(2)hook方法
js:
function hookroot(){
console.log("script running .....")
var utils = Java.use("com.scottyab.rootbeer.RootBeer");
console.log("test\n");
utils.isRooted.implementation = function(){
var ret = false;
console.log(ret);
return ret;
}
}
function main(){
Java.perform(function(){
hookroot();
})
}
setImmediate(main);
(3)绕过效果
原始页面:
绕过页面:
5、Secureflag绕过
任务:绕过禁止截屏限制
(1)查看相关代码
找到禁止截屏函数
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
然后查看setFlags
(2)Hook脚本
function hookflag(){
console.log("script running .....")
var utils = Java.use("androidx.recyclerview.widget.RecyclerView");
console.log("test\n");
utils.setFlags.implementation = function(a,b){
console.log(a,b);
a = 11;
b = 11
console.log(a,b);
var ret = this.setFlags(a,b);
console.log(ret);
}
}
function main(){
Java.perform(function(){
hookflag();
})
}
setImmediate(main);
(3)hook效果
思路是改setFlags的值,我看最开始输出是0,12,就给改成11,效果是黑屏卡住了 ==
找到对的值就ok
6、Deeplink利用
任务:尝试触发deeplink
(1)查看漏洞代码
先找到对应的Activity
再跟进 找到getintent()函数,看如何赋值的
可知参数data即为intent的值,以及对data的判断条件为和key的值相等则完成任务。
(2)漏洞利用
找到key的值如下
此时就应该构造intent为2131820617
A、访问html文件
可以看到action为null
但是从AndroidManifest.xml可以看到intent-filter为当Action为android.intent.action.VIEW可调用
构造html文件如下
<html>
<head>
<h1>deeplinktest</h1>
<head>
<body>
<a href="intent:#Intent;package=infosecadventures.allsafe;component=infosecadventures.allsafe/infosecadventures.allsafe.challenges.DeepLinkTask;action=android.intent.action.VIEW;data=2131820617;end">test</a>
</body>
</html>
但是 data的值好像传失败了==
B、使用adb构造intent
adb shell am start -n "infosecadventures.allsafe/infosecadventures.allsafe.challenges.DeepLinkTask" 2131820617
adb shell am start -n "infosecadventures.allsafe/infosecadventures.allsafe.challenges.DeepLinkTask" -d "2131820617"
利用成功页面:
7、Webview利用
任务一:弹窗
任务二:访问一个本地文件,如/etc/host
(1)查看漏洞代码
漏洞条件:
- setAllowFileAccess(true) (默认开启)
- setJavaScriptEnabled(true)
- WebView可以被外部调用,并能够加载外部可控的HTML文件
都满足,对传进来的url
参数没有任何处理过滤,直接使用loadurl()
加载
(2)漏洞利用
A、任务一:弹窗
利用JavaScript伪协议进行弹窗
B、任务二:访问一个本地文件,如/etc/hosts
8、证书绕过
任务:拦截流量,绕过证书校验
(1)hook脚本
网上的通用脚本:
/*
Android SSL Re-pinning frida script v0.2 030417-pier
$ adb push burpca-cert-der.crt /data/local/tmp/cert-der.crt
$ frida -U -f it.app.mobile -l frida-android-repinning.js --no-pause
https://techblog.mediaservice.net/2017/07/universal-android-ssl-pinning-bypass-with-frida/
UPDATE 20191605: Fixed undeclared var. Thanks to @oleavr and @ehsanpc9999 !
*/
setTimeout(function(){
Java.perform(function (){
console.log("");
console.log("[.] Cert Pinning Bypass/Re-Pinning");
var CertificateFactory = Java.use("java.security.cert.CertificateFactory");
var FileInputStream = Java.use("java.io.FileInputStream");
var BufferedInputStream = Java.use("java.io.BufferedInputStream");
var X509Certificate = Java.use("java.security.cert.X509Certificate");
var KeyStore = Java.use("java.security.KeyStore");
var TrustManagerFactory = Java.use("javax.net.ssl.TrustManagerFactory");
var SSLContext = Java.use("javax.net.ssl.SSLContext");
// Load CAs from an InputStream
console.log("[+] Loading our CA...")
var cf = CertificateFactory.getInstance("X.509");
try {
var fileInputStream = FileInputStream.$new("/data/local/tmp/cert-der.crt");
}
catch(err) {
console.log("[o] " + err);
}
var bufferedInputStream = BufferedInputStream.$new(fileInputStream);
var ca = cf.generateCertificate(bufferedInputStream);
bufferedInputStream.close();
var certInfo = Java.cast(ca, X509Certificate);
console.log("[o] Our CA Info: " + certInfo.getSubjectDN());
// Create a KeyStore containing our trusted CAs
console.log("[+] Creating a KeyStore for our CA...");
var keyStoreType = KeyStore.getDefaultType();
var keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
// Create a TrustManager that trusts the CAs in our KeyStore
console.log("[+] Creating a TrustManager that trusts the CA in our KeyStore...");
var tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
var tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
console.log("[+] Our TrustManager is ready...");
console.log("[+] Hijacking SSLContext methods now...")
console.log("[-] Waiting for the app to invoke SSLContext.init()...")
SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").implementation = function(a,b,c) {
console.log("[o] App invoked javax.net.ssl.SSLContext.init...");
SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").call(this, a, tmf.getTrustManagers(), c);
console.log("[+] SSLContext initialized with our custom TrustManager!");
}
});
},0);
(2)hook结果
成功抓包:
(3)踩坑
看着是证书的问题,百度了一下需要系统信任burp证书
可是系统已经信任证书了
最后是替换了最新的证书解决的
9、脆弱的加密
任务:使用frida hook加密的方法
(1)反编译查看
(2)hook加密函数
A、AES
直接输出参数1,再篡改为参数2并对其加密
js:
function hookcrypto(){
console.log("script running .....")
var utils = Java.use("infosecadventures.allsafe.challenges.WeakCryptography");
console.log("test\n");
utils.encrypt.implementation = function(a){
console.log(a);
a = "quan";
console.log(a);
var ret = this.encrypt(a);
console.log(ret);
return "The AES encrypto Result of " + a +":" + ret;
}
}
function main(){
Java.perform(function(){
hookcrypto();
})
}
setImmediate(main);
hook输出:
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-BUeqeaQO-1715843485231)]
[外链图片转存中…(img-rbY1ym9X-1715843485231)]
[外链图片转存中…(img-1H8bC8SC-1715843485232)]
[外链图片转存中…(img-dLBlLDAU-1715843485232)]
[外链图片转存中…(img-Nnln77KL-1715843485233)]
[外链图片转存中…(img-hTGLcVVs-1715843485233)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新