实验吧_登陆一下好吗(骚注入)你真的会PHP吗?(代码审计)
登陆一下好吗
首先看到两个输入框,分别对应账号密码,随手输个admin,admin进去,提交后发现有回显,既然题目说了过滤了一切,那就先看看过滤了些啥
经过一波测试,发现服务器过滤了union,select,or,for,#,/,*
这就很让人头疼了,没了or就没了万能密码,select也被过滤,我还真想不起来有什么注入语句了
只能去翻看wp学习一下了
一看真的是觉得脑洞大开
方法1:
username--> '='
password--> '='
膜一下大佬的思路:
首先猜测sql语句为:select * from user where username=’用户名’ and password=’密码’
这样当我们提交以上的payload后,查询语句就成了: select * from user where username=''='' and password=''=''
这里 ''='' 即 (空=空) 返回就是True,所以and前后都为True,查询语句就正确执行了
方法2:
利用mysql的数据类型转换:
原理是这样的:username是字符串类型的,当它接收到整型变量且值为0时,就会返回库内所有数据
这里同时也要用到mysql的数据类型转换,拿这里来说username=0与username='a'+0返回的结果是一样的('a'+0会自动进行类型转换,结果还是0)
目的是要构造sql语句:select * from user where username=0
还有另外一个小知识点:mysql的注释不仅有– ,/**/,#,还有一个 ;%00
所以这里第二种payload如下:
username--> a'+0;%00
passward-->
但我并没有成功,不过知道学到原理,要有成功的老哥请告诉我如何操作
方法3
原理同2,不过构造语句的思路不同
先给payload:
username--> \
passward--> ^'a
还是之前的查询语句,这次提交后变为select * from user where username='\' and password='^'a'
根据运算的优先级,这里会先比较两个字符串'\' and password='与'a'异或的结果会返回0
这也就达到了我们上面所描述的目的了
你真的会PHP吗?
在响应头中看到提示:6c525af4059b4fe7d8c33a.txt,应该就是一个代码审计
1 <?php 2 3 4 $info = ""; 5 $req = []; 6 $flag="xxxxxxxxxx"; 7 8 ini_set("display_error", false); 9 error_reporting(0); 10 11 //判断是否以POST 方式传入number,若没有就返回“have a fun!!” 12 if(!isset($_POST['number'])){ 13 header("hint:6c525af4059b4fe7d8c33a.txt"); 14 15 die("have a fun!!"); 16 } 17 //遍历POST数组中的键与值,将键赋给key,再将值得两侧去掉空格,再判断值是否是字符串,若是则将其中的特殊字符转义后赋给req数组 18 foreach([$_POST] as $global_var) { 19 foreach($global_var as $key => $value) { 20 $value = trim($value); 21 is_string($value) && $req[$key] = addslashes($value); 22 } 23 } 24 25 //构造的一个函数来判断传入的number是否是回文格式的,即一二三三二一这种格式 26 function is_palindrome_number($number) { 27 $number = strval($number); 28 $i = 0; 29 $j = strlen($number) - 1; 30 while($i < $j) { 31 if($number[$i] !== $number[$j]) { 32 return false; 33 } 34 $i++; 35 $j--; 36 } 37 return true; 38 } 39 40 /* 首先获取number的值,判断是不是纯数字,若不是,则判断req数组中number键对应的值是否等于值本身int化再字符串化的值,若相等,接着判断int化的number对应的值是否 等于其反转后的值,若相等就判断number的值是否是回文形式,不是的话就返回flag */41 if(is_numeric($_REQUEST['number'])){ 42 43 $info="sorry, you cann't input a number!"; 44 45 }elseif($req['number']!=strval(intval($req['number']))){ 46 47 $info = "number must be equal to it's integer!! "; 48 49 }else{ 50 51 $value1 = intval($req["number"]); 52 $value2 = intval(strrev($req["number"])); 53 54 if($value1!=$value2){ 55 $info="no, this is not a palindrome number!"; 56 }else{ 57 58 if(is_palindrome_number($req["number"])){ 59 $info = "nice! {$value1} is a palindrome number!"; 60 }else{ 61 $info=$flag; 62 } 63 } 64 65 } 66 67 echo $info;
代码分析就请看代码中的注释,我给每段都进行了说明
这里再给出几个函数的解释:
trim(str):去除str字符串两端的空格
addslashes(str):在str中的预定义字符前加上反斜杠,预定义字符有:单引号(')、双引号(")、反斜杠(\)、NULL
strval()/intval():将值转换为字符串/整型
strrev():反转字符串,比如将abc转为cba
总结一下这里要获取flag的要求:
1.以POST方式传入number的值
2.number的值为字符串且不能是纯数字的字符串
3.number的值=strval(intval($req['number']))
4.number整型化的值要与反转后的number整型化的值要相等
5.number的值不能是回文形式
这里的条件2,3是一对矛盾,4,5又是一对矛盾
要求number不是纯数字字符串那么intval后会把后面的字符给省略,这样就与3矛盾
4,5一看就是一对矛盾
经过一番搜索,参考了数篇wp,我了解到:
2,3可以通过空字符来绕过(如:%00)
is_numeric会判断%00为非数值,而且%00并不会被trim影响
接着就是解决4,5的矛盾
这里也有两种方法
方法1:intval函数溢出绕过
Intval最大的值取决于操作系统。 32 位系统最大带符号的 integer 范围是 -2147483648 到 2147483647。举例,在这样的系统上, intval(‘1000000000000’) 会返回 2147483647。64 位系统上,最大带符号的 integer 值是 9223372036854775807。这里就是应用最大值得反转,2147483647反转后为7463847412明显大于2147483647了,那它的值就会等于最大值2147483647,而且不是回文形式,所以这里POST的number=2147483647%00
方法2:用科学计数法构造0=0
构造number=0e-0%00,可直接绕过了
转载于:https://www.cnblogs.com/Ragd0ll/p/8682084.html
实验吧_登陆一下好吗(骚注入)你真的会PHP吗?(代码审计)相关推荐
- jsp mysql登录注册实验报告_登陆注册页面实验报告.doc
登陆注册页面实验报告 兰州理工大学 二.数据库设计 本系统采用mysql数据库,只有一个表:数据表userinfoinfo用来存储后台会员名称,密码和基本资料. 2.1用户信息表: 下面是用户信息表表 ...
- 用计算机计算线性卷积的基本规则,实验三_线性卷积与圆周卷积的计算.doc
实验三_线性卷积与圆周卷积的计算 电信类课程试验报告 学 院:基础信息工程系 别:电子信息工程课程名称:数字信号处理姓 名:学 号:日 期:实验三实验名称:线性卷积与圆周卷积的计算一.实验目的 (1) ...
- c语言编程流水灯与交通灯实验,C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟.doc...
C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟 学 号: 班 级: 自动化10班 姓 名: 张 指导老师: 胡 2012.12 单片机核心板实验要求 流水灯实验 实验目的: 简单I/O引 ...
- 交换机的基本配置实验报告_交换机入门配置,最基本的IP及登录方式配置,一分钟了解下...
一.配置要求 1.主机名更改为cisco 2.完成交换机IP地址配置,IP地址为202.119.249.250 255.255.255.0, 网关为202.119.249.2 3.MAC地址绑定,ma ...
- c 语言构造函数的实验报告,c上机实验报告_相关文章专题_写写帮文库
时间:2019-05-12 07:35:41 作者:admin 第二次上机实验报告 姓名:王小宁班级:学号: 031012 1234 第一题: 题目: 编写一个类,声明一个数据成员和一个静态数据成员, ...
- 计算机调查应用表格,大学计算机实验课_调查报告_表格模板_应用文书.doc
大学计算机实验课_调查报告_表格模板_应用文书 掠印食旗窄钙敬酮鲜补土寓戈行手彝实桨肇如苗抵讯辰蜜巨交连沈萧咖的哄铜邑冻芯淆咐俘搜挨傅得系魔湘厩辱极名刘卤绚檬跃隧阁豹钉悄捷勃扩置臼哀匿搏扦开衣即奎盼狙 ...
- 大学计算机实验图灵机模型与计算机硬件,北理大学计算机实验基础 实验一_图灵机模型与计算机硬件系统虚拟拆装-实验报告...
1.1实验一实验一 图灵机模型与计算机硬件系统虚拟拆装图灵机模型与计算机硬件系统虚拟拆装五.实验报告五.实验报告2222实验名称:学号 姓名 班级: 实验时间:年 月 日 实验报告表 1-1 图灵机模 ...
- java文件加密解密实验报告_《网络信息安全技术》_实验报告_破译vigenamp#232;re_密码加密的密文...
<<网络信息安全技术>_实验报告_破译vigen&#232;re_密码加密的密文>由会员分享,可在线阅读,更多相关<<网络信息安全技术>_实验报 ...
- 计算机组成原理寄存器的实验原理,计算机组成原理实验报告_寄存器的原理及操作课案.docx...
<计算机组成原理实验报告_寄存器的原理及操作课案.docx>由会员分享,提供在线免费全文阅读可下载,此文档格式为docx,更多相关<计算机组成原理实验报告_寄存器的原理及操作课案.d ...
最新文章
- 大数据-07-Spark之流数据
- python 命令行参数-Python命令行参数处理
- 对抗训练硬核分析:对抗样本与模型参数的关系
- 机器人摘果子看图写话_看图写话——聪明的小白兔
- 基于SLS构建RDS审计合规监控
- php header 404 nginx,ThinkPHP在nginx下怎么设置?路由统统404,疯了~
- 一致性hash算法虚拟节点_一致性 Hash 算法
- kmeans聚类算法matlab代码,K-Means算法实现(Matlab)
- 5分钟弄懂Docker
- 基于layui的select区域联动
- 如何使用Magoshare Data Recovery在mac上恢复找回删除的丢失文件?
- 工具说明书 - 网页内容抓取工具Web Scraper(一)
- linux 下spi的使用 ,cc2500模块驱动
- mui 框架跨域_MUI框架学习(5)–AJAX跨域问题
- centos安装jetbrains projector(解决不能复制问题)
- js字符串转换成数字
- 工业级嵌入式主板助力物联网行业发展
- 荣耀3手机android 5.0吗,华为荣耀3的手机系统是什么?华为荣耀3能升级安卓4.3吗?...
- 2019网易游戏测试开发实习电话面试总结
- Unity脚本(四)
热门文章
- MySQL中table_schema的基本操作
- 如何强制修改vivado工程打开版本
- 长春技师学院计算机系,长春技校排名前五十
- startlogging中设置setstdout=false来禁用这个功能。_无线路由器的安全功能,你知道多少?...
- oracle 10g dg参数配置,Windows平台之Oracle10g DG配置
- java中src_java中garadle工程没有src问题
- java订单重复提交_java表单重复提交常用解决办法
- 浪潮服务器可管理和维护性,专注用户需求,浪潮服务器提供优质高效的产品
- 爬虫的步骤解析内容xpath介绍_Xpath的基本方法和使用详解 Python爬虫中最好用解析库...
- python操作linux命令行_python调用调用Linux命令