CTF--2015中国西安电子科技大学XDCTF网络安全大赛之pwn

2019-04-13 15:02发布

write up

0x01 基本信息


本人初学,可能本题解答对大神来说,有些繁琐。(大神可以忽略飘过)。 分享在此,方便自己,也方便他人。 文件: xd_jwxt
大小: 8276 字节
修改时间: 2016年7月13日, 16:22:24
MD5: 07BE390A9328A365549A27D400462B59
SHA1: C0175B97E12670373E793F5633C51637B9C809E0
CRC32: 37CFC2B4
LINUX x86 运行显示如下




0x02 具体分析


测试随意输入数字2 接收后直接退出。得先登录,于是ida载入分析

再查看字符串

看到主菜单,寻找登录成功条件。


31337登录成功。进入函数注意关键位置


Sub_804883D函数 编码转换
Sub_80488DD函数
范围判断,必须是可见字符47到122的范围ASCII码。




关键位置



对用户的输入进行了encode,要保证encode之后的数据必须为可见字符。 而这些被encode之后的数据将会被放在可执行段,最后跳转到该段执行。 技术难点就是如何产生一个全为可见字符的shellcode。 谷歌了一下,发现一个可以将机器码全部转换为可见字符的工具。 ALPHA3 (https://code.google.com/archive/p/alpha3/downloads)

0x03 实现步骤


1先去shell-storm找一个短小的shellcode。(必须保证输入在128个字符之内,函数有限制)。 这个是我找的: execve /bin/sh - x86/linux "x6ax0bx58x99x52x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9xcdx80" 记得把这个保存成你要的文件,是二进制流方式(⊙o⊙)哦,别保存错了。   2将该shellcode保存成为二进制文件。   3然后在windows下使用命令   python ALPHA3.py x86 ascii uppercase EAX --input="execve-shell.txt" >visibleShellcode2   4将生成的shellcode,放进字符串。
   

大功告成小鸡吃米图

0x04 参考


Shellcode website:   http://shell-storm.org/   https://code.google.com/archive/p/alpha3/downloads