记录我在Bugku CTF靶场中做的比赛真题,便于自己以后的复习
1.my-first-sqli
进入此关卡,发现参数有username和password
我们尝试在username上注入数字型、字符型参数,后面发现注入字符型的单引号的有报错语句,我们在username上注入下面内容,判断字段数,发现只有2个字段,我们再用联合注入的方式进行注入(密码随便填)
1' order by 3--+
1' union select 1,2--+
得到以下flag
shellmates{SQLi_goeS_BrrRrRR}
2.post-the-get
首先,看到题目和题目中的提示,我们可以猜想本题目的是想通过更改提交方式。
看到题目中post的方式不能提交,一我们可以通过BP抓包将GET的提交方式修改成POST,二我们可以通过修改网页中的源代码来进行提交。我们就第二种方式进行操作,F12查看网页源代码,我们发现form表单的method方式是GET,我们需要通过修改成POST;POST的value值是disable的,我们将disable去除之后,点击题目中的post即可
修改后如下图所示
3.baby lfi
通过lfi的提示我们可以知道该题目考察的是文件包含漏洞,而且打开题目之后,我们通过include的提示也可以猜到是考察文件包含漏洞,题目还给出了使用language参数的提示,并且提示包含关键文件/etc/passwd
我们就可以构造payload
http://82.157.146.43:17180/?language=/etc/passwd
4.baby lfi 2
进入此关题目中的lfi依旧考察文件包含漏洞,提示有关键文件/etc/passwd,并且在此文件下有一个目录languages
我们就可以构造payload,这里的./表示的是当前目录的意思,而../是表示进入上一层目录的意思,默认情况下/etc/passwd是处于根目录下的,我们只有使用多的../跳转到根目录,从而获取到flag
http://82.157.146.43:16755/?language=./languages/../../../../etc/passwd
5.lfi
依旧如此,本题考查文件包含漏洞,题目提示包含关键文件/etc/passwd,并且出现了一个str_replace的函数
意思是将language参数中出现的../替换为空,此时我们需要尝试进行绕过
我们尝试用双写进行绕过../
http://82.157.146.43:17661/?language=....//....//....//....//....//etc/passwd
6.nextGen 1
我们打开此关卡,发现没有任何有用的信息,查看网页的源代码,发现滑倒底下有个.js文件,打开它,发现出现以下提示
-
xhttp.open("POST", '/request');
这一行代码设置了即将发送的请求的类型和方法。POST
是一个HTTP方法,用于向服务器发送数据。'/request'
是请求的URL路径,表示请求将被发送到服务器上的/request
这个端点。 -
xhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
这一行设置了HTTP请求的头信息。Content-Type
头告诉服务器发送的数据类型。application/x-www-form-urlencoded
是表单数据的编码类型,通常用于提交表单数据。这意味着发送的数据将会被编码成URL编码格式,例如key=value&key2=value2
。 -
xhttp.send("service=" + this.attributes.link.value);
这一行发送了实际的请求。send
方法接受一个参数,这个参数是要发送到服务器的数据。在这个例子中,数据是"service="
加上this.attributes.link.value
的值。this
指的是当前的作用域对象,attributes
是该对象的一系列属性,link
是其中一个属性的名字,value
是这个属性的值。这个值被附加到字符串"service="
后面,形成一个键值对"service=value"
,其中value
是link
属性的值。这个键值对就是发送给服务器的数据。
接下来,我们通过BP抓包,构造如下图所示,将GET方式替换成POST,设置request为url请求路径,并设置给定的content-type以及设置service参数,对于设置service参数,使用file协议来获取本地信息。此关为典型的ssrf漏洞,通过利用file协议获取信息
7.nextGen 2
进入此关,前面步骤跟上面题目一致,但是这道题进行了过滤,在service传参时,我们需要过滤
因为上面service的参数只出现了三个点,所以必须要是 xxx://xx.xx.xx/xxxxx 这种格式,常见替代:127.0.0.1 = 127.1 = 127.0.1
service=file://127.0.1/flag.txt