1.CTFer成长日记16:用动态生成的禁止脚本代码绕过程序的静态安全检查——shellcode敏感字节检测绕过
2.delphiççä¸å¯ä»¥åshellcodeä¹
3.å
³äºlinuxå½ä»¤è¡ï¼shellå½ä»¤ï¼viå½ä»¤
CTFer成长日记16:用动态生成的代码绕过程序的静态安全检查——shellcode敏感字节检测绕过
敏感字节检查绕过的基本原理,关键在于利用程序执行的码停动态特性。在执行时,禁止脚本若目标程序能允许某段内存被读写执行,码停我们就能尝试将shellcode注入,禁止脚本借此劫持程序执行流至shellcode首地址,码停解所有源码实现ret2shellcode攻击。禁止脚本
然而,码停目标程序往往会对输入进行检查,禁止脚本发现敏感字节序列,码停如syscall、禁止脚本int等指令对应的码停机器码时,会拒绝输入,禁止脚本php strstr源码导致攻击失败。码停解决之道在于,禁止脚本编写一段可动态生成shellcode的代码。此代码本身不是shellcode,但能在执行中自动生成shellcode并执行,以此绕过敏感字节检查。chinaz banner源码
理解ret2shellcode攻击过程后,我们能设想编写代码动态生成shellcode。具体方法是删除或替换敏感字节,并在执行时恢复。通过对比原始与修改后的shellcode,我们发现,彩虹主机源码关键在于修改自身shellcode的代码。
为了生成直接可用的shellcode,需修改原始shellcode,确保满足特定条件,即敏感字节序列指令在执行前恢复。将用于修改自身的flink state源码shellcode片段置于shellcode头部,确保敏感字节指令被执行前恢复,实现绕过。
接下来,通过实例题验证上述方法的有效性。自定义源代码,使用特定命令编译,关闭程序的防御机制。通过内存布局,利用shellcode长度与main函数返回地址之间的偏移,实现攻击。
针对原始shellcode中的敏感字节,利用pwntools提供的shellcraft.sh()函数修改,首先删去syscall指令,接着在汇编代码头部添加修改自身shellcode的代码,尾部补全syscall指令对应的机器码。通过异或操作,将敏感字节序列转换为可接受的序列。
最后,解决的问题是获取shellcode尾部地址。通过输出shellcode首地址的程序,结合生成等效shellcode,利用脚本获取机器码长度,最终编写攻击脚本完成整个过程。
delphiççä¸å¯ä»¥åshellcodeä¹
ä¸è¬çShellCodeé½æ¯ï½ASMåCåçï½Delphiä½çå°æ¯å¾å°æå ·ä½ä¾å å ¶å®ä½¿ç¨Delphiåä¸æ¯ä¸å¯è½ï½å°±æ¯éº»ç¦ï½(Delphiçï½BASMä¹ä¸å¤ªçµæ´»ï½è³å°ææè§æ²¡æç´æ¥ä½¿ç¨TASMç½) ä¸è¿è¿æ¯åä¸ä¸ªç©ç©å§ï½è¿éä» ä» ä½ä¸ªæ¼ç¤ºä»£ç ï½ ä»¥ä¸ShellCodeæºä»£ç :
å ³äºlinuxå½ä»¤è¡ï¼shellå½ä»¤ï¼viå½ä»¤
shellå½ä»¤å°±æ¯ä½ 说çç»ç«¯çå½ä»¤ï¼viåvimé½æ¯ä¸ç§ç¼è¾å¨ï¼å°±æ¯åè®°äºæ¬ä¸æ ·çä¸è¥¿ï¼ä¸è¿è¿ä¸ªç¼è¾å¨å¤ªå¼ºæäºï¼è½å¹²å¾å¤äºæ ï¼æ£å表达å¼ï¼é«çº§å符串å¹é æ¿æ¢ï¼æç´¢æ¿æ¢ï¼è¯æ³é«äº®ï¼çç好å¤å¥½å¤åè½ï¼è¿æ个emacsåä»å·®ä¸å¤ï¼é½æ¯è¿æ ·çï¼ï¼ä»¥è³äºæç人说ï¼ä¸çä¸çç¨åºååä¸ç§ï¼ä¸ç§ç¨viä¸ç§ç¨emacsï¼å©ä¸çæ¯ä¸ç§ï¼å£å¼ ä¸ï¼
shellå½ä»¤å°±æ¯ç»ç«¯å½ä»¤ï¼shellç¼ç¨å ¶å®åwindowsçæ¹å¤çå·®ä¸å¤ï¼åºå«çæ¯ï¼shellçè¯è¨åè½æ¯æ¹å¤ç强大