首页 > 其他分享 >2017年全国大学生信息安全竞赛---wanna to see your hat?

2017年全国大学生信息安全竞赛---wanna to see your hat?

时间:2023-05-19 17:03:19浏览次数:55  
标签:空格 .+ 匹配 name 然后 --- see hat 函数


======================================

个人收获:

1.SQL注入语句中用/**/代替空格    (虽然之前就知道)

 

 

 

 

=========================================

 

 

题目界面:

2017年全国大学生信息安全竞赛---wanna to see your hat?_数组

 

 

常规的点击连接查看页面看到接下来几个页面

2017年全国大学生信息安全竞赛---wanna to see your hat?_php_02

2017年全国大学生信息安全竞赛---wanna to see your hat?_数组_03

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_04

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_05

 

没有什么特别的发现,同时也查看了网页的源码也没有什么发现。

 

然后拿出burp挂上代理看看 网页的详细访问内容

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_06

发现3个302跳转

我们都把他们发送到repeater里面重发一边看看详细内容

其中2个都一样没什么用,有用的是这个302

 

2017年全国大学生信息安全竞赛---wanna to see your hat?_php_07

尝试修改name发送回去会返回以下内容

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_08

告诉你语句了,想让你SQL注入吧,然后我利用SQLMAP进行POST注入无果,自己手动进行测试

发现过滤了空格

2017年全国大学生信息安全竞赛---wanna to see your hat?_php_09

,过滤   '      会转移为\'   

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_10

 同时对username的长度还进行了限制

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_11

但是幸运的#并没有被过滤掉,但是接下来还是没什么头绪

看了别人的writeup才知道还有个源码泄露        (回过头来看我想绕过SQL注入真的经验丰富的人可能直接得出flag)

 

然后我用源码泄露文件扫描脚本进行扫描

下载地址:https://github.com/langzi98/scan-backup-langzi-

2017年全国大学生信息安全竞赛---wanna to see your hat?_php_12

是一个svn泄露

然后我们用利用工具把它的源文件弄出来

 

利用工具下载地址:

https://github.com/kost/dvcs-ripper

放在kali中进行恢复

2017年全国大学生信息安全竞赛---wanna to see your hat?_php_13

然后就恢复出这些文件

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_14

然后对他们进行源代码审计

 

首先我看到这个

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_15

isset检查session是否为设置,不为空在判断session是否是green是的话就输出绿帽子,不是的话就输出黑帽和flag

那我们在找找什么位置设置session

然后我们在login.php中找到这段设置session代码

2017年全国大学生信息安全竞赛---wanna to see your hat?_数组_16

首先看下str_replace函数

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_17

然后我们就知道name参数先被waf函数处理   再用trim去除两边的空格        再通过str_replace函数把文字中的单引号都去掉

然后我们在看看waf函数

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_18

是正则表达式 我就把 网上正则的只是拿过来吧

\b:

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_19

.+:就是匹配.+两边的字符一个当开头一个当结尾     【javascript:void(0)】

|:其实跟或的意思一样    例如   a|b    就说明可以是a也可以是b

.?+:     

.+?表示最小匹配
举例说明.+?与.+的区别
<a href="xxx"><span>
如果用<.+>匹配,则匹配结果是
<a href="xxx"><span>
如果用<.+?>匹配,则匹配结果是
<a href="xxx">
也就是.+?只要匹配就返回了,不会再接着往下找了

/is:      i 匹配大小写  ss 模式中的圆点元字符(.)匹配所有的字符,包括换行符 

/:顺斜杠是表示表达式的开始和结束的“定界符”

preg_match函数: http://php.net/manual/zh/function.preg-match.php

 

preg_match()返回 pattern 的匹配次数,它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后 将会停止搜索。

 

所以当返回值==1的时候说明发现匹配的字符串,就直接输出


die("found a hacker");


否则直接在通过str_replace函数把数据里面的空格去除,然后进行返回

 

分析完之后我们在回到login.php分析主要部分

2017年全国大学生信息安全竞赛---wanna to see your hat?_数组_20

name长度不能超过11,否则输出 name too long

mysql_query() 函数执行一条 MySQL 查询。

mysql_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有

返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。

if($_rows[0]) //如果$_rows[0]存在

就是说输入的name查询结果返回值不能为空   

我们只要利用 or 1=1就能让结果不为空了

 

