关于sysdiag的利用

背景

因为之前装了某绒,某绒又有一个比较好用的ark工具某绒🗡,想着应该有机会利用一下它的驱动。

接着在driver下面找到了它的驱动,简单分析了一下,发现有可以利用的ioctl。这里有duphandle,操作和之前的procexp利用一样复制system的物理内存句柄就行了。

 问题

好歹是安全公司写的代码怎么可能没有校验呢,直接打开\\\\.\\Sysxxxx::SysUtils返回失败。接着继续看一看是哪里返回的失败,动态调试之后发现是这里返回的失败,其中sub_FFFFF807117C9060函数通过pid返回的是它自己记录的进程的相关结构体,+0x538标志的是当前进程有没有操作驱动的权限,为0调用返回才会成功。

 

 那对应的进程数据又是在哪里填写的呢,这里利用ida的search Immediate查找0x538,只有sub_FFFFF807117B3CF0赋值的eax,才有可能是0,下面的赋值为-1明显不符合要求。

这里的值是CheckProcess_FFFFF807117D61B0传出来的

 这里在进入看看函数的内部情况,很明显读取文件,目测是检验签名以及其他东西

 

 

 比如对比了pe的某段数据是否包含HRBR,其中sub_FFFFF807117A72E0中对比的是一段加密的数据,里面函数很多,具体对比的加密在哪我也不想找(有懒人!)。

 

利用

既然对比了pe文件的内容,那我用你自己的进程不就行了,这里测试注入到对应的进程,很明显安全软件都不会让你那么任意的注入。

 接着尝试傀儡进程(这里利用的是CrashDump.exe有签名并且没有dll依赖比较好操作),会发现在调用SetThreadContext失败。

 那怎么解决呢,其实也很简单,既然你不让我修改入口的,就把入口点设置到和你进程一样就行了,之前的代码用nop填充。

然后你会发现这里+538之后返回的值居然还是1,那他是什么时候被赋值的呢?

 经过简单的调试之后发现,sub_FFFFF807117A72E0的调用不通过,但是计数器+1了。

 后来点了点它的相关进程,发现只有HRSword.exe和sysdiagPoc.exe(x64)才会和驱动通信,所以这里选择HRSword在试试看,由于入口点在11A64d,所以一开始我也不想选它,写个nop文件都要写100多万行,vs编辑还任意崩溃,这里还是用notepad++编辑比较给力。

 最后成功复制到了物理内存的句柄,接下来就和procexp的利用一样了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值