先在指定的 server 标签中定义好cookie变量
server{...set $dm_cookie \"大众\"大众;if ($http_cookie ~ \"大众(.+)(?:;|$)\"大众) {set $dm_cookie ;}...}
这时再回到 nginx 主配置文件中, 引用刚刚设置的cookie变量, 这样, 头里面的那几个字段数据就都可以被记录了
http {...log_format main '$remote_addr - $remote_user [$time_local] '' \公众$request\"大众 $request_body $status $body_bytes_sent '' \公众$http_referer\公众 \"大众$http_user_agent\"大众 \"大众$http_x_forwarded_for\公众 \公众$dm_cookie\"大众 ';...}
按照从左到右的顺序,每个字段的的浸染分别是

远程ip是多少,客户端是谁,什么韶光访问的,要求了做事器的哪个文件,如果是post要求post的参数值是什么,做事器相应的状态码又是多少,返回给客户真个页面数据实际大小是多少,当前要求是从哪个页面过来的,客户端机器信息,客户端真实ip,cookie的参数值
以上配置完成后, 重启nginx, 然后考试测验针对性的访问, 看看我们刚设置的那几个点的数据能不能被正常记录
# /usr/local/nginx/sbin/nginx -t# /usr/local/nginx/sbin/nginx -s reload0×03
web剖析取证第一步,从最敏感的 非常状态码 开始
404 实在,正常用户在网站页面上点击访问,碰到404的概率并不多,如果你创造短韶光涌现大批量的404,很有可能都是由于入侵者在考试测验扫描各种敏感目录文件所致 像这种过于敏感的操作,现如今的waf一样平常都会进行拦截,短韶光某个ip访问量剧增,再范例不过的攻击特色....403 常日目标都会把一些不想让用户访问到的敏感路径,比如,网站后台,各种数据库的web入口,其他中间件的web入口,等等...401 涌现这个状态码,很有可能是用户正在考试测验登录有http根本认证的页面时,账号密码缺点的相应状态500 范例的做事器端缺点,常日是由于后端脚本或者数据库报错所致,比如,入侵者在考试测验一些web漏洞时就很有可能会触发这样的缺点,sql注入,代码实行...503 ....
快速提取各种敏感状态码,当然啦,这里只是给大家大略做个参考,实际中如果日志特殊大,就只管即便不要同时 tee了,可能会把系统卡去世
# grep \"大众[[:space:]]500[[:space:]]\"大众 /usr/local/nginx/logs/access_bwapp.log | tee -a nginx_500_log.txt# grep \"大众[[:space:]]404[[:space:]]\"大众 /usr/local/nginx/logs/access_bwapp.log
0×04 匹配各种常见 web攻击特色匹配特色的根本目的,实在便是想知道, 入侵者到底是不是通过web进来的,如果是,是通过什么样的漏洞进来的 ,这里所有的演示纯粹只是为了大略解释问题,见告大家实际干事的基本思路,等你自己真正用的时候,正则肯定会比我下面的这些要繁芜的多的多,说实话,这里也没用啥正则…
捕捉各种范例的敏感目录文件扫描特色,敏感文件紧张是针对各种 web入口, svn, 网站备份文件, 数据库备份文件, 敏感配置文件, 各种探针文件, 以及其它的各种敏感密码文件透露 , 很多入侵者实在根本就不须要什么漏洞, 直接从这里面获取目标的真实账号密码,后面的事情很有可能就直接行云流水了…
# grep \公众[[:space:]]404[[:space:]]\公众 /usr/local/nginx/logs/access_bwapp.log | awk '{cnt[$1]++;}END{for(i in cnt){printf(\"大众%s\t%s\n\公众, cnt[i], i);}}' | sort -n
快速捕捉各种范例web漏扫工具特色,当然,这些特色也都是很容被擦除的,不过好在一样平常人都不会这么干, 比如,最常用的几款漏扫 awvs,appscan,netsparker,burpsuite,webcuriser,vega,owasp zap,nikto,w3af,nessus,openvas….
# egrep -i --color=auto \"大众AppScan|acunetix|Netsparker|WebCruiser|owasp|ZAP|vega|Nikto|nikto|w3af\"大众 /usr/local/nginx/logs/access_bwapp.log
快速捕捉各种范例sql注入特色, 如 union,select,and,insert,information_schema,or,xor,like,order by,null,sleep…..
# egrep -i --color=auto \公众union(.)select|select(.)from\公众 /usr/local/nginx/logs/access_bwapp.log
快速捕捉各种范例的代码或者命令实行特色eval,assert,system,passthru….
# egrep -i --color=auto \"大众system\(.\)|eval\(.\)\公众 /usr/local/nginx/logs/access_bwapp.log
抓取 后台非常的登录行为 ,可直接提取管理页面的200相应所对应的ip [ 这里可不仅限于常规网站后台,其它的各种数据库web管理入口等都可以这样干..] , 先大致定位其ip,确定是不是我们自己的ip,如果不是,可能就要把稳了…尴尬,貌似又掉图了,尼玛
# egrep -i --color=auto \公众portal.php\公众 /usr/local/nginx/logs/access_bwapp.log | grep \公众[[:space:]]200[[:space:]]\公众 | awk -F \公众 \"大众 {'print $1'} | sort | uniq -c
从要求记录中捕捉各种范例的 webshell文件命名特色 , 比如, 最常见的 spy系列,b374k,r57,c99,c100,Kacak,Zehir4,Webadmin,Webadmin,Spybypass,loveshell,hacker,hacked,shell,g.,maer… tennc有个专门搜集webshell的仓库, 可以去那里, 把所有的 webshell 特色都提取一遍, 放到自己的正则中
# egrep -i --color=auto \公众r57|c99|c100|b374k|aspxspy|phpspy|aspxspy|wso\"大众 /usr/local/nginx/logs/access_bwapp.log
从要求记录中捕捉各种敏感的 代码命令实行,文件操作类参数特色 ,比如, php?cmd= , php?filemanager= , php?upload=……..webshell中的参数一样平常也都会这么传
# egrep -i --color=auto \"大众php\?cmd=|php\?code=|php\?exec=\公众 /usr/local/nginx/logs/access_bwapp.log
从get或者post中提取各种范例的 包含,文件读取,任意文件下载,email,xpath,ldap注入…等漏洞参数特色 ,一样平常这样的url中常日都会带有路径分隔符,如,./ ../../ …..
# egrep -i --color=auto \"大众php\?file=|php\?page=|php\?include=|\.\/|php?\.\.\/\"大众 /usr/local/nginx/logs/access_bwapp.log
从get或者post中提取范例的 xss漏洞参数特色 ,既然是xss,直接想办法过滤 js代码 就好了
# egrep -i --color=auto \"大众<script>(.)</script>|alert\(.\)\"大众 /usr/local/nginx/logs/access_bwapp.log
快速锁定 要求相比拟较频繁的那些ip , 找到ip对应的记录看看它们都到底在干啥, 然后再针对性的提取剖析
# awk '{print $1}' /usr/local/nginx/logs/access_bwapp.log | sort -n |uniq -c | sort -rn | head -n 100
搜集各种范例的 webshell管理工具 发起的各种敏感 http数据特色,详细针对性的正则,可能须要你自己,抓包好好看下里面的各种要求参数,如,菜刀,Altman,weevely….比较大略,就
利用系统现有工具,手工先大略查杀下网站目录下的各种 webshell特色 , egrep,find,sed,awk,sort,findstr…..一句话快速定位网站目录中的大略单纯webshell,当然,这个能达到的效果非常有限,不过,如果你想快速的找到一些比较烂的webshell还是可以的
# find /usr/local/nginx/html/ -type f | xargs egrep \"大众eval|system\公众
针对各种开源程序或者框架0day,可以想办法直接捕捉相应的 exp参数特色 ,详细的exp得详细对待了,大家可以把曾经曝过的所有0day,花点儿韶光好好搜集一下,然后再针对性的提取一下exp核心参数特色, 然后再集成到自己的正则里就好了, 比如, wp,joomla,drupal,phpbb,discuz,strus2,tp…..这里就不再演示了,如果你直接用的便是开源程序 [ 肯定不是用的很烂的那种,如果是wp,drupal这种级别的 ], 这一条每每就直接能帮你锁定入侵者,由于像这种程序一样平常都是直接拿曾经的一些0day打的,当然啦,除了其它的各种透露之外,如果你都拿到了后台管理员的账号密码了,还须要什么exp呢
末了,再上各种专业 webshell 查杀工具仔细扫描网站目录,比如,各种鱼,各种狗,以及各种云 dog….
0×05在实际剖析 web日志 过程中的常常会涌现的一些窘境
大概你看我这个貌似挺大略的,但实际生产环境下就并非如此了,你要考虑到的东西大概会比较的多不过万变不离其宗,基本思路有了,剩下的只是实践,针对性改进,和履历的问题履历老道的入侵者,可能对日志处理的也比较到位,很难捕捉到什么有用的东西比如,最范例的,更换假造,以此稠浊试听,或者直接把某个韶光段内的日志全体干掉,如果没有日志同步,这无疑会给取证带来不小的困难入侵者一样平常都挂vpn或者利用tor来频繁切换ip节点,很难溯源到入侵者的真实ip基于各种形式编码后的要求很随意马虎被现有的正则遗漏掉各种免杀webshell,纯挚的依赖静态查杀特色很难被捕捉到比如,各种利用包含,回调,编码,数组循环进行字符拼接...所布局的webshell,waf就很难捕捉到对付那种直接插到正常代码中或者直接驻留在内存中的webshell,查杀可能就更困难了虽然有的杀软可以帮我们干这事儿[比如,nod32],但那个毕竟也很有限单个日志文件太大,普通的文本编辑器编辑起来可能有点儿费劲,不过这个也不算什么问题,毕竟10G下的vi虽然有些吃力,但凑活用……关于实时网站目录入侵监控方案,现在也有一些,不过,跟自己的想法多多少少还是有些出入 这里所说的实时网站入侵监控,依然会从http这一层走,目前自己也还正在不断积累学习中,待后期沉淀成干货后,再仔细分享给大家....可能有人会问,这种东西为什么不写脚本呢,嘿嘿……脚本是很方便,但并不是什么都可以用脚本干,毕竟有目的的取证并非流水线,很多时候还是须要人为剖析我们的终极目的可能还是像更精准的溯源到入侵者,并非为了写工具而写工具当然,如果这种东西能再合营着大数据一起无疑是非常好的,不过,这可能须要一个很成熟的平台,须要有一定的数据积攒才行待续....