xctf(pwn新手区)
write up
whiteh4nd
这个作者很懒,什么都没留下…
展开
-
CGfsb(xctf)
0x0 程序保护和流程保护:流程:main()可以明显的发现存在一个格式化字符串漏洞,然后当pwnme这个变量等于8时调用’cat flag’这个命令。又因为程序没有开启pie并且pwnme是全局变量,所以可以通过格式化字符串漏洞将pwnme这个变量改为8从而得到flag。0x1 利用过程首先先确定偏移量可以发现偏移量是10,然后查看pwnme变量的地址将pwnme的值改为...原创 2020-05-06 23:19:03 · 642 阅读 · 0 评论 -
string(xctf)
0x0 程序保护和流程保护:流程:main()将v3变量的地址赋值给v4,输出v3和v3+4的地址。调用sub_400D72(v4)。sub_400D72()如果名字长度小于12就分别调用三个函数。sub_400A7D()如果输入east就会返回,否则就会进入sub_4009DD(),然后无论如何都会结束程序。sub_400BB9()输入east之后就会进入这个函数。...原创 2020-05-06 23:15:56 · 343 阅读 · 2 评论 -
level3(xctf)
0x0 程序保护和流程保护:流程:main()vulnerable_function()很明显的栈溢出。0x1 利用过程整个程序中没有我们能利用的部分,但是题目给我们提供了一个libc。所以可以通过泄露got表的地址获取libc的基地址。libc中有system()函数,还有"/bin/sh"。因此我们先使用write()泄露got表中的地址计算出libc的基地址调用完成之后返...原创 2020-05-06 23:11:24 · 462 阅读 · 0 评论 -
int_overflow(xctf)
0x0 程序保护和流程保护:流程:main()login()check_passwd()分析流程可知当我们输入的passwd的长度在3~7之间时可以将passwd复制到dest中。而用来储存passwd的长度的变量是无符号的int8。int8能储存的最大值是255。超过255就会回到0。0x1 漏洞利用根据判断可以将passwd的长度控制在259~263之间就可以完成利用了...原创 2020-05-06 23:09:20 · 557 阅读 · 0 评论 -
guess_num(xctf)
0x0 程序保护和流程保护:流程:main()sub_C3E()如果程序能成功运行到最后就能获得flag0x1 利用过程由于程序保护的比较全面,因此不能通过gets()进行栈溢出,所以只能通过模仿程序流程来解决问题。查阅资料得知srand(seed)会根据seed的数值改变rand()函数产生的随机数,也就是说相同种子生成的随机数是相同的。刚好gets()函数可以修改seed[...原创 2020-05-06 23:05:21 · 416 阅读 · 0 评论 -
level2(xctf)
0x0 程序保护和流程保护:逻辑:main()vulnerable_function()很明显是一个栈溢出漏洞。0x1 利用过程既然系统给了一个system(),那么只需要/bin/sh就可以getshell了。所以要么我们自己构造要么去二进制文件中寻找。找到了字符串之后就可以对漏洞进行利用了。根据32位可执行文件的调用函数的参数入栈顺序,我们可以将buf=‘a’*(0x8...原创 2020-05-06 23:03:03 · 553 阅读 · 0 评论 -
level0(xctf)
0x0 程序保护和流程保护:流程:main()vulnerable_function()很明显的栈溢出,read()允许输入0x200个字符而buf只有0x800x1 利用过程我们在ida的函数窗口处发现了一个callsystem(),可以直接getshell所以我们只需要将返回地址覆盖成callsystem()的地址就可以拿到flag,buf=0x88*‘a’+p64(0...原创 2020-05-06 22:56:58 · 872 阅读 · 0 评论 -
hello_pwn(xctf)
0x0 程序保护和流程保护:流程:subsub_400686():当dword_60106C = 1853186401 时进入subsub_400686()函数获得flag。0x1 利用仔细分析后可以发现两个数据是相邻的,我们可以通过read函数改写dword_60106C的值从而获得flag。unk_601068和dword_60106C 只相差四个字节,read函数可以输...原创 2020-05-06 22:53:37 · 607 阅读 · 1 评论 -
when_did_you_born(xctf)
0x0 程序保护和流程保护:流程:分析主要程序逻辑可知,要想获得flag必须让v5等于1926但是第一次输入时v5不能等于1925。但是我们可以通过gets(&v4)将v5的值覆盖成1926。0x1 利用过程v4变量距离rsp的偏移为0x0,v5变量距离rsp的变量为0x8,所以当v4=‘a’*8+p64(1926)时就可以获得flag。0x2 expfrom pwn i...原创 2020-05-06 22:47:50 · 202 阅读 · 0 评论 -
cgpwn2(xctf)
0x0 程序保护和流程保护:流程:main()hello()可以发现在hello()中存在栈溢出。0x1 利用过程在函数窗口中发现了system()函数,所以我们只需要字符串"/bin/sh"。就可以getshell了。仔细观察程序可以发现name变量是全局变量存放在.bss段中。所以我们只需要向name中输入"/bin/sh",s=‘a’*(0x26+4)+p32(sys...原创 2020-05-06 22:40:28 · 348 阅读 · 0 评论