post类型sql注入漏洞扫描

一、背景

SQL注入漏洞是常见web漏的中危害最大的,是危害大的漏洞中最常见的。

幸运的是主流扫描器对SQL注入漏洞扫描识别准确率非常理想

缺陷是对post请求、有用户验权(是否登录)的请求通常无能为力。

二、解决方案

一句话说明:nginx搭建代理服务器,记录代理日志,web通过代理访问,根据日志扫描。

详细说明:

1.nginx代理服务器搭建

新建server 监听9999

server {
listen 9999;
resolver 8.8.8.8 233.5.5.5;

location ~.*\.(jpg|png|jpeg|gif|js|css)$ {
proxy_pass http://$http_host$request_uri;
}

location / {
proxy_pass http://$http_host$request_uri;
}
}

本地浏览器使用代理,访问网站,保证代理可用。

2.记录请求日志

在 “location /”中记录日志 ,这里我用lua处理(nginx与lua集成见百度)

location / {
		access_by_lua '
			
			function conv2str (o)
				local rs = ""
				if type(o) == "string" then
					rs = o
				elseif type(o) == "nil" then
					rs = "nil"
				elseif type(o) == "number" then
					rs = tostring(o)
				elseif type(o) == "boolean" then
					rs = tostring(o)
				elseif type(o) == "table" then
					for k,v in pairs(o) do
						if type(v)=="string" then
							rs = rs..k.."="..v.."&"
						else
							rs = rs..k.."="..conv2str(v).."&"
						end
					end
					if string.find(rs, "&", string.len(rs)-1) ~= nil then
						rs = string.sub(rs, 0, string.len(rs)-1)
					end
				else
					error("cannot serialize a " .. type(o))
				end
				return rs
			end

			function write(logfile, msg)
				local fd = io.open(logfile,"ab")
				if fd == nil then return end
				fd:write(msg)
				fd:flush()
				fd:close()
			end
			
			function logall()
				local remote=ngx.var.remote_addr or "-"
				local host=ngx.var.host or "-"
				local nowtime=ngx.var.time_local or "-"
				local reqMethod=ngx.req.get_method() or "-"
				local reqUri=string.gsub(ngx.var.request_uri, "?.*", "") or "-"
				local args=""
				local post=""
				local headers=ngx.req.get_headers()
				local cookies=conv2str(headers["Cookie"])
				local header=conv2str(headers)
				local line=""
				args=conv2str(ngx.req.get_uri_args())
				if string.len(args) > 0 then
					line="sqlmap.py -u \\"http://"..host..reqUri.."?"..args.."\\""
				else
					line="sqlmap.py -u \\"http://"..host..reqUri.."\\""
				end
				if reqMethod=="POST" then
					local postlength=tonumber(ngx.var.content_length)
					if postlength then
						if postlength < 10485760 then
						   	post=conv2str(ngx.req.get_post_args())
							line=line.." --data \\""..post.."\\""
						end
					end
				end
				
				if cookies~="nil" then 
					line=line.." --cookie \\""..cookies.."\\""
				end
				--line=remote.." - - ".."["..nowtime.."]".." - - "..reqMethod.." - - "..reqUri.." - - host:"..host.." - - [args]:"..args.." [post]:"..post.." [header]:"..header.."\\n"
				
				local filename = "/tmp/proxy.log"
				write(filename,line.."\\n") 
			end
			
			logall()
		';
		proxy_pass http://$http_host$request_uri;
	}

reload nginx 测试,检查/tmp/proxy.log下输出是否正常

不出意外的话,proxy.log 中将打印处理好的sqlmap扫描命令(出了意外百度解决)

3.设置扫描

新建sqlant_job.sh

#!/bin/bash
# auth:zhanghang.org#gmail.com
today=`date +%Y%m%d`
proj_dir="/opt/sqlant"
mkdir -p $proj_dir
mv /tmp/proxy.log $proj_dir/$today
/bin/sh $proj_dir/$today

设置此脚本每日定时执行,剩下的检查sqlmap扫描报告就可以了

