攻防世界Web新手区
写在前面
作为一个学习网安的菜鸡,大多时候都不太正经,只会去研究自己感兴趣的东西,导致接触的东西杂而多,但都没有显著的成果,是时候回归web正道了,就从最基础的攻防世界出发,记录我的web学习之路。
view_source
打开页面后发现鼠标左键选中和右键失灵,提示查看源码F12
edge源代码一栏选中页面选项,会显示相关站点信息的页面源码,包含js和html等
这里发现是通过js中 oncontextmenu 和 onselectstart 的DOM事件来禁用鼠标点击右键菜单和目标选中
html注释隐藏flag
1 |
|
get_post
http协议中使用GET方法提交变量, 方法为在url添加?和变量值,多个值用&符号拼接
可以直接在Query一栏添加相关变量
(以GET方式提交变量不受GET方法的限制,可以是POST或者其他方法)
再以POST方法提交变量b,在body处可以通过form-data和www-form-urlencoded方式提交
robots
Robots协议
Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots ExclusionProtocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取.
根据协议,网站管理员可以在网站域名的根目录下放一个robots.txt 文本文件,里面可以指定不同的网络爬虫能访问的页面和禁止访问的页面,指定的页面由正则表达式表示。网络爬虫在采集这个网站之前,首先获取到这个文件,然后解析到其中的规则,然后根据规则来采集网站的数据。
注意,这个协议的存在更多的是需要网络爬虫去遵守,而起不到反爬虫的功能(此地无银三百两)
此协议可以减少搜索引擎爬虫的访问流量, User-agent行中 百度为Baiduspider Google为Googlebot(可查阅相关官网的爬虫列表)
1 |
|
Disallow 行列出的是要拦截的网页,以正斜线 (/) 开头,可以列出特定的网址或模式。要屏蔽整个网站,使用正斜线即可;要屏蔽某一目录以及其中的所有内容,在目录名后添加正斜线;要屏蔽某个具体的网页,就指出这个网页。
本题若没有提示,也可以通过网站后台扫描出敏感页面
查看f1ag_1s_h3re.php页面得到flag
backup
根据提示网站的备份文件,通过dirsearch扫描网站目录
1 |
|
将文件后缀改为.php查看后获取flag
cookie
根据题目提示查看cookie,可在edge的F12开发者选项中选中应用程序一栏查看存储的cookie
访问cookie.php后根据提示查看该页面的http响应头部获取flag
disabled_button
打开页面发现按钮不能点击,审计源码
这里input标签设为disabled,点击按钮执行动作,可以直接修改本地的元素为enable
也可以分析点击按钮的行为,这里点击flag按钮后会向该页面以POST提交auth=flag的表单数据,可以主动发送该请求
weak_auth
登录页面,随便输入提示用户名为admin,再次登录提示使用字典,弱口令爆破
用Burp中Intruder模块进行字典爆破(前提有弱口令字典)密码为123456
simple_php
在php中 == 或者 < 和 > 都是弱类型比较,只会比较值不比较类型
一个数字和一个字符串进行比较,PHP会把字符串转换成数字再进行比较
PHP转换的规则的是:若字符串以数字开头,则取前面所有数字作为转换结果,若无则为0
1 |
|
0e开头在php解释为科学计数法,统一变为0,所以相等(常在md5比较中绕过使用)
is_numeric函数判断是否为数字或者**数字字符串 **(十进制和十六进制)
1 |
|
根据源码构造payload
其中*为除数字外的任意字符
xff_referer
xff为X-Forwarder-For,为http报文请求头格式的一种,用来识别在代理服务模式下客户端的真实ip
referer字段表示页面来源地址,在hackbar中添加如下,不知道为什么edge下的发包有问题 😓
webshell
经典一句话木马的webshell
1 |
|
可以用各种webshell工具连接,这里用antsword
进去发现该环境不出网,无法反弹shell,直接得flag完事
command_execution
典型的命令注入,正常的ping后面注入实现RCE
linux中通过命令操作符来实现
"&"和号操作符
‘&’的作用是使命令在后台运行。只要在命令后面跟上一个空格和 ‘&’。也可以一次性在后台同时运行多个命令。
1 |
|
";"分号操作符
使用’;'将命令分割,使得各个命令依次执行,输出结果,互不影响
1 |
|
"&&"与操作符
如果第一个命令执行成功,与操作符 (&&)才会执行第二个命令,也就是说,第一个命令退出状态是0, 该操作符在检查最后一个命令的执行状态时很有用
程序编译安装(先检查编译情况)
1 |
|
网站访问(先判断主机是否在线)
1 |
|
"||"或操作符
或操作符 (||)很像编程中的 if-else 语句, 该操作符允许你在第一个命令失败的情况下(退出状态为1)执行第二个命令。但第一个命令执行成功(退出状态为0)就不会执行第二个命令,效果为至少得有一个指令执行成功
1 |
|
"|"管道操作符
管道操作符(|)会将第一个指令的输入结果作为第二个指令的输入,最终在屏幕中展示的是最后一个指令的输出情况
1 |
|
上面的指令可以让我们过滤出
system.log
这个文件中包含hello
字符串的行,然后打印到屏幕上。
本题可以通过管道操作符**(|)或者与操作符(&&)和分号操作符(😉**实现命令注入
首先找到flag的位置为 /home/flag.txt
1 |
|
获取flag
1 |
|
simple_js
审阅js代码
1 |
|
乍眼一看很复杂,给了很多混淆,要弄清楚代码的意图;从输入什么返回值不变这一角度触发,故进行无用代码的处理简化
1 |
|
该函数就是将一个固定数字数组进行ASCⅡ字符编码后拼接,与我们的输入没有任何关系
题目中给出可疑的16进制字符串,将变量替换执行
1 |
|
1 |
|
以html方式打开