XCTF web新手区
1.view_source
F12查看源码
2.robots
根据题目提示访问http://111.200.241.244:55133/robots.txt
发现flag文件
访问http://111.200.241.244:55133/f1ag_1s_h3re.php
3.backup
方法一:如果网站存在备份文件,常见的备份文件后缀名有:“.git” 、“.svn”、“ .swp”、“.~”、“.bak”、“.bash_history”、“.bkf” 尝试在URL后面,依次输入常见的文件备份扩展名。
尝试到bak时发现备份文件下载后打开发现flag
方法二:
直接上手目录扫描工具(这里我用的是dirmap)
下载地址:dirmap
发现备份文件地址后续操作同上。
4.cookie
查看数据包
在请求头里面发现cookie值有问题,然后访问cookie.php
查看响应头,发现flag.(也可以直接使用burp抓包)
5.disabled_button
方法一:将disable=“”去掉,再点击按钮
方法二:审计from表单,使用post传参auth=flag
6.weak_auth
随便登录然后提示用户必须是admin
之后尝试弱密码123456 ,admin, root等。我这里试出来密码123456
登进去之后发现答案
也可以爆破。
字典地址:常用密码
爆破发现密码为123456,登进去发现flag。
7.simple_php
(1)这里包含了config.php
(2)url接收参数a和b的值
(3)如果$a等于0 and a , 输 出 a,输出 a,输出flag1
(4)如果$b是数字或者字符串那么退出当前脚本
(5)如果$b>1234,输出$flag2。所以,这里我们既要保证输出$a,$b,又要保证$b是数字,那么就用到php的弱类型比较了
掌握php弱类型比较
php中其中两种比较符号:
==:先将字符串类型转化成相同,再比较
===:先判断两种字符串的类型是否相等,再比较
字符串和数字比较使用==时,字符串会先转换为数字类型再比较
var_dump('a' == 0);//true,此时a字符串类型转化成数字,因为a字符串开头中没有找到数字,所以转换为0
var_dump('123a' == 123);//true,这里'123a'会被转换为123
var_dump('a123' == 123);//false,因为php中有这样一个规定:字符串的开始部分决定了它的值,如果该字符串以合法的数字开始,则使用该数字至和它连续的最后一个数字结束,否则其比较时整体值为0。
举例:
var_dump('123a1' == 123);//true
var_dump('1233a' == 123);//false
is_numeric () :如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE,注意浮点型返回空值,即 FALSE。
随便传个符合条件的a b参数:http://111.200.241.244:57673/?a=c&b=46758.333
8.get_post
工具hackerbar.也可以使用burp
用get post传参即可得到flag.
9.xff_referer
xff是告诉服务器当前请求者的最终ip的http请求头字段
通常可以直接通过修改http头中的X-Forwarded-For字段来仿造请求的最终ip
再根据提示设置referer得到flag
10.webshell
使用蚁剑链接,发现flag
11. command_execution
预备知识:
command1 & command2 :不管command1执行成功与否,都会执行command2(将上一个命令的输出作为下一个命令的输入),也就是command1和command2都执行
command1 && command2 :先执行command1执行成功后才会执行command2,若command1执行失败,则不执行command2
command1 | command2 :只执行command2
command1 || command2 :command1执行失败,再执行command2(若command1执行成功,就不再执行command2)
这里我们尝试使用命令连接符,因为我们知道flag在flag.txt中,所以我们查找该文件
127.0.0.1 & find / -name flag.txt
127.0.0.1 & cat /home/flag.txt
12.simple_js
随便输个密码后查看页面源代码
进行代码审计,发现不论输入什么都会跳到假密码,真密码位于 fromCharCode
先将字符串用python处理一下,得到数组[55,56,54,79,115,69,114,116,107,49,50]
s="\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"
print (s)
再将所得到的ASCII码转化为字符,得到786OsErtk12
a = [55,56,54,79,115,69,114,116,107,49,50]
c = ""
for i in a:
b = chr(i)
c = c + b
print(c)
根据题目提示规范格式即可得到flag