利用杀软对感染型病毒的清除过程中对文件名过滤的不严格实现任意目录写任意文件.(包括杀软目录, 但杀软目录下的文件无法覆盖)
最近搞polyransom.a. 这个感染型病毒会把目标文件整个包起来,然后执行时会释放, 而且它会保留原文件名信息.
之后我用各杀软清理了下被感染的文件,发现杀软会在当前目录下以原文件名创建恢复后的文件. 这时,我想到,如果保留的文件名中包含路径分隔符, 然后我再弄个目录符号链接, 岂不是可以利用杀软往任意目录下写任意文件了? 而且还是利用杀软的清除功能, 把内嵌的文件放到了我想要的位置!
那么,关键就在,杀软会不会对文件名信息进行检查. 经过试验发现, 不会,所以就有了这篇文章.
随意取一个能查杀的polyransom.a样本, 将路径信息更改成b\fuck.exe
原始文件名:
可以看到文件名为cuninst.exe, 后面紧跟着文件的PE数据. 此处是解密后的数据.
重跑程序,来到解密之前, 将数据填成解密之后的数据. 修改解密为加密流程, 得到新文件名的解密前数据:
od的显示有点bug, \fuck.exe前面的b也应该是被选中的. 得到的数据为:
利用010editor修改文件数据:
将修改完的文件跑下,看是否修改成功:
至此,样本构造完成.
首先, 根据杀软安装目录,创建目录符号链接:
然后把构造的样本放到C:下, 选择查杀样本.
果然, 成功了.
同理,测试,得到结果为:
同理,测试,得到结果为:
你在卡饭论坛上上传了一个这样的样本, 让大家帮你测测看能不能查杀, 于是....
只需在样本所在目录下用mklink /d b <targetdir>,然后用杀软扫描样本, 就可以将文件释放到targetdir中.
最后于 5小时前 被bjtwokeight编辑 ,原因: 增加目录
|
|
---|---|
|
放到自启动目录,杀软会自己报自己的警么 |
|
|
|
能放dll吗 |
|
楼主真的风骚 |
|
360就一狗屎,上次去学校后边的复印店用U盘打印了点东西,结果他们安着360还是未能查出来。 老牌Norton好,饭桶当自强。 最后于 1天前 被ninebell编辑 ,原因: |
|
震惊, 一男子每次踢完杀软的场子以后就 溜了溜了... |
|
都行 |
|
越坏 能放dll吗 都行 |
|
ninebell 360就一狗屎,上次去学校后边的复印店用U盘打印了点东西,结果他们安着360还是未能查出来。回家电脑硬盘灯就亮,还好反映快,马上拔了。网上下载各种杀毒软件全是能检测到,说重启后干净。结果全是饭桶。换上 ... 复印店一般比较破, 然而每所大学(尤其是重点大学)里面或周围都会有这么一个店. 复印店的员工, 来复印的学生和教师, 安全意识基本没有. 即便有规定U盘绝不可以插内部电脑, 但有时候就是会插, 所以有人会选择这个作为突破口, 再把自己的代码伪装成以前发现过的古老病毒, 这样即便被查杀, 也不会引起重视. |
|
我比较关心你是怎么解密的 又是怎么把自己的EXE放里面的? |
|
没看懂,似乎省略了很多上下文 |
|
广告模块我最强、 |
|
靴子 我比较关心你是怎么解密的 又是怎么把自己的EXE放里面的? 简单的办法就是你弄好自己的exe, 然后让polyransom.a感染你, 之后你把信息中的名字改了就行. |
|
xlshn 没看懂,似乎省略了很多上下文 其实就是这样的过程, 假设以下是杀软的清除代码: // szdir: 当前扫描目录 int fuckpolyransom(wchar_t* szdir) { //得到被感染文件的原始文件名 wchar_t* originalfilename = GetInfectedFileOriginalFileName(xxxx); wchar_t* fulloriginalfilename = (wchar_t*)malloc(sizeof(wchar_t)*(32767)); //没有对originalfilename进行检查是否包含'\\','//', 导致了问题. StringCbPrintfW(fulloriginalfilename,32767*sizeof(wchar_t),L"%s\\%s",szdir,originalfilename); CreateFile(fulloriginalfilename,xxxx); return 0 } |
|
这个思路有意思 |
|
说不定已经有牛逼大佬在用了. 细思极恐. |
|
NIU |
|
喔嚯,不明觉厉 |
返回