网络渗透测试心得(第二部分-SQL注入)

释放双眼,带上耳机,听听看~!

Sql注入

SQL注入原理
a. SQL(结构化语句查询)b. 提交参数(调用数据库查询)的地方是用户可控的,并未做任何过滤处理c. 数字型,字符型,搜索型,POST注入,Cookie注入,延时注入,盲注等
SQL注入防护
1、使用安全的API2、对输入的特殊字符进行Escape转义处理3、使用白名单来规范化输入验证方法4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。6. 规范编码,字符集
为什么参数化查询可以防止sql注入
原理:
使用参数化查询数据库服务器不会把参数的内容当作sql指令的一部分来执行,是在数据库完成sql指令的编译后才套用参数运行
简单的说:参数化能防注入的原因在于,语句是语句,参数是参数,参数的值并不是语句的一部分,数据库只按语句的语义跑
SQL头注入点
UA REFERER COOKIE IP
盲注是什么?怎么盲注?
盲注是在SQL注入攻击过程中,服务器关闭了错误回显,我们单纯通过服务器返回内容的变化来判断是否存在SQL注入和利用的方式。盲注的手段有两种,一个是通过页面的返回内容是否正确(boolean-based),来验证是否存在注入。一个是通过sql语句处理时间的不同来判断是否存在注入(time-based),在这里,可以用benchmark,sleep等造成延时效果的函数,也可以通过构造大笛卡儿积的联合查询表来达到延时的目的。
宽字节注入产生原理以及根本原因
产生原理
在数据库使用了宽字符集而WEB中没考虑这个问题的情况下,在WEB层,由于0XBF27是两个字符,在PHP中比如addslash和magic_quotes_gpc开启时,由于会对0x27单引号进行转义,因此0xbf27会变成0xbf5c27,而数据进入数据库中时,由于0XBF5C是一个另外的字符,因此转义符号会被前面的bf带着”吃掉”,单引号由此逃逸出来可以用来闭合语句。
在哪里编码
根本原因
character_set_client(客户端的字符集)和character_set_connection(连接层的字符集)不同,或转换函数如,iconv、mb_convert_encoding使用不当。
解决办法
统一数据库、Web应用、操作系统所使用的字符集,避免解析产生差异,最好都设置为UTF-8。或对数据进行正确的转义,如mysql_real_escape_string+mysql_set_charset的使用。
sql里面只有update怎么利用
先理解这句 SQL
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='$id'
如果此 SQL 被修改成以下形式,就实现了注入
1:修改 homepage 值为http://4ngel.net’, userlevel=’3
之后 SQL 语句变为
UPDATE user SET password='mypass', homepage='http://4ngel.net', userlevel='3' WHERE id='$id'
userlevel 为用户级别
2:修改 password 值为mypass)’ WHERE username=’admin’#
之后 SQL 语句变为
UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id'
3:修改 id 值为’ OR username=’admin’之后 SQL 语句变为
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin'
sql如何写shell/单引号被过滤怎么办
写shell: root权限,GPC关闭,知道文件路径outfile函数
`http://127.0.0.1:81/sqli.php?id=1 into outfile 'C:\wamp64\www\phpinfo.php' FIELDS TERMINATED BY '<?php phpinfo(); ?>'` `http://127.0.0.1:81/sqli.php?id=-1 union select 1,0x3c3f70687020706870696e666f28293b203f3e,3,4 into outfile 'C:\wamp64\www\phpinfo.php'`
宽字节注入
代替空格的方法
%0a、%0b、%a0 等/**/ 等注释符<>
mysql的网站注入,5.0以上和5.0以下有什么区别?
5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。
5.0以下是多用户单操作,5.0以上是多用户多操做。
mysql和sqlserver注入时候的区别
发现 demo.jsp?uid=110 注入点,你有哪几种思路获取 webshell,哪种是优选?
有写入权限的,构造联合查询语句使用using INTO OUTFILE,可以将查询的输出重定向到系统的文件中,这样去写入 WebShell使用 sqlmap –os-shell 原理和上面一种相同,来直接获得一个 Shell,这样效率更高通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等方法上传 Shell
某个防注入系统,如何渗透
系统检测到你有非法注入的行为。 已记录您的ip xx.xx.xx.xx 时间:2016:01-23 提交页面:test.asp?id=15 提交内容:and 1=1 如何利用这个防注入系统拿shell?
如何利用这个防注入系统拿shell?
在URL里面直接提交一句话,这样网站就把你的一句话也记录进数据库文件了 这个时候可以尝试寻找网站的配置文件 直接上菜刀链接
如何突破注入时字符被转义?
宽字符注入hex编码绕过
mysql注入点,用工具对目标站直接写入一句话,需要哪些条件?
root权限以及网站的绝对路径。
如果sleep和benchmark关键字被过滤掉了该怎么办?
1.让两个非常大的数据表做笛卡尔积产生大量的计算从而产生时间延迟
2.如果服务器端采用长连接的话可以利用Mysql的锁机制即Get_lock()
3.利用复杂的正则表达式去匹配一个超长字符串来产生时间延迟
未知列名情况下的注入利用
果在利用SQL注入的时候遇到了WAF(安全狗3.5版本会直接拦截关键字information_shema),从而无法获取数据表的列名,这时该怎么利用漏洞呢?
利用虚表获取数据

学习区-技术教程

无线密码攻击与防护

2021-7-20 0:36:27

专栏区-攻略学习区-技术教程

Microsoft Visual C++ (MSVC)可再发行软件包(run time package)

2021-7-21 19:05:03

0 0 投票数
文章评分
3 评论
内联反馈
查看所有评论
五十岚
编辑
2021年7月20日 20:00

之前很流行的sql注入,现在都是老黄历了。

喵酱
喵酱
2021年7月20日 21:03

我看不懂,但我大为震惊

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
3
0
希望看到您的想法,请发表评论。x
()
x
'); })();