Web
[CISCN 2019华东南]Web11
题目:(SSTI、Smarty、RCE)
在看到这道题目的时候,我们可以先从题目的提示开始看起,
题目提示可能使用SSTI模板注入(SSTI就是服务器端模板注入)
通过查看到题目右上角有IP地址,又题目页面最下端有提示,该浏览器的模板引擎为Smart
这里抓包,猜测是否IP是否为XFF头进行控制
X-Forwarded-For:{4*4}
发现确实是这样,我们在利用代码执行,查看flag在哪
system('ls /')
查看根目录发现flag路径,进行访问
system('cat /flag')
即得flag
NSSCTF{7bda063b-92f8-45d5-ab36-ad5c16508b86}
补充:
漏洞原因:服务端接收了用户的恶意输入以后,未经任何处理就将其作为Web应用模板内容的一部分,通过破坏模板引擎,从而可能导致敏感信息泄露、代码执行、GetShell等问题
这里我们可以拓展的了解一下凡是使用模板的地方都可能会出现SSTI的问题、SSTI不属于任何一种语言,沙盒绕过也不是,沙河绕过只是由于模板引擎发现了很大的安全漏洞。
php常见的模板:Twig,Smarty,Blade
这里我们说到的模板引擎:
一、(含义)模板引擎是一种将数据与模板文件相结合,生成最终输出内容的一种工具。
二、(原理)模板引擎会读取模板文件,解析其中的标记和变量,然后将实际的数据填充到相应的位置,最后生成完整的页面内容。
三、(特征)
代码分离:将页面的逻辑代码和显示代码分离,提高代码的可读性和可维护性。
提高开发效率:可以快速生成页面内容,减少重复工作
易于团队协助:减少代码冲突
[HNCTF 2022 Week1]easy_html (记录答案)
题目:
提示cookie里有东西
给了个url访问一下
突破长度,出flag
NSSCTF{35d0b56d-2776-4994-bfac-eb29c94316ae}
[SWPUCTF 2022 新生赛]奇妙的MD5
题目:
网上搜了一下奇妙的字符串ffifdyop加密后,再解密是一个注入指令
输入之后弹出来以下页面
查看源码发现两个GET传参的弱比较
我们进行弱比较
s1502113478
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
这里出现源码,是一个简单的文件包含加md5碰撞
传参正确之后还是没结果,我们抓包发现可以目录/f1na11y.php
我们替换一下目录,即得flag
NSSCTF{6bdcfff8-8c45-4d51-93e6-991133fc92b8}
[SWPUCTF 2022 新生赛]1z_unserialize
题目:(PHP反序列化、RCE)
通过题目给的unserialize函数可以观察到,这题用的一个POST传参,参数为nss
再看上方的lyh类,里面有三个参数,第一个为固定参数,第二个为关键字调用一个伪变量,可以看到这边两个调用有点像“函数+命令”
这里的析构函数__destruct()可以在最后使用这个命令
所以这题就很简单了,写一个反序列化php脚本
用小皮运行一下得到
在进行POST传参
可得flag
反序列化的每个字母都代表着不同的含义,O代表class类,s代表字符串等等NSSCTF{554e816b-75e9-4c95-990e-a2ecea18a32b}
[NISACTF 2022]checkin
题目:(代码审计,编码转换)
这题一开始进行正常传参读取文件包含的flag.php发现行不通,当我将代码复制到cursor中准备审计时发现,有许多unicode
那么我可以将这些进行URL编码输出,看看正确的排序应该是什么样的
正确排序输出应该是这样的,我们来GET传参一下试试
发现还是没有flag,这里我们发现我们正常的“=”和“&”也被URL编码了,所以我们将%3D“=”和%26“&”改回去
最终的EXP是
?ahahahaha=jitanglailo&%E2%80%AE%E2%81%A6Ugeiwo%E2%81%A9%E2%81%A6cuishiyuan=%E2%80%AE%E2%81%A6+Flag%21%E2%81%A9%E2%81%A6N1SACTF
即得flag,这题主要考察对代码的审计能力和对url编码的敏感度
NSSCTF{2026b414-1ffb-495b-acee-942692507581}
[GKCTF 2020]cve版签到
题目:(%00截断、CVE)
没有提示,我们抓包放包看看有无提示
可以看到这里提示本地地址,我们用本地地址访问一下
这里提示后面得有ctfhub.com
发现无显示,猜测是否是%00截断,发现还是无显示,这里忽略了一个点就是,他的末尾为123,这里从他的Referer头也能看到
我们可以通过%00截断得到flag
NSSCTF{0107de7d-55c1-429a-8467-191e520cd828}
补充:
这里为什么会用%00截断,可以看一下下面的表
url中的%00(只要是这种%xx)的形式,webserver会把它当作十六进制处理,然后把16进制的hex自动翻译成ascii码值“NULL”,实现了截断。
[羊城杯 2020]easycon
题目:(目录嗅探、webshell、base64编码转图片)
看到这个页面我们手足无措,可以通过尝试访问他的敏感目录看看有无信息,这里我是直接进行目录扫描的
访问一下index.php
直接弹出来一个webshell密码,随后界面变成这样
进行webshell后发现一个可疑文本
看着有点想base64,解码看到了,图片格式的文件头
用ai跑一个base64编码转图片的脚本,即可获得flag图片
NSSCTF{do_u_kn0w_c@idao}
[NISACTF 2022]babyupload
题目:
一开始傻傻的文件上传,发现什么都上传不了
然后查看源码,发现一个目录访问一下
通过代码审计,我们发现上传的文件名会凭借到绝对路径中,os.path.join函数用于凭借一个或者多个路径
所以,当我们将上传的文件名,通过BP改文件名,即可访问/flag文件夹,得到flag
连续放两次包,即得flag
NSSCTF{b5430550-d1bb-4bed-9c4a-e137a5993a03}
[SWPUCTF 2022 新生赛]ez_ez_unserialize
题目:
这里要值得注意的是析构函数__destruct方法,当对象被销毁时调用。
接下来就是构造EXP,注释已经写在EXP里面
当我们拿着构造出来的反序列化参数传参时,发现无反应,因为其中有个__wakeup函数只要数量大于实际属性的数量即可绕过此函数。
因为某些php版本如果序列化字符串中声明的属性数量大于实际存在的属性数量,PHP可能会在反序列化时忽略多余的属性,而这些多余的属性可能会影响对象的状态或行为。
因此这次需要把属性数量改为2,以下是最终exp
O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}
NSSCTF{fb2c7f7c-77d4-4fec-a84f-8703cf9cee86}
[NISACTF 2022]babyserialize
题目:(POP链,反序列化,代码审计、RCE)
题目一看很长的代码,应该是要构造POP链
构造POP的第一步
找链尾,找flag,eval,exec这种敏感的数据
这里我们发现eval函数,参数为txw4ever
invoke():当尝试以调用函数的方式调用一个对象时,会被自动调用。
所以我们可以利用txw4ever这个参数来进行RCE
补充:
__invoke是对象被当做函数进行调用时就会触发
__ToString方法是当对象被当做字符串的时候会自动调用
可以用来激活函数
__set是对不存在或者不可访问的变量进行赋值就会自动调用
__call是对不存在的方法或者不可访问的方法进行调用就自动调用
__wakeup函数只要数量大于实际属性的数量即可绕过此函数,所以在使用unserilize之前就会触发
方法二:
在NISA::__wakeup里,做弱比较的时候就能触发__toString
构造反序列化
O:4:"NISA":2:{s:8:"txw4ever";s:18:"SYSTEM("cat /f*");";s:3:"fun";O:8:"Ilovetxw":1:{s:2:"su";r:1;}}
即得flag
NSSCTF{39ce7354-5395-4e3c-a071-461b28c14ee1}
[MoeCTF 2022]baby_file
题目:(目录扫描dirsearch、php伪协议)
这题看着是一题文件包含,但是没给任何传参方式,我们先扫描一下目录,看看有没有什么发现
这里我们用的是kali自带的目录扫描工具dirsearch
dirsearch -u http://node5.anna.nssctf.cn:27450/
这里已经扫出来一个/flag.php,我们看能不能直接访问他
发现报错,那我们使用php伪协议试试
这里将base64解码,即得flag.php内容
可以发现已得flag
(这题咱们的php伪协议,遇到一次可以手敲一次,以后碰到这种题目可以直接手敲伪协议,也能加快解题速度)
NSSCTF{ee2209ba-fd64-425f-a120-aba667a785e0}
[HCTF 2018]Warmup
题目:
当页面没有可用信息时,我们可以查看源码
在源码中我们发现一个文件,尝试访问一下,发现源码
这里我们发现了一个比较敏感的文件hint.php
我们直接访问肯定是被挡住了
这里我们进行代码审计,发现需要绕过6层我们一层一层看
第一层
第二层
第三层
第四层
第五层
第六层
这里我们刚开始未绕过访问时,提示了一个路径
所以最终的payload就是
?file=hint.php?../../../../../../ffffllllaaaagggg
即得flag
NSSCTF{49a6059a-b22b-43ef-9aa7-1b81776794e1}
Misc
[SWPU 2019]伟大的侦探
题目:
压缩包里的文件进行了加密
我将密码.txt放进010
看不懂是什么字符集,看了眼WP字符集为EBCDIC
切换好发现密码wllm_is_the_best_team!
看了一眼WP给了一张解码图
最后解得flag
NSSCTF{iloveholmesandwllm}
[SWPU 2020]找找吧
1.是个加密的压缩包,没爆破出来,放进Winhex里面看一下
2.发现一个key,尝试一下是不是压缩包的密码
发现密码成功
3.里面是一个mp3文件和一个加密的压缩包
4.使用audcity工具打开 mp3文件,发现末尾像莫尔斯密码,其宽的表示-,其窄的表示. 空格表示/.
得到:
-…/…-/…–/----./-…/…–/./----./…—/-…/-----/.----/…—/.-/.-/-…
摩斯密码得到:D43963E92B012AAB
5.使用该密码去破解secret.rar发现不对
6.使用Winhex 查看findme.mp3发现文件格式为 rar文件
7.将mp3修改为rar,解压得到
8.继续使用audcity工具打开 mp3文件,发现末尾像莫尔斯密码,其宽的表示-,其窄的表示. 空格表示/.
刚上次的一样
得到的莫尔斯密码和前面一样(比上文的莫尔斯电文更明显)。摩斯密码得到 :D43963E92B012AAB
10.使用在线MD5解码工具对D43963E92B012AAB进行解密,得到密码:n1ce_try
11.使用得到的密码对secret.rar解压得到两张图片
12.使用 010编辑器对hint.png图片进行高度修改,保存图片。
13。查看图片,发现图片上有一串字符:veni ,vidi,vici,百度发现是凯撒大帝说的语录
14.使用Stegsolve查看git图片的frame信息,发现里面有字符bFyd_W1l3_Cah
15.通过前面图片搜索的字面意思是凯撒语录,那就猜测组后结果是凯撒解密。因此将bFyd_W1l3_Cah对其解密,联想这道题目是SWPU,最终的解密为:sWpu_N1c3_Try
后面的步骤是看的WP,有点抽象
NSSCTF{sWpu_N1c3_Try}
tri_it
题目:(浏览器命令执行、压缩包破解)
整合包加密
解出密码
打开flag.txt
发现为jsfuck编码
放进firefox控制台运行,得出flag
flag{d7da7aeb-a3d6-4637-aff5-57ac9a00582b}
[SWPU 2020]耗子尾汁
题目:(文件分离、16进制编码转换)
这里题目是一个gif文件,我们首先文件分离一下
两个压缩包
第一个:
发现被防住了哈,出题者竟然预判了我
第二个:
是一个MP4观看视频的时候发现了一串base64
c2lnbl9pbg==解码一下得到sign_in
我们再将mp4分离一下,分离出来一个加密的压缩包,拿刚刚解码出来的结果试试
成功解压里面的文本,发现又一串加密
在将它按照base64 base32 hex 依次解码得到字符串:lvueiakxudsyqehszqhykggsyylkvvi
在根据下面的提示:单表替换密码,
在尝试之后发现是仿射,解码之后得到flag
在解密一下
解得最终的flag为FLAGYOUHAVESIGNEDINSUCCESSFULLY
NSSCTF{you_have_signed_in_successfully}