胸部整形

首页 » 常识 » 诊断 » AWDPwn漏洞加固总结
TUhjnbcbe - 2025/4/20 17:48:00

AWD简介

AWD(AttackWithDefense,攻防兼备)模式需要在一场比赛里要扮演攻击方和防守方,利用漏洞攻击其他队伍进行得分,修复漏洞可以避免被其他队伍攻击而失分。也就是说,攻击别人的靶机可以获取Flag分数时,别人会被扣分,同时也要保护自己的主机不被别人攻陷而扣分。

Patch-PWN

各家awd平台检查机制各不相同,原则上是只针对漏洞点进行patch加固,也就是最小修改加固。以下总结不需要改动文件大小、针对漏洞点进行patch的几种漏洞类型。

Patch资料

跳转指令

无符号跳转

有符号跳转

Patch-整数溢出

Scanf以longint长整形读取输入到unsignedint变量v2中,然后将v2强制转为int再与int48比较。

但从scanf读入一个负数时,最高位为1,从unsignedint强制转换为int结果是负数,必定比48小,在后面read读入会造成栈溢出。

Patch方法

将第9行的if跳转汇编指令patch为无符号的跳转指令,具体指令参考跳转指令。

使用keypatach进行修改:

jle--jbe

Patch-栈溢出

对于栈溢出加固,x64更容易一些,因为是使用寄存器传参,而x86使用栈传参,需要用nop等保持加固前后的空间不变。

x64

Patch方法

是第三个参数,存储寄存器是rdx,找到给rdx传参的汇编指令进行patch

使用ida默认修改插件修改(Edit-PatchProgram-Changeword),也可以用keypatach:

0x64是长度

0xBA是操作符

0x64--0x20

x86

不需要对齐

找到压栈的指令,修改压入的数值

修改数值需要补上0x

这里修改前size为2,修改后size也为2,所以这题patch不需要用nop保持size

需要对齐

找到压栈的指令,修改压入的数值

直接修改0x20后,size长度不对齐,会引起栈空间变化,需要用nop进行对齐:

更方便快捷方法是勾选NOPspaddinguntilnextinstructionboundary进行自动填充。

Patch-格式化字符串

修改函数

将printf改为puts,将call的地址改为putsplt

1
查看完整版本: AWDPwn漏洞加固总结