抓包看看
使用本地,抓包后修改就可以了,再次访问新的地址就可以了
X-Forwarded-For:127.0.0.1
import requests
url='http://node1.anna.nssctf.cn:28029/hello.php'
headers = {
'User-Agent': 'WLLM',
'X-Forwarded-For':'127.0.0.1'
}
r=requests.get(url,headers=headers)
print(r.text)
后面第二种使用脚本就可以了
使用后台扫描工具(御剑后台扫描、dirmap等)也可以看到存在一个robots.txt;
好像是robots.txt协议,再访问/cl45s.php文件
观察wllm类里面的__destruct方法有一句话:$this->admin=="admin"&&$this->passwd=="ctf",满足就发flag。$admin和$passwd在类里面被固定了,不能控制啊。程序接收一个变量名为p的GET参数,且对其进行反序列化操作 , 这串被反序列化后,刚好是能满足条件的 。
payload如下
O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}
关于robots.txt,robots协议也称爬虫协议、爬虫规则等,是指网站可建立一个robots.txt文件来告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,而搜索引擎则通过读取robots.txt文件来识别这个页面是否允许被抓取。 但是,这个robots协议不是防火墙,也没有强制执行力,搜索引擎完全可以忽视robots.txt文件去抓取网页的快照。 如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。
使用网站扫描工具(御剑后台扫描,dirmap等)扫描网站后台 dirsearch也是可以的
访问phpinfo.php,查找flag得到
下面我们就可以双击访问就可以了,我们这里可以先选择PHP类型的,这样会比较扫的比较快。
就先输入127.0.0.1看看,但是没有什么收获
抓包看看,修改一下,发现目标文件
cat /flag这个是没有什么过滤的,前面的题目有过滤
提示查看源代码,有点意外,但是ctrl茄u也不行,F12也不行,但是后面多试了几次ctrl茄u也可以查看源代码,其他师傅
1.在地址栏里面ctrl茄u,这样也是可以看到源代码的。
2.运用web开发者工具。
点着点的就出来,交了看看,是对的,有点意外,就是死了之后出答案了
但是还是要学习一下,运气了
在game.js中看到异常,jsfuck解密seeeeeeeecret的值,认识jsfuck
[HUBUCTF 2022 新生赛]checkin
熟悉的就是双等号弱比较,后面的就是用户名和密码经过反序列之后还是要相等
flag.php把username和password替换了
特性布尔类型True
与非零非NULL变量比较都会是True
payload
?info=a:2:{s:8:"username";b:1;s:8:"password";b:1;}
如果b后面的数字不相等了,就会出现报错了
点击Run Code按钮将会执行php_code
文本框中的PHP代码,并将执行结果显示在页面上的run_result
元素中。
提示在根目录下,用系统命令试一下
sysytem("ls /");
sysytem("cat /flag");
开始的时候用成单引号了出现报错信息,用双引号就成功了
错误信息 “syntax error, unexpected ‘’);?>'” 意味着在某个位置上的代码语句出现了一个意外的结束标记,这通常是由于缺少分号、括号等常见的语法错误导致的。
错误信息中给出的 “T_ENCAPSED_AND_WHITESPACE” 提示需要注意单引号和双引号之间的引用格式是否正确。
在编写 PHP 代码时,应该遵循语法规则,并使用适当的括号、引号和分号等符号,以确保代码可以正确执行。如果确实遇到了语法错误,建议使用代码编辑器或开发环境中的语法高亮显示功能来检测和修复错误。
发现是php把单引号里面的cat /flag识别成了字符串类型,所以要用双引号。
是一道游戏题
先看源代码,前面刚还有一道题要看game.js代码,这道题看看这个做法行不行,
找到之后 先查找nss,但是没有什么发现,之后再试一试flag,最后还是找到了。
先试一下system("ls /"); 好像不行,过滤一些东西,与前面ping题不一样了。
使用反引号绕过
ip=;cat$IFS$9`ls`
原理讲解:linux下,会先执行反引号下面的语句
在这里会执行ls,ls的结果是“index.php flag.php”所以最后执行的语句等价于
cat index.php flag.php
右键查看页面源码即可得到flag
还有一种做法
linux内联执行
;ls
看到两个文件,接着读取。
;cat$IFS$9`ls`
另外一种就不是很理解了
将 payload 进行 base64 编码 并通过管道符作为 base64 -d 进行解码读取flag
;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
同样也是右键查看源代码看到的,
看看两个文件下面都有什么,在js下面看到答案,因为前面连着都是在js里面找到的
黑名单过滤许多东西,
要绕过⿊名单和正则表达式。
不能异或,不能有字⺟数字。
常规的无字母RCE主要有三种方式:
先传⼊system(ls /),查看所有⽂件,但是没有什么发现
异或和自增都被静止了,就用取反,不用异或和或运算是因为^和`被过滤了。
将system和ls /进行url编码取反
cat /flllllaaaaaaggggggg也进行url编码取反
payload
?wllm=(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%D1%D1%D0%D1%D1%D0%D1%D1%D0%99%D5);
打开有一个提交框,暂时没有什么思路,要运用特殊的万能密码
ffifdyop
ffifdyop经过md5加密后为:276f722736c95d99e921722cf9ed621c
再转换为字符串:'or’6<乱码> 即 'or’66�]��!r,��b
而 Mysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是1select * from 'admin' where password='' or '6xxxxx',等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数。
因此ffidyop相当于一个特殊的万能密码,这里就与题目相呼应了
提交我们再去查看一下源代码, 需要get传入,弱比较
x=s1885207154a
y=s1836677006a
并且会发现新的文件
此时我们就需要注意的是要回去重新访问新的文件,而不是接着访问新文件。
接着绕过就可以了,只是变成强等于了,这里要注意提交的时候可能在前后会有空格。