这个是系统架构,下面是测试代码「hello.c」:
char shellCode[] = "\xeb\x1a\x5e\x48\x31\xff\x48\x31\xd2\x48\x31\xc0\x66\xff\xc7\xb2\x0d\xb0\x01\x0f\x05\x48\x31\xff\xb0\x3c\x0f\x05\xe8\xe1\xff\xff\xff\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21\x0a";
int
main (void) {
long p;
*(&p+2) = (long)shellCode;
return 0;
}
奇怪了就,gcc 生成目标文件,然后看了下节头:
明摆着就就一个text 段可执行,居然真把shellcode 给执行了,这货明摆着在「.data」 里:
话说这地方真是费解了,写这个程序主要是看BINARY HACKS 的GNU 编程HACK 那一章,说2.6 之后都已经打了补丁,成了不可执行栈了,需要用objcopy 为数据所在的段增加X 标记才可以。于是手贱参考shellcode 的原理试了下,结果成了这个样子。。。
有空再回头看下,今晚要补完《濑户之花嫁》。
另外自己写的那段shellcode 是X86_64 版本的,就是调用了个write 系统调用,吐槽下X86_64 汇编系统调用的寄存器约定改的。。参数上来就用到rdi,给di 赋值1,为了避免产生\x0 都要换成xorq 和incw。。。
对于字符串的处理用的下面的方法:
_start:
jmp begin
shellCode:
popq %rsi # 出栈字符串地址
begin:
call shellCode
.ascii "string"
完了之后编译下,并且反汇编得到shellcode:
# as -o write.o write.s
# ld -o write write.o
# objdump -d write | perl -E '/.+:\s([a-f0-9 ]+).+/ and $_=$1 and s/\s+/\\x/g and print for (<>); print "\b\b "'
执行第三行的管道会得到shellcode:
eb\x1a\x5e\x48\x31\xff\x48\x31\xd2\x48\x31\xc0\x66\xff\xc7\xb2\x0d\xb0\x01\x0f\x05\x48\x31\xff\xb0\x3c\x0f\x05\xe8\xe1\xff\xff\xff\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21\x0a
perl 实在用的不熟,前头少个「\x」得自己加上
话说X86 的架构得自己重写代码,因为调用约定全改了。。它好好的为什么要改呢。。?
分享到:
相关推荐
从github上下载的protoc-3.11.2-linux-x86_64.zip版本,由于国内下的太慢,亲自尝试了好多遍才下载成功,需者自取。
cmake-3.11.2-Linux-x86_64
cmake-3.11.2-Linux-x86_64.tar
cmake-3.11.2-Darwin-x86_64
cmake-3.11.2-Darwin-x86_64.tar
python库。 资源全名:pymongo-3.11.2-cp27-cp27m-manylinux1_x86_64.whl
python库。 资源全名:pymongo-3.10.0-cp27-cp27mu-manylinux1_x86_64.whl
python-3.11.2-amd64安装包
pymongo-3.11.2-cp36-cp36m-win32
cmake-3.11.2-win32-x86
cmake-3.11.2-win32-x86
python-3.11.2-amd64 windows 安装包,在 Python 3.11 中,有许多单独的性能改进,最大的一个新功能是自适应解释器,由于对象的类型很少更改,解释器现在尝试分析正在运行的代码,并用类型特定的字节码替换常规字节...
赠送原API文档:aliyun-sdk-oss-3.11.2-javadoc.jar; 赠送源代码:aliyun-sdk-oss-3.11.2-sources.jar; 赠送Maven依赖信息文件:aliyun-sdk-oss-3.11.2.pom; 包含翻译后的API文档:aliyun-sdk-oss-3.11.2-javadoc...
DB Browser for.SQLite-3.11.2-win64 开源好用的SQLite管理器 , 最新版本 3.11.2 .
赠送原API文档:aliyun-sdk-oss-3.11.2-javadoc.jar; 赠送源代码:aliyun-sdk-oss-3.11.2-sources.jar; 赠送Maven依赖信息文件:aliyun-sdk-oss-3.11.2.pom; 包含翻译后的API文档:aliyun-sdk-oss-3.11.2-javadoc...
用于在kubernetes集群中部署helm包管理工具。版本为3.12.3。...tar -zxvf helm-v3.12.3-linux-amd64.tar.gz 3. 复制到PATH路径 mv linux-amd64/helm /usr/local/bin/helm 4. 版本验证 helm version
sqlite3的可视工具,安装后可以直接对sqlite3数据库进行操作
python-3.11.2-amd64.exe
工具包为SQlite数据库工具,可对Sqlite的DB数据库文件进行创建,编辑,修改,查看,导出列表等相关常用功能,当前工具版本为3.11.2 64位。