web
web1000
先写下这道没人做出来的web
题目本身出的非常好 行云流水般的内网操作
https://www.xmsec.cc/wdb-review/
题目是一个在线爬虫解析HTML A标签的的功能,显示会把tag A的内容打印在屏幕上
首先扫目录 robots.txt
查看发现 目录 get_sourcecode
尝试访问 提示 NOT 127.0.0.1
所有头全加伪造一波 还是gg
namp看了下好像是nginx的反代
想到了长亭上那个代理题目的服务器 然后访问127.0.0.1的操作 仍然gg
大概是因为docker??
这里应该测试爬虫 发现是动态分析 说白了就是会执行js
所以构造html文件 用 XMLHttpRequest 让 js 执行http请求
|
|
执行AJAX请求,并把结果动态赋到id为flag的a标签里,随之输出出来
AJAX 就是 异步的 JavaScript 和 XML
|
|
这样终于拿到了源码
发现 过滤了dbfilename,可知是redis相关
构造redis corntab shell失败,可能系统是ubuntu等,crontab不行就尝试从web入手
(由于redis写入的文件有莫名的头和尾 只有centos才能成功通过crontab来弹shell)
http://foreversong.cn/archives/1180
通过JS端口探测
|
|
这里有个小坑,通过 JS 代码并不能发现 redis 的端口6379是开放的,但是该端口确实是开放的。有人说 JS 代码只能探测Web类端口,在探测redis端口的时候回卡在等待界面
getshell后可以发现CTF中redis环境是2.8版本。不过redis>=3.2版本,会过滤一些特殊字符,直接利用js发送http请求,由于POST数据包的特殊字符被过滤,导致链接会被redis关闭,所以不会执行后面的写文件等payload
所以这里为什么还不清楚
得到8000端口开放着,猜测是apache2等phpserver
构造一个Redis EXP
|
|
加 level=low_273eac1c 因为源码以有写过滤
这里有个坑点
因为不同端口,所以存在跨域,需要加上Access-Control-Allow-Origin:* 头部 (CORS)
有关同源和跨域
https://www.cnblogs.com/rockmadman/p/6836834.html
这里是盲打 你也不着写进去没 所以比赛时在不知道是不是正确时会很慌 无形增大难度
最后再构造一个HTML利用webshell
最后直接反弹shell也可以,大师傅测试的时候发现直接用bash反弹不行,但是用python代码可以反弹回来,可能是题目环境限制了一些关键词
|
|
小结
这题真的是十分精彩 其实做这个前几天我刚总结过 xss 打 内网redis 和 redis getshell 的相关操作
这次刚好加深印象
不过这个可能不是传统回显在vps的xss 它那个在线爬虫会执行js并回显在当前页面
大概可以说是ajax打内网 也有点像xml打内网 还有点像ssrf的操作
其实到底叫什么并不重要 真正要学习的是如何利用有限条件操作内网
sql注入+反序列化+file协议读文件(LFR) 或者 sql注入+ssrf 只是思考的角度不同
不过对ssrf还是不太敏感 最近有在看hctf2016的题 AT Field 一开始也是ssrf 看wp的时候我还愣了一下
http://www.freebuf.com/articles/web/121778.html
同样扫目录 robots.txt
发现并下载user.php.bak
一看就应该有反序列化的洞
能看懂的反序列化学习
https://www.cnblogs.com/perl6/p/7124345.html
直接用 union select 会被WAF检测到,所以我们添加了 /**/
-1/**/union/**/select/**/1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:3:"yyy";s:3:"age";i:0;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'
var/www/html/ 路径报错的时候给了 不给的话大概也能猜到
flag.php字典大的话可以跑出来
为啥不直接http读flag.php
其实稍微试一下就能发现 http的协议也能得到base64的回显的 but只有flag.php没有base64的回显 应该是过滤了
使用http协议没办法读到flag 又给了文件路径 最简单的办法就是file协议
最后有一点sql注入时我感觉十分重要 就是回显位的判断
?=-1或者加 and 1=2 让它自带语句不执行好回显我们的union是其一
还有你 union select 1,2,3,4 可能回显位只有一个 比如这题在 2 要是不仔细看下就得当盲注做了..
仍记得当时强网杯three hit那道sql没看回显位以为不能回显当盲注做的。。而且那道题还是二次注入当时脚本没写出来。。纯手工注入的。。。简直累死
那道题可以看
https://blog.csdn.net/qq_32465127/article/details/79814049
misc
minifie
png隐写 看图片我还以为要python提取像素点
正解为stegsolve发现red0通道为空
猜测是0通道有问题,将其他plane 0通道(red,green,Alpha)提取并且保存,使用Stegsolve对三张图片分别做Image Combiner对比 ,最后发现Alpha plane 0和green plane 0通道进行XOR(异或) 就可以得到flag
https://blog.csdn.net/xiangshangbashaonian/article/details/81870097
clip
https://blog.csdn.net/xiangshangbashaonian/article/details/81906161
这题被题目描述坑了 说什么从老旧损坏硬盘恢复的文件系统
我一直试文件恢复的操作。。
结果是winhex直接搜索
有师傅说disk是应该linux挂载的 但既然提示损坏就应该不是这个方向 有点牵强orz
结果从文件中可以搜索到两个png图片 注意有一个是没有png文件头的
这里最搜索 IDAT 涨姿势了orz
https://blog.csdn.net/SWEET0SWAT/article/details/81879942
但这种做法好像不是预期 预期可能是什么zlib compress解密
当时我 binwalk -e能出来超级多的zlib 然后我就不会了。。
记录一道re
https://paper.tuisec.win/detail/f8d629ce47c117c
为啥想记录这道re呢 因为看wp把我吓到了 大师傅直接就能看出来字符串是xor的。。膜拜
贴下原话
老年misc选手,看到输出得到加密后的flag:4b404c4b5648725b445845734c735949405c414d5949725c45495a51
像是异或flag后的结果
import libnum
In [97]: libnum.n2s(0x4b404c4b5648725b445845734c735949405c414d5949725c45495a51)
Out[97]: ‘K@LKVHr[DXEsLsYI@\AMYIr\EIZQ’
猜测:
In [93]: ord(“f”)^0x4b
Out[93]: 45
In [94]: ord(“g”)^0x4b
Out[94]: 44
In [95]: ord(“l”)^0x40
Out[95]: 44
In [96]: ord(“a”)^0x4c
Out[96]: 45
xor key 为45,44
In [98]: enc = libnum.n2s(0x4b404c4b5648725b445845734c735949405c414d5949725c45495a51)
In [99]: flag = “”
In [102]: for i in range(len(enc)):
…: if i%2==0:
…: flag+=chr(ord(enc[i])^45)
…: else:
…: flag+=chr(ord(enc[i])^44)
…:
…:
In [103]: print flag
flag{d_with_a_template_phew}