0%

刷题记录8

你从哪里来

提示:are you from google?

也就是说我们要伪造Referer头,伪造数据是来源于google的,这个Referer区别于XFF

referer 是http的拓展头部,作用是记录当前请求页面的来源页面的地址。服务器使用referer确认访问来源,如果referer内容不符合要求,服务器可以拦截或者重定向请求。

xff 是http的拓展头部,作用是使Web服务器获取访问用户的IP真实地址(可伪造)。

我们直接加一个Referer的头文件即可得到flag

需要注意的是,Referer的内容是http://www.google.com

MD5

有点没意思的题,直接让a等于一个0e开头的密文即可。

文件上传

试了各种办法,终究是自己太菜了,最后看的别人的wp,大概意思就是我们要绕过后缀限制,这里只能用php4,其他的php,php3,php4,php5,phtml,pht,都被过滤了。源码如下

$allowexts = array(‘jpg’,‘gif’,‘jpeg’,‘bmp’,‘php4’);

所以我们用png也传不上去就不足为奇了

根据后端源码:if (strpos($type,“multipart/form-data”) !== False)
应该把Content-Type: multipart/form-data 中的任意一字母改成大写,这是万万没想到的

然后上传用蚁剑连接即可,然后在根目录下得到flag,也可以用find / -name "flag*"来找,不过会有老多目录没有权限访问,出现denied的情况

login1(SQL约束攻击)

  • 约束SQL注入的原理就是利用的约束条件,比如最长只能有15个字符的话,如果你输入的是abcdefghijklmnop(16位),那么保存在数据库里的就是abcdefghijklmno,那么别人用abcdefghijklmno注册一个用户名,就可以登陆。
  • 还有一个可以利用的地方就是SQL在执行字符串处理的时候是会自动修剪掉尾部的空白符的,也就是说"abc"=="abc ",同样我们可以通过注册用户名为"abc "的账号来登陆"abc"的账号。

我们第一想到的用户名当然是admin,所以我们直接注册admin用户,但是显示用户名已经被注册,所以我们根据以上的原理可知,我们可以注册admin+空格来登录admin的账户,密码还是我们设置的密码,这样就能登陆进去,水得很。

需要管理员

进去之后是一个404界面,没有线索,所以我们扫一下后台,发现robots.txt文档,那里面提示有resusl.php文件,我们进去看看。这里说如果我们用get方式提交的x==$password的话,应该就能输出flag,第一想到的当然是输入常见的弱口令了,输入admin得到flag

login2

首先浅浅的试一下,加一个单引号,但毫无反应,直接上slpmap试一试,但是只有一个admin库,而且下面的表里面都没有关键信息。接着我们尝试抓包看看能发现什么,我们抓包后要发往Repeater看返回信息,一开始我没看返回信息,以至于没有看到tip。

tip明显是一段base64加密,我们解密看看,解密结果如下

1
2
3
$sql="SELECT username,password FROM admin WHERE username='".$username."'";
if (!empty($row) && $row['password']===md5($password)){
}

看不懂呜呜呜。看大佬的wp

1
username=' union select 1,md5(1)#&password=1

执行这条语句时由于前面的username为空,所以没有数据返回,但后面的union select 1,md5(1)则会返回1和MD5(1)的值,然后password我们也置为1,从而绕过if语句的判断。

此时我们可以 username=’’, 两个 sql 语句进行联合操作时,当前一个语句选择的内容为空, 我们这里就将后面的语句的内容显示出来

image-20220410115911857

所以本题中的SELECT username,password FROM admin WHERE username=’a’ union select 1,md5(1)– 将会返回

username password
1 md5(1)

这样就能使if判断为真
if (!empty($row) && $row[‘password’]===md5($password))

进入下一个页面,可以进行命令执行

这里的md5(1)也可以直接换成1的MD5密文,但是#不能省略,可能是固定格式吧。然后username后面只有一个单引号,是因为语句里面包含了一个单引号

进去之后,又是一个很迷的界面,说是命令执行,那用tplmap扫一下,结果啥都没有,可能是因为不是SSTI类型的题目吧

然后看了一下wp,实在是迷payload是123| cat /flag > test然后再查看test页面。可能>test是把结果输入到该页面,但是在当前页面不会显示(过滤掉了)。这是利用管道符绕过,采用写入文件二次返回的方法查看结果

所以我自己想了一下,既然可以这样 那我同样可以用123;find / -name "fla*" >test来寻找flag的位置,然后再cat

查询结果如下

image-20220410134541289

然后我们cat /flag >test同样可以得到flag,这里的/flag是绝对文件位置,所以要加/ 不能是flag,cat flag表示的是在当前目录下的flag,很有价值的一道题