|
|
|
[求助]求救关于IDA+hex-rays
最近也遇到了这个问题。从内存dump出binary后,部分字节可能破坏。IDA反汇编的时候也遇到了这个问题。 解决办法是:用IDA打开一个相同架构的程序,例如,自己在linux下gcc编译一个64位的程序用IDA打开,然后看Option--Compile的配置。 修改dump出来的程序的配置,修改成一样的即可。
最后于 2018-5-26 22:17
被心许雪编辑
,原因:
|
|
[翻译]安卓O内核的加固
安卓使用了内核地址空间布局随机化这个技术已经好几年了。随机化的内存布局使得代码重用攻击不再一定起作用,也就使得攻击者尤其是远程攻击者更难进行利用。安卓8.0把这个特征带到了内核。Linux从3.14版本开始已经支持x86平台上的KASLR,ARM64平台上的KASLR也已经从4.6版本开始支持。安卓8.0使得KASLR在安卓内核4.4上和更新的版本开始受到支持。 KASLR通过在每次启动时随机化内核代码的地址来防御内核漏洞。例如,在ARM64平台上,它根据设备的内存配置,添加了13-25位的熵,这会使得代码重用攻击更加困难。 |
|
[原创]CVE-2017-8890 深度分析
感谢分析。 有两个问题想请教一下: 1. 存在一个问题:在 64 位机上存在 PXN 防护,需要通过 jop 的方式来绕过这个防护机制,而 jop 需要能够控制至少一个寄存器,但 rcu_head 中的 next 是作为一个地址传过来的,并不能通过寄存器控制,所以在 64 位机上并不能直接通过这种方式完全利用达到提权的目的。 64位机器上需要通过jop来绕过PXN,jop需要至少控制一个寄存器。这个可以理解。但是这句话“但 rcu_head 中的 next 是作为一个地址传过来的,并不能通过寄存器控制” 是什么意思?博主似乎没有对__rcu_reclaim函数的说明,可否从源码的角度来补充说明一下? 2.当要释放一个 mc_list 的时候,rcu_head 会被链到一个释放链表中 释放mc_list的时候,在ip_mc_drop_socket中是调用
kfree_rcu
来释放的。
mc_list 中rcu_head的释放可以在 rcu_do_batch函数中的while循环中找到。
但是这个rcu_head是如何链到一个链表里的呢? 补充:精华的地方比如jop,希望博主可以详细描述一下XD
最后于 2018-4-17 15:09
被心许雪编辑
,原因:
|
|
|
|
[分享]cev-2017-8890 poc [三星s7 测试通过]
void ip_mc_drop_socket(struct sock *sk) { struct inet_sock *inet = inet_sk(sk); struct ip_mc_socklist *iml; struct net *net = sock_net(sk); if (!inet->mc_list) return; rtnl_lock(); while ((iml = rtnl_dereference(inet->mc_list)) != NULL) { struct in_device *in_dev; inet->mc_list = iml->next_rcu; in_dev = inetdev_by_index(net, iml->multi.imr_ifindex); (void) ip_mc_leave_src(sk, iml, in_dev); if (in_dev) ip_mc_dec_group(in_dev, iml->multi.imr_multiaddr.s_addr); /* decrease mem now to avoid the memleak warning */ atomic_sub(sizeof(*iml), &sk->sk_omem_alloc); kfree_rcu(iml, rcu); // 1 2 3 4 } rtnl_unlock(); } |
|
[分享]cev-2017-8890 poc [三星s7 测试通过]
请问明明是double free的洞,为什么crash的位置在ip_mc_leave_src+0x28/0xa8呢? 具体调试了一下,crash时由于源码中ip_mc_leave_src中的psf不为0,但是又不是一个合法的地址,因此导致空指针引用。 根据ADLab的漏洞分析,第二次free应该是在ip_mc_drop_socket中的kfree_rcu才对呀。ip_mc_leave_src在kfree_rcu之前,也就是还没有调用kfree_rcu就crash了。 static int ip_mc_leave_src(struct sock *sk, struct ip_mc_socklist *iml, struct in_device *in_dev) { struct ip_sf_socklist *psf = rtnl_dereference(iml->sflist); int err; if (!psf) { /* any-source empty exclude case */ return ip_mc_del_src(in_dev, &iml->multi.imr_multiaddr.s_addr, iml->sfmode, 0, NULL, 0); } err = ip_mc_del_src(in_dev, &iml->multi.imr_multiaddr.s_addr, iml->sfmode, psf->sl_count, psf->sl_addr, 0); RCU_INIT_POINTER(iml->sflist, NULL); /* decrease mem now to avoid the memleak warning */ atomic_sub(IP_SFLSIZE(psf->sl_max), &sk->sk_omem_alloc); kfree_rcu(psf, rcu); return err; } |
|
|
|
为什么不在玄武待着呢?
|
|
|
|
[求助][已解决] 堆溢出 house of spirit 关于gcc编译后的栈空间变量顺序问题
您好,不是很明白包在stuct里是什么意思。可否具体解释一下呢?我的目标是希望,b数组可以在低地址,变量 c在高地址。 |
|
[求助]fscanf从文件中读取字符串被截断
假设MessageBoxA的地址是0x77D5050B。 0B也会被截断,导致后面的内容读不进去,但是0F不会。 所以遇到截断字符,可以先用0F代替。待字符串全部读入之后,用OD动态调试的时,修改回0B即可。 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值