7有免费建网站,中小型电子商务网站,常州做企业网站的公司,定制版app目录
一、[极客大挑战 2019]EasySQL
总结#xff1a;
二、[极客大挑战 2019]Havefun
总结#xff1a;
三、[HCTF 2018]WarmUp
总论#xff1a;
四、[ACTF2020 新生赛]Include
总结#xff1a;
五、[ACTF2020 新生赛]Exec
总结#xff1a; 一、[极客大挑战 2019]…目录
一、[极客大挑战 2019]EasySQL
总结
二、[极客大挑战 2019]Havefun
总结
三、[HCTF 2018]WarmUp
总论
四、[ACTF2020 新生赛]Include
总结
五、[ACTF2020 新生赛]Exec
总结 一、[极客大挑战 2019]EasySQL
EasySQL根据题目盲猜是sql注的题目 检查源码发现传参方式为GET 随意输入用户名和密码发现有回显
预测后端代码应为
?php
//连接mysql
$servernamelocalhost;
$usernameroot;
$passwordroot;
$dbnamemydata;
.
.
.
$username$_GET[username];
$password$_GET[password];
$sqlselect * from users where username$username and password$password;
$ resultquery($sql);
.
.
.
?
根据数据库查询规则使用万能密码 admin or 11 # psselect * from users where usernameadmin or 11# and password; admin后的 为了和前面的 形成闭合 or 11形成查询永真条件 #将后面条件注释掉 总结 sql注入万能密码admin or 11 # 二、[极客大挑战 2019]Havefun 打开网址查看源码发现一段注释的内容 !-- $cat$_GET[cat]; echo $cat; if($catdog){ echo Syc{cat_cat_cat_cat}; } -- GET请求通过URL请求参数可以在URL后面添加参数以“?”作为分隔符参数之间用“”符号链接。
解释GET传参cat。输出cat。如果catdog。输出一串类似flag的东西。 总结
GET请求通过URL请求参数可以在URL后面添加参数以“?”作为分隔符参数之间用“”符号链接。
简单php代码。 三、[HCTF 2018]WarmUp 打开网址检查以源码。发现隐藏页面source.php 转到source.php可以看到一段php代码 ?phphighlight_file(__FILE__);class emmm{public static function checkFile($page){$whitelist [sourcesource.php,hinthint.php];if (! isset($page) || !is_string($page)) {echo you cant see it;return false;}if (in_array($page, $whitelist)) {return true;}$_page mb_substr($page,0,mb_strpos($page . ?, ?));if (in_array($_page, $whitelist)) {return true;}$_page urldecode($page);$_page mb_substr($_page,0,mb_strpos($_page . ?, ?));if (in_array($_page, $whitelist)) {return true;}echo you cant see it;return false;}}if (! empty($_REQUEST[file]) is_string($_REQUEST[file]) emmm::checkFile($_REQUEST[file])) {include $_REQUEST[file];exit;} else {echo brimg src\https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\ /;}
?
先来查看一下hint.php里的内容 ffffllllaaaagggg这里flag被复写了四次可以猜测flag被放在4到5个根目录下即写成../../../../ffffllllaaaagggg或../../../../../ffffllllaaaagggg
再对上面php代码进行逐行分析
?phphighlight_file(__FILE__);class emmm{public static function checkFile($page)//创建一个函数{$whitelist [sourcesource.php,hinthint.php]; //增加白名单包含source.php和hint.phpif (! isset($page) || !is_string($page)) {//$page不为空或NULL(!isset($page))或(||)不为字符串(!is_string($page))echo you cant see it;return false;}if (in_array($page, $whitelist)) {//in_array的意思是判断page里是否包含白名单里的内容即是否包含(source.php或hint.php)return true;}$_page mb_substr($page,0,mb_strpos($page . ?, ?));/*这里mb_substr返回字符串的一部分mb_substr(需返回字符串类型sting,从哪个数字代表的位置开始类型int,截取长度类型int)mb_strpos(要被检查的字符串,要搜索的字符串最终返回要被检查字符串的位置类型int综合来看就是mb_strpos函数检索$page中?的位置并返回?所在的位置数mb_substr函数将从0开始到?位置的$page字符串返回到型变量$_page*/if (in_array($_page, $whitelist)) {return true;}/*in_array(被搜索的值搜索的数组类型)经过上面的截取代码$_page是否存在source.php或hint.php如果存在就返回true*/$_page urldecode($page);/*进行一次url解码将%3F解码为?所以这里将?写做%3F也无法实现绕过*/$_page mb_substr($_page,0,mb_strpos($_page . ?, ?));if (in_array($_page, $whitelist)) {return true;}//这一部分解释同上echo you cant see it;return false;}}if (! empty($_REQUEST[file])//判断文件不能为空 is_string($_REQUEST[file])//并且传入参数为字符串 emmm::checkFile($_REQUEST[file])//并且调用函数白名单要过白名单检测过了之后即可看到包含了flag的文件) {include $_REQUEST[file];exit;} else {echo brimg src\https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\ /;}
?
构造playload(1)http://ip/?filesouce.php?../../../../ffffllllaaaagggg playload(2)http://ip/?filesouce.php?../../../../../ffffllllaaaagggg playload(3)http://ip/?filehint.php?../../../../../ffffllllaaaagggg
分别进行尝试 中间有靶机到期自动销毁的情况截图的网址有变化Q^Q
总论
mb_strpos和mb_substr截取内容碰到就截止所以我们只需要输入/?filesource.php?即可绕过白名单检测 四、[ACTF2020 新生赛]Include
进入网页打开源码只有tips有提示 点击tips跳转到/?fileflag.php还是什么也没有 根据题目include提示可以猜测flag在/?fileflag.php页面中但是被注释了所以我们就要想办法获取网页的源码。
所以这里可以想到要构造php伪协议 PHP伪协议也是php支持的协议和封装协议。 常见的有 file:// 访问本地文件系统php:// 访问各个输入/输出流data:// 数据zip:// 压缩流 不过有些伪协议需要allow_url_fopen和allow_url_include的支持 php:// php:// 访问各个输入/输出流I/O streams在CTF中经常使用的是php://filter和php//inputphp://filter用于读取源码php://input用于执行php代码。 php://filter伪协议 php://filter/参数转换过滤器 参数 1.resource要过滤的数据流 2.read读链的过滤器 3.write写链的过滤器 4.;两个链的过滤器 转换过滤器 1.convert.base64-encode convert.base64-decode等同于base64_encode()和base64_decode()base64编码解码 2.convert。quoted-printable-encode convert.quoted-printable-decodequoted-printable 字符串编码解码 php://input读取POST数据 说明 可以访问请求的原始数据的只读流。即可以直接读取到POST上没有经过解析的原始数据。 enctype”multipart/form-data” 的时候 php://input 是无效的 参数可以同时使用两两之间使用 / 隔开 本题构造的伪协议格式 /?filephp://filter/readconvert.base64-encode/resourceflag.php 得到一串base64编码 将base64编码解码 总结
php伪协议获取网页源码用于获取简单的被注释掉的重要信息
伪协议构造格式中的一种
/?filephp://filter/readconvert.base64-encode/resourceflag.php 五、[ACTF2020 新生赛]Exec
打开靶机看到ping先输入网址127.0.0.0进行测试 可以看到执行ping命令有回显 而单独输入查询命令时没有回显由于ping命令可以与管道符连用先尝试用管道符连接ls 连接ls发现有回显尝试用cd逐层发打开文件 打开到第三层的时候出现了flag我们只要cat一下flag即可 既然ls命令可以用我们不妨大胆一点
直接cat /flag 嚯这也行直接一步到位所以我前面在干嘛…… ps:补充一下管道符的用法 | 按位或,直接执行后面的语句 按位与前面后面的都要执行不管真假 || 逻辑或相当于or 逻辑与相当于and ; 作用与相同前后都会执行 总结
ping命令后可跟管道符管道符的用法。