南邮-Web(二)

前言

最近又做了南邮的Web题,发现有的题崩了。不过已经把未崩的Web题做完了,再次总结一下

Web15:伪装者

在这里插入图片描述
题目没有提示。点进去发现
在这里插入图片描述
发现只能本地登录,才能得到flag。所以进行IP欺骗,即可得到flag。一般情况下是XFF(X-Forwarded-For)请求伪造。不过这道题试过之后,发现并没有什么用。查询百度:
IP欺骗(XFF头等)
由此,可以使用Client-IP: 127.0.0.1进行本地IP欺骗。
在这里插入图片描述
伪造之后,Forword发包,得到flag
在这里插入图片描述

Web16:Header

发现题崩了,不过我下载过源码,所以本地搭建做一下
在这里插入图片描述
根据题目描述,很明显想到http请求头和响应头。截包发现flag在响应头里
在这里插入图片描述

Web17:上传绕过

在这里插入图片描述
由题目描述,可以知道这道题考察的是文件上传漏洞。因为之前总结过,所以直接开始做题。
先随便上传一个文件,发现要求上传php后缀的文件
在这里插入图片描述
然后写一个php的一句话木马:

<?php @eval($_POST['a']); ?>

再上传php文件
在这里插入图片描述
绕过思路:先将webshell.php.php后缀改为.png。然后上传该png文件,绕过黑名单,再将.png后缀变为.php。最后再去掉.php
由此想到了00截断进行绕过,并且是POST型的。
先上传webshell.png,在/uploads/后加上webshell.php+空格
在这里插入图片描述
然后将空格0x20改为0x00
在这里插入图片描述
forward发包,得到flag
在这里插入图片描述

Web18:SQL注入1

在这里插入图片描述
根据题目描述,很明显是SQL注入。
在这里插入图片描述
点击Source,查看源码
在这里插入图片描述
发现当SQL查询有返回值,且user=”admin”时,即可得到flag。并且闭合方式为')
所以构造payload:

admin')#

在这里插入图片描述

Web19:pass check

在这里插入图片描述
strcmp() 函数
strcmp() 函数比较两个字符串。strcmp() 函数是二进制安全的,且区分大小写。
该函数返回:

0 - 如果两个字符串相等
<0 - 如果 string1 小于 string2
>0 - 如果 string1 大于 string2

代码审计一下:
1、post传参,且参数变量为pass,赋值给变量$pass。变量$pass1的值被隐藏。
2、如果设置了$pass,且strcmp() 函数返回0,即可得到flag。
3、要使strcmp() 函数返回0。可以$pass==$pass1,也可以strcmp(array,string)=null=0
4、所以使strcmp返回NULL就可以得到flag
在这里插入图片描述

Web20:起名字真难

在这里插入图片描述
ord()函数
代码审计一下:
1、get传参,参数值通过自定义函数进行检查,对参数值的每一位进行检查。
2、如果ascii码>=1的ascii且<=9的ascii,返回false。即题目要求不能输入1-9数字,
3、但是输入的字符串必须和54975581388相同
4、所以可以用和54975581388等值的16进制表示(利用了php的弱类型的特性)
10进制转16进制
在这里插入图片描述
get传参,得到flag
在这里插入图片描述

Web21:密码重置

在这里插入图片描述
题目提示账号为admin,要进行密码重置。打开题目
在这里插入图片描述
账号无法修改,只能重置账号ctfuser。所以抓包修改
在这里插入图片描述
发现Y3RmdXNlcg==比较特殊,是Base64加密的,解密结果发现是ctfuser
在这里插入图片描述
所以想着把admin进行Base64加密,Y3RmdXNlcg==替换成admin加密结果
在这里插入图片描述
Forward发包,得到flag
在这里插入图片描述

Web22:php 反序列化

反序列化?!还好已经学习过。审计代码,开始做题
在这里插入图片描述
代码审计一下:
1、stripslashes()函数的作用是删除反斜杠,代码的意思是如果添加了反斜杠,则将反斜杠\删除。

if(get_magic_quotes_gpc()){
    $pass=stripslashes($pass);
}

2、然后将pass进行反序列化操作,并赋值给变量o。

$o = unserialize($pass);

3、如果对象o赋值成功,将对象o的secret变量设置为*,并判断对象o的secret变量和enter变量是否相等,===判断数值及属性,如果相等输出flag。

if ($o) {
    $o->secret = "*";
    if ($o->secret === $o->enter)
        echo "Congratulation! Here is my secret: ".$o->secret;
    else 
        echo "Oh no... You can't fool me";
}

不知道secret的值。所以我们想到了引用a=&b,即PHP对象深浅拷贝
构造POC(在初始化的时候将$this->enter=&$this->secret进行引用):

<?php 
class just4fun {
    var $enter;
    var $secret;
    function just4fun()
    {
    $this->enter=&$this->secret;
    }
    }
echo serialize(new just4fun());
?>

得到序列化字符串O:8:"just4fun":2:{s:5:"enter";N;s:6:"secret";R:2;}
在这里插入图片描述
构造payload得到flag(N表示NULL,R表示对象引用):
在这里插入图片描述
提交flag发现不对,因为题有问题。。。。。。。
PHP序列化格式详解
a - array
b - boolean
d - double
i - integer
o - common object
r - reference
s - string
C - custom object
O - class
N - null
R - pointer reference
U - unicode string

Web23:SQL Injection

