在Ubuntu下安装系统以后第一个创建的用户默认是在sudo用户组的,所以以sudo执行命令没有问题。
http://www.codeproject.com/Articles/13572/Starting-a-Process-from-KernelMode
void ApcLoadDll(PVOID NormalContext, PVOID SystemArgument1, PVOID SystemArgument2); void ApcLoadDllEnd(); PMDL pMdl = NULL; void ApcKernelRoutine( IN struct _KAPC *Apc, IN OUT PKNORMAL_ROUTINE *NormalRoutine, IN OUT PVOID *NormalContext,
在上一篇博文《驱动开发:内核通过PEB得到进程参数》中我们通过使用KeStackAttachProcess附加进程的方式得到了该进程的PEB结构信息,本篇文章同样需要使用进程附加功能,但这次我们将实现一个更加有趣的功能,在某些情况下应用层与内核层需要共享一片内存区域通过这片区域可打通内核与应用层的隔离,此类功能的实现依附于MDL内存映射机制实现。
第一步 regedit 按win+R键打开运行窗口>>回车 📷 进入注册表如下页面: 📷 第二步 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Ndisuio 输入上面地址 📷 查看DisplayName里的数值是否为:NDIS Usermode I/O 📷 📷 Protocol并修改Start里的值为:2 📷 📷 命令提示符(cmd):输入:netsh winsock reset 你必须重新启动计算机才能完成重置
内核模式的APC并不要求从目标线程获得许可就可以运行在该线程的环境中,而用户模式的APC必须先获得许可才可以。内核模式的APC无需目标线程的干涉或者同意,就可以中断该线程并执行一个过程。
前两篇漫谈中讲到,除ntdll.dll外,在启动一个新进程运行时,PE格式DLL映像的装入和动态连接是由ntdll.dll中的函数LdrInitializeThunk()作为APC函数执行而完成的。这就牵涉到了Windows的APC机制,APC是“异步过程调用(Asyncroneus Procedure Call)”的缩写。从大体上说,Windows的APC机制相当于Linux的Signal机制,实质上是一种对于应用软件(线程)的“软件中断”机制。但是读者将会看到,APC机制至少在形式上与软件中断机制还是有相当的区别,而称之为“异步过程调用”确实更为贴切。
假设你已经通过《perf:一个命令发现性能问题》中的方法或者使用profiler分析,已经发现内存分配是性能瓶颈:
Linux系统中可以有多个用户,Linux中有用户组的概念,每个用户最少要属于一个用户组,当然也可以属于多个用户组。/home目录下有各个用户对应的家目录,当用户登录时,会自动进入到自己的家目录。 Linux是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
工作需要必须使用mstsc(Microsoft terminal services client)连接生产服务器,之前因为不知什么原因,mstsc开始很卡,所以用了teamviewer一段时间,感觉还是不如mstsc稳定
在上一篇博文《内核通过PEB得到进程参数》中我们通过使用KeStackAttachProcess附加进程的方式得到了该进程的PEB结构信息,本篇文章同样需要使用进程附加功能,但这次我们将实现一个更加有趣的功能,在某些情况下应用层与内核层需要共享一片内存区域通过这片区域可打通内核与应用层的隔离,此类功能的实现依附于MDL内存映射机制实现。
CountdownEvent 是一个同步基元,它在收到一定次数的信号之后,将会解除对其等待线程的锁定。 一般用于必须使用 ManualResetEvent 或 ManualResetEventSlim 并且必须在用信号通知事件之前手动递减一个变量的情况,简单的说就是主要用在需要等待多个异步操作完成的情况。
这2套工具的受众广泛、稳定性久经考验,sysinternals已被微软收购,可以认为是微软出品
关于Hunt-Sleeping-Beacons Hunt-Sleeping-Beacons项目的主要功能是帮助广大研究人员在运行时或其他正在运行进程的上下文场景中识别休眠的Beacon。为了实现这个目标,我们通过观察发现,Beacon会在回调过程中尝试调用sleep函数。在调用sleep的过程中,会将线程的状态设置为“DelayExecution”,而我们就可以将其作为第一个指标来识别线程是否在执行某个Beacon。 将所有状态为“DelayExecution”的线程全部枚举出来之后,我们就可以通过多种
在前几篇文章中LyShark通过多种方式实现了驱动程序与应用层之间的通信,这其中就包括了通过运用SystemBuf缓冲区通信,运用ReadFile读写通信,运用PIPE管道通信,以及运用ASYNC反向通信,这些通信方式在应对一收一发模式的时候效率极高,但往往我们需要实现一次性吐出多种数据,例如ARK工具中当我们枚举内核模块时,往往应用层例程中可以返回几条甚至是几十条结果,如下案例所示,这对于开发一款ARK反内核工具是必须要有的功能。
Linux是一个多用户操作系统,任何一个想要使用系统资源的用户,必须先向管理员申请账号,再以申请的账号进入系统。因此账号类型又被分为一下 两类:
用两台机器做实验,一台作为服务端(linux-001 192.168.141.128),一台作为客户端(linux-02 192.168.141.129)
收到用户反馈,我们的app在科大讯飞的定制系统上,运行卡顿。 1、表现为点击进入应用后,用户点击无响应,系统提示ANR。 2、Debug 运行无卡顿, Release 运行卡顿
/etc/passwd(冒号分割为7列字段) root : x : 0 : 0 : root : /root : /bin/bash 用户名 : x : uid : gid : 描述 : HOME : shell
方式一:A 项目做着做着,发现里面有一条指令 sleep,也就是要休息一下,或者在等待某个 I/O 事件。那没办法了,就要主动让出 CPU,然后可以开始做 B 项目。
温馨提示: 本文总共3551字,阅读完大概需要6-8分钟,希望您能耐心看完,倘若你对该知识点已经比较熟悉,你可以直接通过目录跳转到你感兴趣的地方,希望阅读本文能够对您有所帮助,如果阅读过程中有什么好的建议、看法,欢迎在文章下方留言或者私信我,您的意见对我非常宝贵,再次感谢你阅读本文。
你可曾想过在IOS设备上运行Linux系统?或者用shell来传输文件、编写脚本,又或者使用Vi来开发代码?
最近有在做一个东西,需要在ring0下拦截进程启动并注入DLL(dll用于hook ring3下的API),很多种实现方法,此处采用sudami大神提供的思路,另一位大侠提供的参考代码。虽然这个东西没什么技术含量,但对于我这种刚入门内核的人还是搞了很久才做出来,蓝屏很多,要注意很多细节.
渗透测试人员都习惯一台笔记本走天下,但有的时候笔记本还是太大,一些地方用笔记本做渗透测试还是太招摇,而且有的时候也不会随身都带笔记本。这时如果可以利用随身携带的手机进行渗透,想想都很酷。众所周知,手机版的kali就是Kali NetHunter,但这神器一是要刷机,二是适配的手机非常少,三是即使刷成功了,那你手机上原来的各种软件就不那么好用了。今天跟大家分享一下如何在手机(Android&IOS)上不刷机、免root安装nmap、sqlmap、msf等工具,将手机改造成移动渗透利器。
在main.cc中,当我们选择-x选项时,这段代码将-x之后的参数设置为userProgName,即我们需要执行的用户程序。
哪些服务可以禁用、应该禁用、不能禁用,具体情况还需要结合业务场景而定,不可一概而论。
当一个设备动态的加入到系统时候(比如常见的将U盘插入到PC机器上), 设备驱动程序就需要动态的检测到有设备插入了系统,就需要将此事件通知到用户层,然后用户层对这一事件做响应的处理,比如加载USB驱动,更新UI等。而将此事件通知到用户层就需要某种机制,典型的就是mdev hotplug和udev。关于udev和mdev hotplug可以在上篇文章有解释。Linux系统对uevent机制的具体实现是建立在设备模型的基础上的,通过kobject_uevent函数实现。
模块是程序加载时被动态装载的,模块在装载后其存在于内存中同样存在一个内存基址,当我们需要操作这个模块时,通常第一步就是要得到该模块的内存基址,模块分为用户模块和内核模块,这里的用户模块指的是应用层进程运行后加载的模块,内核模块指的是内核中特定模块地址,本篇文章将实现一个获取驱动ntoskrnl.exe的基地址以及长度,此功能是驱动开发中尤其是安全软件开发中必不可少的一个功能。
When running in Kernel mode, it may be necessary to inject code into a User-land process. There are two ways that Asynchronous Procedure Calls (APCs) can be used to accomplish this goal.
作者:VXK/CVC.GB 时间:2005-02-05 每次上driverdevelop总看到有人问怎么在Ring0下调用Ring3的代码—— Ring3使用Ring0已经是地球人全知道的事情了,但是ring0下使用ring3的代码 恐怕很少有人知道,Ratter和Benny这两个高人以及Elzc的作者Elzcor各自提出 过一种方法。总结起来就是三种方法,Zombie在2004年也提出过一个方法看起 来像是Ratter和Elzcor的方法结合而成~ 当然说其本质都是一种思想把ring3代码搞到ring3的空间去执行,听起来 大家也好像有所明白了吧,Benny的方法是在Ring0的向Ring3进程插入代码执行, Ratter则是Hook KAPIZ等待用户层调用发生把ring3代码放回Ring3空间,利用 KeUserModeCallBack来执行,Elzcor则是自己建立一个进程把代码内存感染到 进程执行。Zombie取两家之长搞的~。 今天我来向大家介绍的更像是Ratter和Benny的方法结合,对于Benny的方法, 我不完全采用,我采用的思想仍然是代码放回Ring3空间~ 首先无论如何我们都要有一个进程~ 习习~Windows提供强大的kernel函数帮我们虐待用户~ PsSetCreateProcessNotifyRoutine摄定好NotifyRoutine在创建进程时我们就 可以yy进程了~ 通过DDK文档MSDN的大叔的帮助,这个函数 PsSetCreateProcessNotifyRoutine有两个参数 返回值是NTSTATUS型,第一个参数是回调函数NotifyRoutine,第二个参数是Bool型的 如果第二个参数为False表示设定NotifyRoutine,为True就是取消~ NotifyRoutine的形式如下 NotifyRoutine proc dwParentId:DWORD, dwProcessId:DWORD, bCreate:BOOL 这样我们就可以获得一个进程了~~xixi~~ 我们的NotifyRoutine只处理dwProcessId和dwProcessId,对bCreate不用理,通过使用ps 函数PsLookupProcessByProcessId得到PEPROCESS结构(得不到结构的不处理),再取进程Name 如果是Explore且插入标识无就开始我们的插入~(选Explore的原因我就不用说了吧?) 插入时我采用Ratter的方法,于是乎就要用KeAttachProcess,Attach到进程然后开始 工作~~呵呵~~ 插完了就用回调CallBackUserMode~~然后DetachProcess... KeUserModeCallBack的参数 NTSTATUS KeUserModeCallback ( IN ULONG ApiNumber, IN PVOID InputBuffer, IN ULONG InputLength, OUT PVOID *OutputBuffer, IN PULONG OutputLength ) 可能看不出来怎么使它返回UserMode执行任意代码,但是如果你看看win2ksrc/private/ntos/ke/i386/ 下的callback.c和callout.asm就会发现世界真奇妙~~~居然KiCallUserMode回调的是~~~~~xixi~~~~ 我不说了,大家应该自己研究一下吧~ 另外我提一下参数传递的问题,这里使用KeUserModeCallBack必须要用有效的InputBuffer和OutputBuffer 当KeUserModeCallBack发生时,调用我们的Ring3代码参数传入的方式好像是PUSH进来的 KiCallUserMode中回调USER的时KiServiceExit回自动的飞向我们的代码~ 类似发生下面的事情~ ( ;这些代码并非真的在KiCallUserMode里存在~ ;只是我个人的猜测,因为softice跟到最后到处是[ebx+xxx],[esi+xxx]这样的东西~ ;实在难说~做后使用jmp _KiServiceExit返回ring3的代码更是头大~ ;不过分析的说可能是栈传入参数~ ;如果看ntos/ke/i386/下的分析,估计会更头大~它的栈传递和stack变换等等搞的很晕~~ ;不过可以肯定的说,就是已经到了ring3了,我们自己做个检测不就行了? ;hehe~具体到底是怎么传递的呢?大家做个检测吧,我不说了~ ;正确的函数传递方式:Kernel是怎么运行我们的函数的~ push Outlength push lpOutBuffer push Inlengt
本文关键字:将桌面环境,toolchain设计为subsystem,rootfs as Xaas,rootfs层次的虚拟化,非Virtual OS Infrastructure,第二PC,模块化机箱,第二PC,存储,计算分开机箱,nas另置主机,mirror os,mateos,自建icloud,本地远程通用的云os,云app
强制完整性控制(Mandatory Integrity Control,MIC),它是对 discretionary access control list 的补充,并且是在 DACL 之前检查的
堆有rwx权限,下标溢出写got函数为堆地址,在两个堆块上拼接shellcode调用read读入shellcode进行orw拿flag
在某些时候我们的系统中会出现一些无法被正常删除的文件,如果想要强制删除则需要在驱动层面对其进行解锁后才可删掉,而所谓的解锁其实就是释放掉文件描述符(句柄表)占用,文件解锁的核心原理是通过调用ObSetHandleAttributes函数将特定句柄设置为可关闭状态,然后在调用ZwClose将其文件关闭,强制删除则是通过ObReferenceObjectByHandle在对象上提供相应的权限后直接调用ZwDeleteFile将其删除,虽此类代码较为普遍,但作为揭秘ARK工具来说也必须要将其分析并讲解一下。
在某些时候我们的系统中会出现一些无法被正常删除的文件,如果想要强制删除则需要在驱动层面对其进行解锁后才可删掉,而所谓的解锁其实就是释放掉文件描述符(句柄表)占用,文件解锁的核心原理是通过调用ObSetHandleAttributes函数将特定句柄设置为可关闭状态,然后在调用ZwClose将其文件关闭,强制删除则是通过ObReferenceObjectByHandle在对象上提供相应的权限后直接调用ZwDeleteFile将其删除。
注意:本文分享给安全从业人员、网站开发人员以及运维人员在日常工作防范恶意攻击,请勿恶意使用下面介绍技术进行非法攻击操作。。
Linux Signal想毕很多人都用过,比如在命令行下想要结束某个进程,我们会使用kill pid或者kill -9 pid,其实就是通过给对应的进程发送信号来完成。
控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和 操作控制器OC(Operation Controller) 等组成,对协调整个电脑有序工作极为重要。它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。操作控制器OC中主要包括:节拍脉冲发生器、控制矩阵、时钟脉冲发生器、复位电路和启停电路等控制逻辑。
从c代码转的,备份一下,里面有硬编码 unit MyDriver; {$HINTS OFF} {$WARNINGS OFF} interface uses nt_status, ntoskrnl, native, winioctl, fcall, macros; type TKILL = record PID: DWORD; XP_PsGetNextProcessThread: dword; end; PKILL = ^TKILL; const DeviceName = '\Device\KPTes
SSDT 的全称是 System Services Descriptor Table,系统服务描述符表。
定制VIM编辑器属性方便编写文档,配置文件地址为/etc/vim/vimrc,该文件会在启动时读取,该命令为底行模式命令,命令写入文件后使用时不必重复键入命令
使得非特权概要文件能够使服务(在SYSTEM安全上下文中运行)删除任意目录/文件的漏洞很少发生。由于没有使用这种原始技术的特权升级的既定路径,因此安全研究人员通常会忽略这些漏洞。偶然地,我在Windows错误报告服务中使用了一个不太可能的怪癖找到了这样的路径。尽管一些Twitter用户已要求撰写文章,但技术细节既非出色也不新颖。
领取专属 10元无门槛券
手把手带您无忧上云