2022西电新生赛

发布于 2022-08-21  606 次阅读


js前端修改代码

  1. 火狐f12打开开发者工具
  2. 打开调试器,点击左下角{}(美化源代码)
  3. 点击左侧标签,设置断点
  4. 控制台中输入想要替换(被设置断点)的语句

伪造访问信息

  • X-Forwarded-For /Client-Ip /Host:访问的主机ip
  • cookie:常使用login=0或login=1来表示登录状态
  • Referer: 请求来自的网址

get,post传参

  • task5中有详细介绍,这里做一些补充

    php中需要传入id的值时,可以随便传入一堆值,只有保证其中一个是id即可

    比如此处传入?miaomiaomaio=1&hahaha=2&flag=a

    
    结果:
    hahaha
  • $_GET传参时是把值以数组形式传入(见task5),如果此时又传入数组,就会将数组的name,key作为传入数组的key,并两者都赋值为value,比如此处传入?a[1]=1

    
    结果:
    miaomiaomiaoarray(1) 
    { ["a"]=> array(1) { [1]=> string(1) "1" } } 

php伪协议(文件包含漏洞)

文件包含函数

  • include
  • require
  • include_once
  • require_once
  • highlight_file
  • show_source
  • flie
  • readfile
  • file_get_contents
  • 1file_put_contents
  • fopen (比较常见)

注意:文件包含默认以.php后缀运行文件,如果为PHP文件,则输出内容,判断是否为php文件不是通过后缀,而是看文件的内容是否为<?php ?>,常用于查看文件内容

有以下协议

filter

  • ?a=php://filter/resource=2.txt(查看非php内容,如果为php内容,则内容会被直接执行,无法查看内容)

  • ?a=php://filter/read=convert.base64-encode/resource=source.txt(php内容可通过此base64编码查看内容)

  • 测试(本目录下)(经过测试,windows返回上一级目录为=后面加../,linux见下)

    
    
    输入:a=php://filter/resource=source.txt
    输出:成功执行了PHP文件

input

  • 执行post内容,post内容为php代码标准格式

  • ?a=php://input

  • 测试:

    
    
    输入:?a=php://input
    post内容:
    输出:失败(hackbar时post失败,暂未测试burp是否可以)

file

  • 查看某个绝对路径的文件

  • ?a=file://D:\phpstudy_pro\WWW\source.txt(关于linux的绝对路径见下面补充)

    
    
    输入:?a=file://D:\phpstudy_pro\WWW\source.txt
    输出:正常

data

  • 执行某个php代码

  • data://text/plain,<?php phpinfo();?>

    
    
    输入:?a=data://text/plain,
    输出:成功

其他

  • zip://用法与phar类似(暂不详查)
  • Phar://可以查看指定压缩包内的文件(暂不详查))

以上协议所需要的条件

file://条件:

  • allow_url_fopen:off/on
  • allow_url_include :off/on

php://条件:

  • allow_url_fopen:off/on
  • allow_url_include :仅php://input 需要on

data://条件

  • allow_url_fopen:on
  • allow_url_include :on

拓展:linux下的绝对路径与返回格式

  • 从根目录算起的路径叫做绝对路径

    例如:

    /home/python/Desktop /usr/bin

  • 切换到上一级目录的上一级目录 cd Desktop cd …/…/

    即.../返回上一级

