自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 [pwnable.kr]uaf

先贴上uaf.cpp的源码又是学新东西的一天这道题主要会用到的知识点:1.c++多态性中,通过虚函数表实现的动态多态(或者叫运行时多态)2.uaf(use after free)漏洞的基本原理3.c++对象在内存中的布局(不多,这题只需要知道vptr在起始处)

2022-10-08 22:05:08 484 1

原创 [pwnable.kr]cmd2

在https://linux.die.net/abs-guide/internalvariables.html中发现了一个新的关键词,在http://c.biancheng.net/view/1136.html中列举了一些bash内建命令,1.切换到根目录,这样执行pwd命令就会得到斜杠,可以看到执行时除了程序代码中修改的PATH变量,然后利用$()的命令执行,拼接得到绝对路径。4.创建软连接+pwd+$()命令执行。虽然system函数调用的是sh,echo和pwd命令可以执行,于是就想到一个问题,

2022-10-06 09:44:37 242

原创 [pwnable.kr]cmd1

() 小括号里面是 Linux 命令,作用就是执行里面的命令后返回执行的结果;平时在使用 rm、rmdir、ls 等命令时,无论当前位于哪个目录,都可以直接使用,试了一圈下来,除了bash和实际指向busybox的static-sh,然而这个权限似乎不是从sh来的,看到sh实际上是指向dash的软连接。看了网上的wp意识到自己压根就没思考程序里面改path变量的意义,这里才意识到单引号和双引号在shell里是不同的,而无需指明命令的执行文件所在的位置(绝对路径),可以判断当前使用的命令所在的绝对路径。

2022-10-04 22:03:45 134

原创 [pwnable.kr]lotto

dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流。并且做模45运算再+1,来保证他们最后处在1-45的范围内,然后用两层for循环把随机码与输入的六个字符进行比较,在字符串中的字符没出现重复的时候是没问题的,单次游戏里面赢得概率就会提升到2/15,一次都不赢的概率就会下降到1/2左右,问题就出在这个两层的for循环,比如aaaaaa和abcdef,但是如果字符串里面有字符重复,如果输入六个相同的字符,大概是个猜数字的游戏,

2022-10-04 21:28:34 737

原创 [pwnable.kr]blackjack

每轮发一张牌,如果最后加起来的和比庄家更接近21,就赢,反之就输;从第二张牌开始可以选择加牌(h)或者不加牌(s)也就是重新下注时不会对余额是否充足进行检查。JQK都被看做10,Ace被看作11;然后下一次游戏开始时就会打出神秘字符。如果下的注超过了自己持有的余额,只要赢一把,赌注就会被划进余额,访问给的网址,直接跳到403了。开始游戏之后发现有500余额。通过这种方式下一个大赌注,如果总和大过21,也输;但是实际上只会校验一次,实际上也就是flag。

2022-10-04 20:34:03 622

原创 [pwnable.kr]coin1

有个没太搞懂的点,在于pwntools和python版本的关系,在我自己的虚拟机上面pwntools需要python3才能跑,如果远程连接的话因为网络延迟的问题会超时。然后mkdir /tmp/叫什么都行。需要连接到之前的其他题目给的ssh。在靶机上面反而是python2才行。在新建的文件夹里面写脚本。

2022-10-04 20:09:49 168

原创 [pwnable.kr]shellshock

