ctfshow 做题 web模块 web11~web14
Posted Goodric
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ctfshow 做题 web模块 web11~web14相关的知识,希望对你有一定的参考价值。
ctfshow 做题 web模块 web11~web14
——
web11
打开环境,可输入密码登录。
并且给出了源码, 过滤了这些字符:
$regex = “/(select|from|where|join|sleep|and|\\s|union|,)/i”;
满足这个条件时,输出 flag :
if($password==$_SESSION['password'])
echo $flag;
F12 在存储项把 phpsession 的值给去掉,变为空。
然后不输入密码进行登录,达到密码的值和 session 的值相等,得到 flag 。
——
——
web12
打开环境,界面上没有什么东西, F12 看源码有提示进行 get 传参 ?cmd=
测试 cmd 参数的效果:
?cmd=phpinfo();
看到有回显,说明可以在 cmd 的值上构造语句执行命令。
本来想用 system() 函数的命令:system(‘ls’) 来读取存在的文件名,但是这个语句页面无回显。
这里使用 scandir() 函数来查看目录中的文件。
构造语句:
?cmd=print_r(scandir(‘./’));
得到一个很长的文件名。
还有一个函数也能读取目录文件: glob() 函数。
如:
glob("*") 匹配任意文件;
glob("*.txt") 匹配以 txt 为后缀的文件。
所以也可以用语句:
?cmd=print_r(glob(“*”));
回显出前面的那个很长的文件名。
得到这个文件名,接下来就看这个文件里的内容了,本来想 “url/文件名” 直接查看,不过php 文件似乎看不了,如果是 .txt 文件应该可以直接看。
所以要用到 show_source() 函数: 对文件进行 PHP 语法高亮显示。
语句:
?cmd=show_source(“903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php”);
或
?cmd=highlight_file(“903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php”);
show_source函数是highlight_file()函数的别名
得到 flag 。
——
——
web13
打开环境,是文件上传的题型。
先简单尝试传 .php 一句话木马,回显: error file zise ,后端对文件后缀有限制。传了很多,都没有用。
这里有一个源码文件,upload.php.bak ,访问可进行下载。
源码要求,文件的大小要小于等于24,名字长度小于等于9,后缀长度小于等于3,并且上传文件的文件名和后缀名都不能含有 php 字眼。
这题的做法应该是要进行文件解析。
先把一句话木马写入 1.txt 文本里,
再上传**.user.ini** 文件
.user.ini 它是PHP 支持基于每个目录的 INI 文件配置,而且如果你的 PHP 以模块化运行在 Apache 里,则用 .htaccess 文件有同样效果。
内容为
auto_prepend_file=1.txt
auto_prepend_file 就是设置页眉和脚注,可以保证它们在每个页面的前后被载入。
使用这些指令包含的文件可以像使用include()语句包含的文件一样。
有了这条件命令后。我们就可以执行1.txt的内容了。
然后对这两个文件进行上传。
上传之后,先用 ?a=phpinfo(); 测试,看到可以成功访问。
现在就可以用参数 a 进行操作了。
查看目录下的所有文件:
?a=system(‘ls’);
或
a=print_r(glob(“*”));
看到所有文件之后,可以对指定的文件内容进行查看。
a=highlight_file(‘903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php’);
得到 flag 。
——
——
web14
打开环境,页面显示一串代码。
源码内容为进行 get 传参 c ,并且 c 的值会在 sleep() 函数内,即值是多少,页面就会休眠多少秒。
并且不同的值页面会回显不同的内容,有的是字符 ’@A@‘ ,有的是字符 '$url ’ ,正确的应该要让它回显变量 $url 。
传入 ?c=3 时,得到一个文件名。
访问这个文件,是一个查询页面,点击查询的内容会在 url 的参数 query 中显示。
所以断定要在参数 query 后进行 sql 注入。
F12 看到查询语句对很多字符进行了过滤,有 information_schema ,.tables, .columns, linestring ,空格,polygon/is 。
先尝试
执行语句,空格用 /**/
代替,回显的内容都会以弹窗 javascript 方式出现。
这里用 burp 方便查看。
先尝试查看数据块版本:
?query=-1/**/union/**/select/**/version()
语句成功执行,得到版本号 10.2.26-MariaDB-log
用 load_file() 函数访问前面刚打开环境一串代码开头看到的文件 secret.php :
?query=-1/**/union/**/select/**/load_file('/var/www/html/secret.php')
secret.php 的内容显示,flag 在另一个文件 /real_flag_is_here 里。
同样访问 /real_flag_is_here 文件:
?query=-1/**/union/**/select/**/load_file('/real_flag_is_here')
得到 flag 。
以上是关于ctfshow 做题 web模块 web11~web14的主要内容,如果未能解决你的问题,请参考以下文章