js前端修改代码
- 火狐f12打开开发者工具
- 打开调试器,点击左下角{}(美化源代码)
- 点击左侧标签,设置断点
- 控制台中输入想要替换(被设置断点)的语句
伪造访问信息
- 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
- 打开发现提示:仅限本地访问,考虑伪造X-Forwarded-For为127.0.0.1
- burp抓包,添加X-Forwarded-For:127.0.0.1(注意不能加在最后一行,否则会无响应,不知道为啥)
- 又提示请先登录,修改cookie:login=1
- 又提示you are not fron http://17.0.0.1/index.php,添加referer为referer:http://127.0.0.1/index.php即可(又莫名其妙的不能放最后一行,放倒数第二行吧)
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