CTF-WeChall-第二天
2020.09.10
奥力给,举步维艰的时候就是要一边做一遍记,虽然慢但是不要嫌弃,要不然就是举步不前
做题搞起来
第一题 MySQL I
- 关键代码:
<?php
# Username and Password sent? 检查是否是空
if ( ('' !== ($username = Common::getPostString('username'))) && (false !== ($password = Common::getPostString('password', false))) ) {
auth1_onLogin($chall, $username, $password);
}
function auth1_onLogin(WC_Challenge $chall, $username, $password)
{
$db = auth1_db();
$password = md5($password);
# 用户名和密码直接连接,没有过滤和其他障碍,所以直接简单注入。
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
if (false === ($result = $db->queryFirst($query))) {
echo GWF_HTML::error('Auth1', $chall->lang('err_unknown'), false); # Unknown user
return false;
}
}
?>
- 构造username和password
username =admin'#
password =hehe - 绿了绿了,多么令人激动的颜色

- 经验教训
- 这个题有个比较坑的地方,我之前说过,以后用井号
#,就用%23代替,但是这里是不可以的……我分析了一下原因,我之前是用burp直接修改的url,所以转码之后的比较靠谱,因为内部可能会有转回来这个过程要走,但是这里应该是没有自动转吗这个流程要走,真拉垮 ::这个符号第一次见,php中的基本语法,我也很拉垮,详细用法在这,总之一句话,就是用来访问其他类、父类中的方法或者参数,可谓是流氓符号- 还有就是,如果知道字符串没有进行过滤是直接拼接的查询语句,就直接简单注入就可以了。额,好像这是废话。
- 这个题有个比较坑的地方,我之前说过,以后用井号
第二题 MySQL II
- 关键代码
<?php
/* TABLE STRUCTURE
CREATE TABLE IF NOT EXISTS users (
userid INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
password CHAR(32) CHARACTER SET ascii COLLATE ascii_bin NOT NULL
) ENGINE=myISAM;
*/
# Username and Password sent?
if ( ('' !== ($username = Common::getPostString('username'))) && (false !== ($password = Common::getPostString('password', false))) ) {
auth2_onLogin($chall, $username, $password);
}
function auth2_onLogin(WC_Challenge $chall, $username, $password)
{
$db = auth2_db();
$password = md5($password);
$query = "SELECT * FROM users WHERE username='$username'";
if (false === ($result = $db->queryFirst($query))) {
echo GWF_HTML::error('Auth2', $chall->lang('err_unknown'), false);
return false;
}
#############################
### This is the new check ###
if ($result['password'] !== $password) {
echo GWF_HTML::error('Auth2', $chall->lang('err_password'), false);
return false;
} # End of the new code ###
#############################
}
?>
这段代码的意思就是,先根据用户名,从数据库里查到密码,推测应该是密码的md5结果,因为他后来把查询结果跟我们输入的密码的md5进行对比。这个操作还是比较骚的,比一般的注入确实升级了一个水平,hhhhh~
关键点:这个题关键的点我认为在于源代码最前面,因为他给了数据库的源代码,所以我们知道他第一步中查用户名的时候的正常输出是三列,从这里我们就可以构造一下输出,因为他并没有对字符进行过滤,所以我们基本上还是可以肆无忌惮的操作
4.在这里的输入如下:
username =hehe' UNION SELECT 1,'admin',md5('hehe')#
password =hehe解释一波第4步输入:
- username中:
- 第一个hehe,是随便输的,只要是让第一个select输出为空就行,这样才能保证我们第二个select的输出能排在第一行,因为页面源代码文件中只读取了查询结果的第一行;
- 第二个SELECT语句,分别对应正常输出的三列结果,对号入座。第一列无所谓,第二列是要求的admin用户,第三列是admin经md5后的值,我们只要保证md5()括号中的字符跟password中输入的一样就ok,相当于自己给他搞了一个密码;
- password中:
- 只要和username中的md5括号中输入的一样就ok。
- 继续绿起来

