polar靶场 sandbox
使用checksec看看保护
存在栈溢出保护与数据段保护

附件直接丢到ida里面看看

f5查看伪代码

有一个box函数
跟进一下

这个函数会读取buf字符串数组
但是会匹配到某些特定字符
那么简单来说就是有一些限制的rce
我们直接nc连接
然后用单引号绕过即可

polar平台 creeper
存在数据段保护

附件 拖到ida里面看看


有个game函数 跟进一下

这个程序会读取0x100个字符 存在缓冲区溢出
但是这道题也不需要利用这个漏洞
我们只需要让buf字符串数组的长度为15即可
exp:
1 | from pwn import* |

这里需要注意要使用send()
只传输15个字节型字符
(本人在此犯了个傻 一直以为像是buf[15]没有直接初始化的字符串数组 最后一个元素会自动填充空格符 实际上并不会)
polar平台 简单溢出
存在nx保护

拖到ida里面看看


这里很明显有缓冲区溢出的漏洞
主函数里面没有其他的函数
我们去看看还有没有其他函数

左侧看到了一个fact函数

很明显是一个后门函数
那么思路就很简单了
首先这题就是一个ret2text
我们获得后门函数的弱点地址
然后覆盖掉主函数里面的retrun的地址就可以了

获得后面函数地址为0x400596

写入0x38个字符然后再覆盖掉返回地址即可
exp:
1 | from pwn import* |

sendline()和send()相比就只是多了个\n换行符而已
polar平台 system
存在栈溢出与nx保护

拖到ida里面看看

这道题会读取buf中0x1e个字符
明显存在溢出
但是此题直接会执行system(buf)
那么就很简单了
直接nc连接上去
然后输入cat flag就可以了
就是个简单的rce

polar平台 Emm
存在nx保护

拖到ida里面

可以看到左侧函数栏那边有yes和flag函数
我们等下去看一下

主函数里面有个yes函数
我们跟进一下

有个溢出点
我们去flag函数那里看看

会直接执行cat flag
那么这道题就是个ret2text
具体原理之前的题目有
exp:
1 | from pwn import* |
注意这里是32位

polar平台 Choice
存在nx保护

拖到ida中

左侧函数栏有许多函数
还有一个shell我们等下去看看
先到主函数里面看看

有3个函数
我们分别去看看
Data1

Data2

这两个函数读取的字符串个数都一样
并且并没有溢出漏洞
read值读取buf中的0x35个字符
Data3

这个函数里面会读取0x50个字符
存在溢出
我们到shell里面看看

存在后门
依然是ret2text
exp:
1 | from pwn import* |

polar平台 overload1
存在nx保护

拖到ida里面看看主函数

定义了2个字符串数组
我们的目标是使得v5[1]==97也就是a
1 | __isoc99_scanf("%c", v5); |
他只会读取一个字符
这里并没有溢出漏洞
但是v5[0] == 121也就是y的时候
1 | result = gets(v4) |
他会读取我们输入的字符串到v4中
这里就存在溢出漏洞了
根据函数在栈帧中的结构
我们可以知道此时输入v4的时候是可以覆盖掉v5中的值
我们点击v4
然后进入栈帧结构中

var_110就是v4
我们通过溢出覆盖掉v5中的元素即可
exp:
1 | from pwn import* |

说些什么吧!