最后name构造为:or/**/1=1#'  

2017年全国大学生信息安全竞赛---wanna to see your hat?_数组_21

 

 

用/**/代替空格  然后通过or 1=1以及#注释掉后面的语句让整个语句恒真即可

2017年全国大学生信息安全竞赛---wanna to see your hat?_SQL_22

 

 

标签:空格,.+,匹配,name,然后,---,see,hat,函数
From: https://blog.51cto.com/u_14008060/6313998

相关文章

  • 【ThinkPHP6系列学习-3】模板渲染
    视图功能由\think\View类配合视图驱动(也即模板引擎驱动)类一起完成,新版仅内置了PHP原生模板引擎(主要用于内置的异常页面输出),如果需要使用其它的模板引擎需要单独安装相应的模板引擎扩展。视图相关的配置在配置目录的view.php配置文件中进行定义。通常可以直接使用think\faca......
  • PostgreSQL集群运维案例之---构建recpmgr集群管理
    案例说明:在构建流复制集群后,可以通过repmgr实现集群的管理,并通过repmgr实现集群节点状态监控、switchover、failover切换等管理。数据库版本:PostgreSQL14集群节点信息:[root@node101~]#cat/etc/hosts192.168.1.101node101;primary节点192.168.1.102node102......
  • Flume - Flume 介绍
    Flume 组成架构Flume 安装部署   Flume 组成架构 AgentAgent是一个JVM进程,它以事件的形式将数据从源头送至目的地。Agent主要由三个部分组成:Source,Channel,SinkSourceSource是负责接收数据到FlumeAgent的组件。Source的组件可以处理各种类型、各......
  • 【ThinkPHP6系列学习-1】下载并部署ThinkPHP6
    一、下载ThinkPHP6在指定目录(www目录)下打开cmd,使用composer下载thinkphp6,命令后面的thinkphp6就是下载的目录名,可以随意修改。composercreate-projecttopthink/thinkthinkphp6二、目录结构下载后,查看目录结构,tp6的目录结构和tp5不同,默认是单应用(只有一个模块),如果需要多应......
  • PostgreSQL技术大讲堂 - 第16讲:元组(行)结构与dml操作
     PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUGPG技术大讲堂。Part16:元组(行)结构与dml操作内容1:PostgreSQL行结构内容2:DML......
  • zabbix企业监控实战-1-zabbix部署
    官网:https://www.zabbix.com参考官网:https://www.zabbix.com/download?zabbix=6.0&os_distribution=rocky_linux&os_version=8&components=server_frontend_agent&db=mysql&ws=apache1、环境准备1>修改主机名[root@zabbix~]#hostnamectlset-hostnamezabbix......
  • WebSocket 服务端-SupperWebSocket
    通过对FlectWebsocket和SupperWebSocket的比较,初步总结出WebSocket服务端的实现步骤:建立WebSocket服务,并注册事件(OpendOnMessageReceivedClosed)配置监听地址Fleck的WebSocketServer(url)url="ws://0.0.0.0:10020"而SupperWebSocket.Setup(ip,port)启动监听S......
  • 虚拟化技术 - CPU虚拟化
    本文分享自天翼云开发者社区《虚拟化技术 -CPU虚拟化》,作者:谢****悦 物理机器是由CPU,内存和I/O设备等一组资源构成的实体。虚拟机也一样,由虚拟CPU,虚拟内存和虚拟I/O设备等组成。VMM(VMMonitor)按照与传统OS并发执行用户进程的相似方式,仲裁对所有共享资源的访问。本文将分别......
  • Jmeter函数助手6-timeShift
    timeShift获取移动时间变化之后的指定格式时间FormatstringforDateTimeFormatter(optional)(defaultunixtimestampinmillisecond):可以传入我们想要的时间格式来获取当前时间YYYY-MM-ddHH:mm:ss转换时间:默认现在Amountofseconds/minutes/hours/daystoadd(e.g.......
  • 12-DSL查询语法-精准查询
    精确查询一般是查找keyword、数值、日期、boolean等类型字段。不会对搜索条件分词。常见的有:(1)term:根据词条精确值查询 (2) range:根据值的范围查询term查询因为精确查询的字段搜是不分词的字段,因此查询的条件也必须是不分词的词条。查询时,用户输入的内容跟自动值完......