经验教训
- 好像没啥经验教训,如果非要说的话,那就是,,,,,奥力给,前辈们tql;
- 思路很重要,像这个题,他根据用户名查密码进行比对,我们就让控制他的输出,让他输入我们想要的结果,然后再在密码处输入我们想给的结果,这样就能匹配了。
第三题 Register Globals
- 关键代码
Register Globals
<?php
if (isset($login))
{
echo GWF_HTML::message('Register Globals', $chall->lang('msg_welcome_back', array(htmlspecialchars($login[0]), htmlspecialchars($login[1]))));
if (strtolower($login[0]) === 'admin') {
$chall->onChallengeSolved(GWF_Session::getUserID());
}
}
?>
- 关键代码中比较关键的算是题目吧,这个题目给了我们方向。什么是Register Globals?身为一个菜我一开始真是不知道啥意思,搜了搜之后了解个大概意思就是某个变量被弄成了全局变量,谁都能访问,url当然也ok,这就是这个题想告诉我们的。
- 解题payload:
payload =http://www.wechall.net/challenge/training/php/globals/globals.php?login[0]=admin - 这道题按照正常思路,login这个变量我们是没办法赋值的,因为他只是一个普通变量,但是如果在php的php.ini配置文件中将
register_globals的值设为on,那就是开启全局变量的意思,我粗略的理解为php文件中的变量全部变成了全局变量,就像是$_GET、$_POST这种的通过url就可以直接访问和赋值的,所以就有了步骤3中的payload。 - 经验教训
- php有个配置文件叫
php.ini,文件里有个变量叫register_globals,控制全局变量的开启与关闭;
- php有个配置文件叫
CTF-WeChall-第二天的更多相关文章
- 巅峰极客第二场CTF部分writeup
word-MISC 微信回答问题+word字体里. sqli-WEB 注册个admin空格即可,长字符截断. 晚上把后续的写出来.现在睡觉
- 网络安全学习和CTF必不可少的一些网站
[转载备用] 原文地址 http://blog.csdn.net/ida0918/article/details/52730662 http://www.sec-wiki.com/skill/ 安全 ...
- CTF比赛中SQL注入的一些经验总结
ctf中sql注入下的一些小技巧 最近花了一点时间总结了各大平台中注入的trick,自己还是太菜了,多半都得看题解,就特此做了一个paper方便总结 注释符 以下是Mysql中可以用到的单行注释符: ...
- 【转】个人总结-网络安全学习和CTF必不可少的一些网站
转自:http://blog.csdn.net/ida0918/article/details/52730662 学习的地方很多,不能一一列举,一些优秀的网址和博客可能也没有提到,大家补充吧:P就简单 ...
- CTF常见加密方式汇总
1.栅栏密码 在IDF训练营里做过一道关于栅栏密码的问题. 栅栏密码的解法很简单,也有点复杂,字符长度因数多得会有很多个密码.对,栅栏密码的解法就是:计算该字符串是否为合数,若为合数,则求出该合数除本 ...
- 【Wechall.net挑战】Anderson Application Auditing
Wechall.net是一个国外用于练习CTF和攻防的网站,国内资料writeup不多,只有个别几篇.作为小白,近日玩了几道有意思的题目,在此分享 题目地址:http://www.wechall.ne ...
- 网络安全与CTF在线学习资源网站
http://www.sec-wiki.com/skill/ 安全技能(里面渗透逆向编程都有介绍) http://blog.knownsec.com/Knownsec_RD_Checklist/ 知道 ...
- 个人CTF资源聚合
i春秋 幻泉 CTF入门课程笔记 视频地址 能力 思维能力 快速学习能力 技术能力 基础 编程基础 (c语言 汇编语言 脚本语言) 数学基础 (算法 密码学) 脑洞 (天马行空的想象推理) 体力耐力( ...
- 入CTF坑必不可少的地方-保持更新
0x00 前言 没有交易,没有买卖,没有排名,纯属分享:p 0x01 CTF介绍 CTF领域指南CTF介绍大全CTF赛事预告 0x02 CTF练习 BIN:reversingpwnableexploi ...
- 参加 Tokyo Westerns / MMA CTF 2nd 2016 经验与感悟 TWCTF 2016 WriteUp
洒家近期参加了 Tokyo Westerns / MMA CTF 2nd 2016(TWCTF) 比赛,不得不说国际赛的玩法比国内赛更有玩头,有的题给洒家一种一看就知道怎么做,但是做出来还需要洒家拍一 ...
随机推荐
- Windows 右键 照片查看器 不见了--解决办法
桌面新建 一个文本文档,将下边复制进去,另存为命名例如为:1.reg 双击运行1.reg,点‘是’,点确认即可. Windows Registry Editor Version 5.00 ; Chan ...
- java多线程之消费生产模型
需求:要求仓库最大容量为4,且一共只生产20台电视机,下面的代码只适用于一个生产者一个消费者,有没有大佬提点建议怎么改成一对多或多对多不会出现死锁情况 class Warehouse { privat ...
- Kubernetes使用Eedpoints连接外部服务端口
Kubernetes使用Eedpoints连接外部服务端口 背景: 在Kubernetes的使用环境中,我们经常要连接外部的一些服务,比如mysql Elasticsearch kafka 等等外部的 ...
- .NetCore使用Redis,StackExchange.Redis队列,发布与订阅,分布式锁的简单使用
环境:之前一直是使用serverStack.Redis的客服端,今天来使用一下StackExchange.Redis(个人感觉更加的人性化一些,也是免费的,性能也不会差太多),版本为StackExch ...
- Java高级特性——反射机制(第一篇)
——何为动态语言,何为静态语言?(学习反射知识前,需要了解动态语言和静态语言) 动态语言 >是一类在运行时可以改变其结构的语言,例如新的函数.对象.甚至是代码可以被引进,已有的函数可以被删除或者 ...
- .NET5.0 Preview 8 开箱教程
.NET5.0 Preview 8 开箱教程 前言 首先,看到 .NET5.0 Preview 8 发布后,作为一枚基层应用开发人员,很想要体验一下新版本的魅力:这可能就是程序员对新技术的一种执着吧. ...
- iOS开发知识梳理博文集
前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱.所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础.UI控 ...
- oeasy教您玩转linux010108到底哪个which
到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?
- Unity中利用柏林噪声(perlinnoise)制作摇摆效果
perlinnoise是unity中Mathf下的一个函数,需要两个float参数x和y进行采样,返回一个0-1的float型. 项目里经常要随机摇摆某些东西,比如摄像机,某个随机运动的目标等等,都可 ...
- Hihocoder 1116 计算
这题最开始的时候看到线段树吧,没找到好的做法 想了下既然是乘积和 (-) (--) (---) 在脑子里就是这种线条位于各个位置,然后各种长度代表连续的乘积个数 然后把所有情况累加起来,但是并不好算 ...