有哪些根目录:

  • 一 、管理类文件夹:

  • /boot 该目录默认下存放的是Linux的启动文件和内核,例如LILO或GRUB的文件。

  • /initrd 它的英文含义是boot loader initialized RAM disk,就是由boot loader初始化的内存盘。在linux内核启动前,bootloader会将存储介质(一般是硬盘)中的initrd文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的initrd文件系统。

  • /bin 该目录中存放Linux的常用命令。

  • /sbin 该目录用来存放系统管理员使用的管理程序。

  • /var 该目录存放那些经常被修改的文件,包括各种日志、数据文件。如果做mail server,则需在Linux安装时将该目录设置为大空间。

  • /etc 该目录存放系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置 用户信息等。如果做web

  • server,则需在Linux安装时将该目录设置为大空间。

  • /dev该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,访问这些外部设备与访问一个文件或一个目 录没有区别。例如在系统中键入“cd/dev/cdrom”就可以看到光驱中的文件。

  • /mnt该目录默认下有2个分别对应光驱和软驱的文件夹cdrom和floppy。你可以临时将别的文件系统挂在该目录下,例如“挂载光驱 mount/dev/cdrom

  • /mnt/cdrom,查看光驱cd /mnt/cdrom”,养成良好习惯不使用时及时卸载“umount /mnt/cdrom”。

  • 二 、用户类文件夹:

  • /root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录。

  • /home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。

  • 三 、应用程序类文件夹:

  • /usr 用户的应用程序和文件几乎都存放在该目录下。

  • /lib 该目录用来存放系统动态链接共享库,几乎所有的应用程序都会用到该目录下的共享库,其作用类似于Windows里的.dll文件

  • /opt第三方软件在安装时默认会找这个目录,所以你没有安装此类软件时它是空的,但如果你一旦把它删除了,以后在安装此类软件时 就有可能碰到麻烦,相当于windows里面的“C:\Program\Files”。

  • /tmp 用来存放不同程序执行时产生的临时文件,该目录会被系统自动清理干净。

  • 四 、信息类文件夹:

  • /proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的,该目录的内容不在硬盘上而在内存里。

  • /misc 英语意思是杂物箱,可以让多用户堆积和临时转移自己的文件。

  • /lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。

wp

比赛地址:https://ctf.xidian.edu.cn/

web安全之入门指北

  • 看完文档(或者搜索)得到flag

ezhtml

  • 猜测是sql注入
  • 打开界面发现没有交互,get post几个参数发现没反应,猜测不是sql注入,查看源代码,发现js文件,打开发现flag

God_of_Aim

  • 正常打完第一关发现得到了不完整的flag,第二关根本没法玩

  • 查看源代码,发现三个js文件,火狐调试器依次打开,选择美化源代码

  • index.js大致就是实现点击开始或结束按钮时,实例化或调用预设的stop

  • target.js大致是控制游戏小球的动作

  • aimtrainer.js明显有问题,看不懂,但是可以找到两个checkflag函数,猜测这两个函数是判断是否通关的函数,修改checkflag2()的if

    checkflag2() {
    *if (this[_0x78bd[4]] == this[_0x78bd[5]]) {
    *      this[_0x78bd[20]]();
    *     alert(_0x78bd[24])
    !    }
    * }
    
    给标了*的四句设置断点
    本来应该是只修改那个if,但是尝试后发现报错说if结构不完整,只能1把整个if全部修改,同时!标注的语句不能设置断点(未找到原因),只能把下面的属于cheflag2的'}'拿来用
  • 复制粘贴到控制台,得到flag的后半部分

    把
    if (this[_0x78bd[4]] == this[_0x78bd[5]])
    改为
    if (this[_0x78bd[4]] == this[_0x78bd[4]])

cookiehead

ezphp

  • 先解释一个误区,此处highlight_file('source.txt');仅输出了一个与本网页php毫无关系的txt文件(实际上本php代码大部分都在这个txt里),所以txt中显示$flag = 'xxxxxxxx';使flag值刚出来就被覆盖,但是在本php中,flag的值并未被xxxxxxxx覆盖,所以任务目标就是输出flag而不是git泄露之类的

  • 根据php tricks9的内容,可以直接输出flag,也可以利用$giveme和$getout输出flag,但是与un9不同的是$$语句在两个exit()之前,所以只能直接输出flag,不能被exit

  • 第一个if要求get,post至少满足其一,第二个if要求get和post的flag的值都不能为flag

  • 观察两个foreach(),

    get的那个目的是a[key]=value时,$key=$value,比如get flag=a这样就会导致$flag=$a,或者flag[q]=a,这样就会导致$flag=$a,$q=$a,都会导致flag值被覆盖

    post的那个目的是a[key]=value时,$key=value,比如post flag=a这样就会导致$flag=a,无论如何都避免不了,所以就不post辣

  • 直接get ?a=flag&flag=a,把$flag的值给$a,再把$a的值给$flag,flag就不会覆盖辣

What are you uploading

  • 打开先看一下源码,好家伙,前端验证,不就是lfi靶场第一题么,burp修改后缀绕过前端
  • 发送webshell.php一句话木马上去后准备连接蚁剑,看到页面返回:不需要木马,上传flag.php就可以了,上传flag,php,页面显示flag
届ける言葉を今は育ててる
最后更新于 2024-02-07