buuctf刷题
知识点
一、SQL注入
1.万能句型
(1)1’or’1’='1
在密码处注入万能句型
在没有进行SQL注入之前的登陆语句为
Select * From 用户表 Where UserName=xxx and Password=xxx
只有用户输入正确的用户名和密码后才能正常登录,
而在进行SQL注入1’or’1’='1之后的登录句型为
Select * From 用户表 Where UserName=xxx and Password=xxx1'or'1'='1
大概意思就是在1=1的时候就可以登陆,而1=1永远成立,所以只要密码是1‘or’1’='1,不管用户名输入什么,都可以正常登录
(2)’ or 1=1#
在用户名处注入万能句型
在SQL注入之前登陆语句如下,只要输入正确的用户名和密码就可以顺利登陆
Select * From 用户表 Where UserName=xxx and Password=xxx
SQL注入万能句型后
Select * From 用户表 Where UserName=' 'or1=1#' and Password=xxx
#相当于注释掉了后面的 and Password=xxx ,而where相当于判断语句,并且UserName=’ ‘和1=1之间是使用or进行的连接,所以只要UserName=’ '和1=1之间有一个成立就都成立,而1=1恒成立,所以整个语句等价于
Select * From 用户表
所以当在用户名栏里注入’ or 1=1#,不管密码输入什么都可以成功登录
2.通用语法
二、PHP封装协议
php://filter
是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;根据名字filter,可以很容易想到这个协议可以用来过滤一些东西;
使用不同的参数可以达到不同的目的和效果:
resource=<要过滤的数据流>
指定了要筛选过滤的数据流。 必选
read=<读链的筛选列表>
可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
write=<写链的筛选列表>
可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
<;两个链的筛选列表>
任何没有以 read=或write=作前缀 的筛选器列表会视情况应用于读或写链。
主要有一下两个应用:
1、利用base64获得源码
2、通过读写编码实行绕过操作
(1)利用base64获得源码
通常会构造payload:‘php://filter/read=convert.base64-encode/resource=xxx.php’
php://filter与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,阻止其不执行。从而导致任意文件读取。
read=convert.base64-encode
,用base64编码输出,不然会直接当做php代码执行,看不到源代码内容。
php://filter协议,用base64编码的方式来读文件flag.php;这时页面会显示出源文件flag.php经过base64编码后的内容,然后经过base64解码就可以看到flag
部分内容来自 PHP伪协议(封装协议/内置协议)
(2)通过读写编码实行绕过操作
详解php://filter以及死亡绕过
三、文件包含
常见的文件包含函数
1、include()
当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时之给出一个警告,然后继续向下执行。
2、include_once() 功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次
3、require()
Require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。
4、require_once()
require_once()功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。
5、highlight_file()、show_source()
highlight_file()、show_source()函数对文件进行语法高亮显示,通常能看到源代码
6、readfile()、file_get_contents()
readfile()、file_get_contents()函数读取一个文件,并写入到输出缓冲
7、fopen()
打开一个文件或者url
四、Linux命令
1.常见命令和符号
ls
(英文全拼:list files):用于显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录),在命令行中输入“ls /
”并回车,可指定查看根目录下的所有文件及目录 。
ls的命令选项还有很多,可以参考Linux常用命令大全
cat
(英文全拼:concatenate):查看文件内容,用于连接文件并打印到标准输出设备上。
cd
(英文全拼:change directory):切换目录
pwd
(英文全拼:print work directory):显示目前的目录
mkdir
(英文全拼:make directory):创建一个新的目录
rmdir
(英文全拼:remove directory):删除一个空的目录
cp
(英文全拼:copy file): 复制文件或目录
rm
(英文全拼:remove): 删除文件或目录
mv
(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
拼接符
&
:前面和后面命令都要执行,无论前面真假
&&
: 表示前一条命令执行成功时,才执行后一条命令
|
:直接执行后面的语句
||
:表示上一条命令执行失败后,才执行下一条命令
;
:表示命令依次执行
2.被过滤的解决方法
(1)命令中空格被过滤的解决方法
命令中空格被过滤的解决方法:
linux:
{cat,flag.txt}
cat${IFS}flag.txt
cat$IFS$9flag.txt: $IFS$9 $9指传过来的第9个参数
cat<flag.txt
cat<>flag.txt
kg=$'\x20flag.txt'&&cat$kg
(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
windows:
(实用性不是很广,也就type这个命令可以用)
type.\flag.txt
type,flag.txt
echo,123456
在CTF比赛中,命令中空格被过滤的解决方法
(2)命令中cat被过滤的绕过方法
(1)
more
:一页一页的显示档案内容
(2)less
:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页
(3)head
:查看头几行
(4)tac
:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
(5)tail
:查看尾几行
(6)nl
:显示的时候,顺便输出行号
(7)od
:以二进制的方式读取档案内容
(8)vi
:一种编辑器,这个也可以查看
(9)vim
:一种编辑器,这个也可以查看
(10)sort
:可以查看
(11)uniq
:可以查看
(12)file -f
:报错出具体内容
题目
WEB
2023.4.09-2023.4.16
-[极客大挑战 2019]EasySQL
进去之后完全没有头绪,在CSDN上搜了一下
使用万能密码后即可得到flag
但是我对万能密码一窍不通… … …
在CSDN上找了好多文章了解万能密码
使用万能密码后成功登录得到flag
-[极客大挑战 2019]Havefuns
放眼望去给的界面里什么信息都没有
打开网页的源代码后发现在源代码的最后有一个cat变量,需要使用到get传参,从里面可看出来如果cat=dog就输出flag
在进行get传参后,得到本题的flag
-[HCTF 2018]WarmUp
进入靶机后发现界面上没有任何信息
然后查看网页源代码,发现有一个source.php文件
在原来的网址后面进行下图的操作,发现新的网址页面里面有一个hint.php文件
然后查看一下这个文件,发现提示flag在ffffllllaaaagggg里(到这里我就不太清楚该怎么查看这个ffffllllaaaagggg文件,于是在CSDN上查了一下)
在网址后面添加上 ?file=hint.php?/../../../../ffffllllaaaagggg
即可访问最后的页面获得flag
-[ACTF2020 新生赛]Include
进入网页后发现出现了flag.php文件,?file=flag.php猜测文件包含漏洞
采用PHP封装协议,尝试利用base64获得源码,在原网址后构造payloadfile=php://filter/read=convert.base64-encode/resource=flag.php
得到base64
进行base64解密得到本题的flag
-[ACTF2020 新生赛]Exec
百度了一下网址中的PING,发现是Linux ping 命令
输入127.0.0.1|ls
查看此文件目录
发现只有一个index.php,于是输入127.0.0.1|ls /
查看上级目录
输入127.0.0.1|cat /flag
查看flag
-[GXYCTF2019]Ping Ping Ping
靶场里面给的提示是/?ip=
在网址后面写上/?ip=127.0.0.1
在后面输入,/?ip=127.0.0.1|ls
查看目录
发现目录中有flag.php,输入/?ip=127.0.0.1|cat flag.php
查看flag
但是发现输入/?ip=127.0.0.1|cat flag.php
后没有显示出flag,而给出的提示是fxck your space,fxck不知道是啥意思,但是space是空格的意思
发现空格被过滤了后,先用第一种方法/?ip=127.0.0.1|{cat,flag.txt}
发现是符号{}被过滤了,所以方法一和方法二都包含{},所以都不能用,
试一下方法三/?ip=127.0.0.1|cat$IFS$9flag.php
发现flag被过滤了,在查看目录时,有两个文件,尝试打开第二个文件
得到如下页面
查看源代码
通过代码审计发现好多东西都被过滤了,源代码里有一个变量a
大佬说 变量拼接字符串——将a的值覆盖,然后进行绕过
构造payload:/?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php
查看源代码,发现flag