可以看到这里对() {开头的字符串没有太多检查就传给了parse_and_execute,而直接用bash会从环境变量PATH里面找系统默认的bash,而这个bash是没有漏洞的。靶场环境当前目录下的bash才是有漏洞的bash,调用时需要用./bash。2.需要有能够执行的高权限的程序,并且程序中存在启动bash子进程的操作。跟着网上的分析简单看了一下bash 4.3的varieble.c文件,就是之前的几个题都可以直接以文件名运行文件,可惜定义的很多东西不清楚干啥用的,测试的时候又把前面的坑踩了一次,

2022-10-03 20:29:34 217

原创 [pwnable.kr]mistake

当文件存在并且有权限读取的时候,返回的文件描述符必然不会小于0,事实上是从键盘读取输入的十个字符(这一句也存在优先级的问题)然后用xor对pw_buf2中的每个字符都做与1异或的处理,又因为fd为0,1,2时分别指标准输入、输出,错误输出。再之后通过scanf读入十个字符到pw_buf2中,这个语句的判断必然成立,并且最后赋值得到 fd=0。需要pw_buf2处理后的结果和pw_buf1相同。对于赋值语句,在赋值成功的情况下返回值是1;问题其实出在main函数开头的这一句判断。那么只需要第一次输入十个1,

2022-10-03 16:23:03 86

原创 [pwnable.kr]random

每次启动进程调用rand函数都会得到同一个数,但是没有使用srand函数初始化随机数种子,拿到异或的结果3039230856。在本地写一个类似的代码进行测试,可以看到每次输出的都是同样的结果。导致它实际上并不随机,先看random.c。调用了rand函数,把原来的代码再改一下。

2022-10-03 14:50:54 89

原创 [pwnable.kr]passcode

->plt[1]第一条指令jmp *got[3] --> plt[1]第二条指令压栈 --> plt[1]第三条指令jmp plt[0] --> plt[0]第一条指令再压栈 --> plt[0]第二条指令jmp *got[2] --> 进入动态链接函数 --> 回写got表&调用目标函数。got[3],即804a000处实际存的值是8048426,即plt[1]中第二条指令的位置,除了plt[0]和got[0]、got[1]、got[2]有特殊作用外,

2022-10-03 13:56:40 300

原创 [pwnable.kr]flag

用checksec查一下,发现用upx加壳。此时再用ida打开,看起来就顺眼多了。直接用ida的反汇编功能会报错。双击flag变量,跳转到这里。题目描述中说是逆向题。

2022-10-02 21:28:16 644

原创 [pwnable.kr]bof

字符串的内容是 任意字符*52+‘\xbe\xba\xfe\xca’我们需要把变量key的值覆盖成0xcafebabe,再加上要覆盖key变量的目标值0xcafebabe。用ida很方便地看到s的地址是ebp-2ch,gets函数在读取输入时没有限制字符串长度,第一个参数地址是ebp+8,好让if语句中的判断为真。返回地址是ebp+4,根据函数调用的过程,相差44+8个字节,

2022-09-27 22:07:05 105

原创 [pwnable.kr]collision

也就是四个char的值以小端法组合后被当成int型加到res变量中,然后会调用check_password对参数进行处理,让每个int都等于0x21DD09EC的五分之一。如果最后得到的结果和hashcode相等,实际上相当于我们要设法传入五个int,而这些都是不可见字符,没法直接输入进去。这里传进去的参数是20个char,考虑到小端法存储,输入的顺序应该是。需要传进去一个长度为20的参数,使得这五个int的和等于目标值。也就是0x21DD09EC,最省事的做法当然是取均值。char型1个字节,

2022-09-25 22:04:49 917

原创 [pwnable.kr]fd

关于文件描述符,可以参考https://blog.csdn.net/yushuaigee/article/details/107883964。read的函数原型是int read (int handle,void *buf,int len)如果if语句中strcmp函数判断两个字符串相等,就会读取并回显flag文件的内容。执行时附带参数4660,然后输入LETMEWIN,即可成功读取flag。回到这个题里,我们每次执行fd文件都是一个全新的进程。注意到输入的fd会减去0x1234,即4660。

2022-09-25 21:43:06 213

原创 [pwnable.kr]leg

看c代码可以知道输入的key值需要与key1()和key2()key3()的返回值之和相同。于是只需要关注r0的值的变化,对于r11的入栈出栈、加加减减就不用管了。由于arm的三级流水线,pc实际上指向的是下下条指令的起始地址。也就是当0x00008cdc的mov r3,pc在执行时,调用完key3()的下一条指令的地址是0x00008d80。而对于三个函数的具体行为,反而是看asm代码比较清晰。那么key1()的返回值r0就是0x00008ce4。同理,在key2()中,也只需要关注r0的动向。

2022-09-25 21:23:22 579

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除