Websec&CSP

csp是什么?

csp有什么用?

csp怎样用?

csp: content-security-policy

一、csp是什么?

内容安全策略(Content Security Policy,简称CSP)是一种以可信白名单作机制,来限制网站中是否可以包含某来源内容。

由于浏览器支持问题,出现三个版本csp(建议三个都配上)

Content-Security-Policy
X-Content-Security-Policy
X-WebKit-CSP

二、csp有什么用?

通过http请求header 指定页面加载资源策略,用于防御xss攻击。

http://content-security-policy.com/

helps you reduce XSS risks on modern browsers by declaring what dynamic resources are allowed to load via a HTTP Header

http://www.w3.org/TR/CSP2/#intro

This document defines Content Security Policy, a mechanism web applications can use to mitigate a broad class of content injection vulnerabilities, such as cross-site scripting (XSS). Content Security Policy is a declarative policy that lets the authors (or server administrators) of a web application inform the client about the sources from which the application expects to load resources.

三、csp怎么用?

根据自己的策略(是否允许页内js执行,是否允许站外js加载,是否允许eval……)写好csp配置,然后将它添加到http请求header。

在线配置指导:http://cspisawesome.com/

如何添加到header中:

a. 服务端程序设置header

服务端设置header是最普通的做法,例如php的header函数,servlet的 response.setHeader()等;

b.web服务器设置header(推荐)

web服务器自定义header ,实现在web安全层统一处理;

c.页面meta设置header(不推荐)

页面meta重在对页面的描述,并且经过实际测试在meta设置csp对ie和firefox不生效(chrome、safari有效)

四、配置详解

未完待续

京东夺宝岛抢拍工具

京东夺宝岛抢拍插件(chrome及chrome内核浏览器插件)

代码地址:http://git.itant.net/zhanghang/jd-dbd

发布版本:jd_auction_v2.tar

使用方法:

1.下载并安装 (安装方法:http://jingyan.baidu.com/article/9c69d48f4b525513c9024ec6.html)

2.访问京东夺宝岛,进入心仪商品页,可以看到页面顶部(地址栏下方)出现一个灰色工具条,一个文本输入框【最高出价】,一个按钮【后台抢拍】。

在最高出价内输入自己对此商品最高报价(工具会根据商品当前拍卖价+1,填写最高价避免程序报出价格超出心里预期),然后点击一次 【后台抢拍】按钮,程序自动查询最新价  +1 后提交到京东。

 

—由于京东页面刷新较慢,建议打开浏览器控制台,通过抢拍日志查看是否出价成功—

浏览器控制台入口  http://jingyan.baidu.com/article/636f38bb3c8c88d6b84610bb.html

 

GGDomain发布-二级域名自动收集

渗透前资产收集通常需要通过google查找全部二级域名,然后找软柿子捏。

GGDomain就是一个自动化google检索并收集全部指定域下域名的程序。

通过程序搜索 site:domainname 并遍历结果,提取域名并输出。

使用方法: python ggdomain.py domainname.com output.txt

代码地址:http://git.itant.net/zhanghang/ggdomain.git

使用效果:

Z:ggdomain xxx$ python ggdomain.py zhanghang.org zhanghang.txt
https://www.google.com.tw/search?q=site:zhanghang.org&start=0&hl=en
https://www.google.com.tw/search?q=site:zhanghang.org&start=10&hl=en
https://www.google.com.tw/search?q=site:zhanghang.org&start=20&hl=en
……
……
https://www.google.com.tw/search?q=site:zhanghang.org&start=350&hl=en
api.zhanghang.org
photo.zhanghang.org
tools.zhanghang.org
blog.zhanghang.org
zhanghang.org

   https://zhanghang.org
   zhang1hang2#163.com

对于未被google收集的二级域名只能通过遍历的方式查询,可参考

http://seclist.us/subbrute-a-python-subdomain-bruteforce-tool-for-pentesters.html

https://github.com/lijiejie/subDomainsBrute