智能硬件PWN设计
qemu中基于linux的mips32位程序
版主,你好:
原题已经在
https://bbs.pediy.com/thread-228478.htm
发了,但是,因为原题有京东字样。所以对题目做了修改,同时,修复了原题有多个答案的bug,参加此次看雪·TSRC CTF 2018 防守赛。
1. 题目答案: 3f43ed6ff36724ca56e16038e692b5d75f1524ad31c1c5667111e3d30e553e0e
2. 题目设计说明:
题目使用素域64bit弱椭圆曲线,曲线参数如下:
p: "8d5b53dd2e70fc93",
a: "348020e40410f914",
b: "22bb96de83b3eb71",
Gx: "1323f564d7976e65",
Gy: "2a193d3e7a6b1e29",
n: "8d5b53dd4b7d51eb",
h: "01"
该参数可以通过查看二进制文件的字符串直接获得;
答案分为两部分:
第一部分为根据字符串"Welcome to KanXue CTF 2018"使用椭圆曲线算法(ECDSA)进行签名所得到的签名值的R和S.
生成R和S需要曲线私钥, 为了减少破解时间,题目使用弱私钥0xF377F,私钥可以使用暴力穷举在1分钟内得到;
公钥可以通过反汇编程序得到.同时,(因为ECC可以有不同的签名)为了防止出现多组答案,会对输入的头16个字符
和xor加密后的答案进行比较。另外,程序中有关于ECDSA的提示:"hint:k is 5532091271463842210;", 其中k值是ECC标准
X9.62中用于计算签名R值的k。
第二部分为椭圆曲线上的点A的X坐标和Y坐标, 该点与椭圆曲线上的固定点B相加得到椭圆曲线上的固定点C;
求该点的办法为执行椭圆曲线减法: A=C-B
点B和点C的值可以通过查看二进制文件的字符串直接得到.
题目运行时需要先安装qemu。
题目运行命令如下:
qemu-system-mips -kernel ./vmlinux -hda rootfs.img -append "root=/dev/sda console=ttyS0" -serial stdio -m 256
题目提供两个文件:
rootfs.img: 文件系统文件
vmlinux linux内核文件
需要反编译的文件在文件系统/bin/kanxuectf2018中,大小为246k,使用mips指令集
文件系统为ext4文件格式.
题目有两种反调试手段:
# ptrace反调试
# SIGTRAP反调试
3. 破解思路
3.1 通过反汇编拿到曲线参数, 曲线公钥,C点坐标, B点坐标;
3.2 暴力穷举得到私钥,进行签名,得到答案第一部分;
3.3 C- B 得到答案第二部分.
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。
最后于 2018-12-27 13:20
被kanxue编辑
,原因: