360杯信息安全技术大赛Web第一题分析
来源:互联网 发布:什么是面向接口编程 编辑:程序博客网 时间:2024/05/18 02:46
原题如下,提示是 程序员的坏习惯
根据提示,在当前URL后加.bak,获得源码
经研究发现有变量覆盖漏洞:
auth函数用来判断用户提交的password是否与程序中的hidden_password[360]相同,如果相同,则设置$_SESSION["logged"]=1,见由于hidden_password[360]可被覆盖,因此构造如下链接:
http://localhost:8080/1.php?hidden_password[360]=1
在页面打开后,提交密码为1
在访问上述链接后,hidden_password[360]被覆盖为1,提交的密码也为1,在函数auth中,$_SESSION["logged"]就会被设置,根据if成立的条件,此时再重新访问http://localhost:8080/1.php,即可得到$hidden_password[360]的原值
根据提示,在当前URL后加.bak,获得源码
<?phperror_reporting(0); function auth($password, $hidden_password){ $res=0; if (isset($password) && $password!=""){ if ( $password == $hidden_password ){ $res=1; } } $_SESSION["logged"]=$res; return $res;} function display($res){ $aff= " <html> <head> </head> <body> <form action='' method='POST'> Password <input type='password' name='password' /> <input type='submit' value='Login' /> </form> <h3>".htmlentities($res)."</h3> </body> </html>"; return $aff;}session_start();if ( ! isset($_SESSION["logged"]) ) $_SESSION["logged"]=0; $aff="";include("config.inc.php"); $password=$_POST["password"];echo "<pre>";if (!ini_get("register_globals")) { $superglobals = array($_SERVER, $_ENV,$_FILES, $_COOKIE, $_POST, $_GET); if (isset($_SESSION)) { array_unshift($superglobals, $_SESSION); } foreach ($superglobals as $superglobal) { extract($superglobal, 0 ); }}echo "</pre>";if (( isset ($password) && $password!="" && auth($password,$hidden_password[360])==1) || (is_array($_SESSION) && $_SESSION["logged"]==1 ) ){ $aff=display("$hidden_password[360]");} else { $aff=display("Try again");}echo $aff; ?>
经研究发现有变量覆盖漏洞:
auth函数用来判断用户提交的password是否与程序中的hidden_password[360]相同,如果相同,则设置$_SESSION["logged"]=1,见由于hidden_password[360]可被覆盖,因此构造如下链接:
http://localhost:8080/1.php?hidden_password[360]=1
在页面打开后,提交密码为1
if (( isset ($password) && $password!="" && auth($password,$hidden_password[360])==1) || (is_array($_SESSION) && $_SESSION["logged"]==1 ) )此句成立的条件是“用户提交密码不为空并且与hidden_password[360]相同”或者“$_SESSION["logged"]==1”
在访问上述链接后,hidden_password[360]被覆盖为1,提交的密码也为1,在函数auth中,$_SESSION["logged"]就会被设置,根据if成立的条件,此时再重新访问http://localhost:8080/1.php,即可得到$hidden_password[360]的原值
- 360杯信息安全技术大赛Web第一题分析
- 360杯信息安全技术大赛Web第一题分析
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(WEB安全)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(WEB安全)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(逆向分析)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(逆向分析)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(加密解密题)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(加密解密题)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(网络与协议)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(数字取证)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(数字取证)
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(网络与协议)
- 2016游戏安全技术竞赛题PC第一题逆向分析详解
- 第三届全国网络空间安全技术大赛 Web补题 By Assassin(持续更新)
- 陕西省网络空间安全技术大赛安卓逆向第二题分析
- 信息安全技术
- 信息安全技术
- 信息安全技术
- Git常用命令大全
- ubuntu 下wi-fi创建
- apache虚拟主机搭建以及cgi程序的运行
- 使用mysql的随笔
- 远程拷贝东西
- 360杯信息安全技术大赛Web第一题分析
- c 语言中的变量
- 六个常用的开源搜索
- excel处理
- poj 1135 Domino Effect (隐式最短路)
- Ubuntu12.04下adb无法识别设备 Ubuntu下adb看不到设备的解决方法 博客分类: ubuntu 这个问题纠结了我2天,本来过去在ubuntu 9下连接HTC
- Download file from Linux by PSCP in windows
- 谈一下怎样判断网页是静态的还是伪静态的?
- Java对象初始化详解