在这里插入图片描述
题目提示:反斜杠可以用来转义,仔细查看相关函数的用法
打开题目,查看源码
在这里插入图片描述
magic_quotes_gpc函数
在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。
单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为Off,那么我们就必须调用addslashes这个函数来为字符串增加转义。
stripslashes() 函数
删除反斜杠
htmlentities() 函数
把字符转换为 HTML 实体

htmlentities($str, ENT_COMPAT); // 只转换双引号
htmlentities($str, ENT_QUOTES); // 转换双引号和单引号
htmlentities($str, ENT_NOQUOTES); // 不转换任何引号

代码审计一下:
1、传入GET类型的username以及password,首先调用了clean方法
2、clean方法首先判断是否开启了添加反斜杠,如果添加了,使用stripslashes()删除反斜杠,然后调用htmlentities()方法将把字符转换为 HTML 实体,htmlentities($str, ENT_QUOTES); // 转换双引号和单引号
3、因为带反斜杠的单引号,被转义为字符了,无法参与闭合操作。下一步考虑的是将单引号闭合
4、可以通过反斜杠对单引号进行转义。
当我们输入username=admin&password=123时,会将username后的单引号进行转义,构造语句如下:

SELECT * FROM users WHERE name=<font color=#FF0000 size=3>'</font>admin' AND pass=<font color=#FF0000 size=3>'</font>123'

所以将第一个单引号和第三个单引号进行闭合。

SELECT * FROM users WHERE name=<font color=#FF0000 size=3>'</font>admin' AND pass=<font color=#FF0000 size=3>'</font> or 1 #'

payload

?username=admin\&password=or 1 %23

?username=admin\&password=or 1=1--+

在这里插入图片描述

Web24:综合题

题目描述没提示,查看题目
在这里插入图片描述
我也不知道是什么玩意儿。不过之前做过颜文字aaencode,看着两者比较像,想着是不是可以用谷歌的Console,发现可以。
在这里插入图片描述
不过还是了解一下这是什么编码。看大佬博客发现这是jsfuck编码。可使用浏览器控制台直接解密,也可使用在线JSfuck解密工具
访问得到的php文件
在这里插入图片描述
提示:TIP在我脑袋里,在文件的header里发现了history of bash
在这里插入图片描述
百度一下history of bash。发现在Unix中 , 会生成一个 .bash_history 的文件 , 记录了用户的操作历史
尝试访问这个文件 :
在这里插入图片描述
在bash_history中记录了执行压缩包的操作,所以我们访问以下flagbak.zip
http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/flagbak.zip
开始自动下载文件,打开后得到flag!
system题崩了。。。

Web25:SQL注入2

在这里插入图片描述
题目提示union查询。打开题目,点击Source,查看源码
在这里插入图片描述
strcasecmp() 函数
strcasecmp(string1,string2)比较两个字符串。
该函数返回:

0 - 如果两个字符串相等
<0 - 如果 string1 小于 string2
>0 - 如果 string1 大于 string2

代码审计一下:
1、post传入user赋值给$user,传入pass经md5加密赋值给$pass
2、$query等于查询pw字段返回结果。如果有返回值,则$query[pw]为ture,否则为false
3、如果变量存在,并且,$pass$query[pw]相等(不区分大小写),输出flag
所以考虑在$user上加上一个union语句,即向$query的结果集中在加一条。
payload

' union select md5(123)#&pass=123

在这里插入图片描述

Web26:密码重置2

在这里插入图片描述
依旧是密码重置,题目有三条提示:

  1. 管理员邮箱观察一下就可以找到
  2. linux下一般使用vi编辑器,并且异常退出会留下备份文件
  3. 弱类型bypass

查看源码,发现管理员邮箱
在这里插入图片描述
百度一下,vi编辑器异常退出会留下的备份文件:
第一次产生的交换文件名为“.file.txt.swp”;再次意外退出后,将会产生名为“.file.txt.swo”的交换文件;而第三次产生的交换文件则为“.file.txt.swn”;依此类推。
由此再次查看源码
在这里插入图片描述
发现submit.php,所以访问.submit.php.swp,得到验证源码
在这里插入图片描述
代码审计一下:
$token长度为10,数值为0,并且邮箱号和token不为空。
所以输入刚才的管理员邮箱,token为0000000000
最终,得到flag
在这里插入图片描述
在这里插入图片描述

Web27:file_get_contents

在这里插入图片描述
题目标题file_get_contents,想到之前学文件包含漏洞时遇到过
file_get_contents() 函数把整个文件读入一个字符串中。
打开题目查看源码
在这里插入图片描述
传入一个文件,经file_get_contents() 函数把整个文件读入一个字符串中,如果字符串等于meizijiu,得到flag。
想到了学文件包含漏洞时的php伪协议
这里应该是php://input (读取POST数据)。file_get_contents(“php://input”)的使用方法
php伪协议也是可以利用http协议的,即可以使用POST方式传数据
在这里插入图片描述

Web28:变量覆盖

在这里插入图片描述
提示:变量覆盖
打开题目,查看源码
在这里插入图片描述
emmm。。。不会,查看大佬博客
分析代码:可变变量key获取了一个普通变量value的值作为这个可变变量的变量名。使用foreach来遍历数组中的值,再将获取到的数组键名作为变量,数组中的键值作为变量的值。因此就产生了变量覆盖漏洞。
通过地址栏进行GET传参,变量覆盖便形成了

$$key = $name
$value = meizijiu233
$name == "meizijiu233"

所以得到flag
在这里插入图片描述


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 qwzf1024@qq.com

×

喜欢就点赞,疼爱就打赏