之前学习了seay法师的代码审计与及80sec的高级审计,整理了一些笔记在印象里面,也发到这里作为记录

1,漏洞挖掘与防范(基础篇)
sql注入漏洞
           挖掘经验:注意点:登录页面,获取HTTP头,(user-agent/client-ip/x-forwarded-for,订单处理等。
           注入类型:
                  编码注入:
                         1,宽字节注入;
                                    关注点:set names 'gbk',character_set_client=gbk,mysql_set_charset('gbk')
                         2,二次urldecode注入;
                                    关注点:urldecode或者rawurldecode
 

XSS漏洞
          挖掘经验:注意点:print、print_r、echo、printf、die、var_dump、var_export
 

CSRF漏洞
          挖掘经验:注意点:黑盒抓包看token与referer,白盒测试核心文件是否有验证token和referer,在看功能点代码有没有验证。
 

2,漏洞挖掘与防范(进阶篇)
文件操作漏洞
       文件包含漏洞:
               LFI:挖掘经验:关注点:模块加载,模板加载,cache调用等地方。函数:include、include_once、require、require_once
               RFI:挖掘经验:关注点:allow_url_include=on有效。
                       常见阶段手段:
                                             1,利用%00截断(php 5.3后修复)
                                             2,利用多个.和/来截断(php 5.3后修复)(window下240个连接点可截断,linux可2038个/.组合可截断)
                                             3,利用问号截断。仅限于远程文件包含。
        文件下载漏洞:
               挖掘经验:关注点:文件下载与读取显示文件的地方。函数:file_get_contents()、highlight_file()、fopen()、readfile()、fread()、fgetss()、fgets()、parse_ini_file()、show_source()、file()
        文件上传漏洞:
               挖掘经验:关注点:move_uploaded_file()函数。分析上传代码采用哪种方式?如果是白名单+重命名+高版本php没戏,如果是黑名单的话,可以找扩展名不全绕过,或者绕过验证扩展名。正则
 
         文件删除漏洞:
               挖掘经验:关注点:查找相应的功能点。函数:unlink
 
代码执行漏洞:
       挖掘经验:关注点:eval()、assert()、preg_replace()、call_user_func()、call_user_func_array()、array_map()、usort()、uasort()、uksort()、array_filter()、array_reduce()、array_diff_uassoc()、array_diff_ukey()、array_udiff()、array_udiff_assoc()、array_udiff_uassoc()、array_intersect_assoc()、array_intersect_uassoc()、array_uintersect()、array_uintersect_assoc()、array_uintersect_uassoc()、array_walk()、array_walk_recursive()、xml_set_character_data_handler()、xml_set_default_handler()、xml_set_element_handler() 等。preg_replace存在e修饰符需要关注。动态函数的执行,理解代码为什么这么写。
 
命令执行漏洞:
       挖掘经验:关注点:函数:system()、exec()、shell_exec()、passthru()、pcntl_exec()、popen()、proc_open()
          一些特性:escapeshellcmd()过滤的字符为'&',';','`','|','*','?','~','^','<','>','(',')','[',']','{','}','$','\','\x0A','\xFF','%','和"在不成对的时候被转义。
                      escapeshellarg()过滤参数,限制在一堆双引号里面,会把双引号替换为空格。
 

3,漏洞挖掘与防范(深入篇)
变量覆盖漏洞:
       漏洞挖掘经验:关注点:extract()、parse_str()、import_request_variables()【php 5.4之前】,$$
 
逻辑处理漏洞:
       漏洞挖掘经验:关注点:支付,密码找回,程序安装。通读功能点源码,程序是否可重复安装修改密码处是否可以越权,找回密码验证码是否可暴力破解与及修改其他用户密码,cookie是否可预测和cookie验证是否可绕过等。
        一些存在漏洞的判断函数:
               1,in_array()函数,【自动类型转换】
               2,is_numeric()函数,可用hex绕过,mysql可用hex编码代替字符串明文。
               3,双等于和三等于,弱类型自动转换问题。
        常见支付漏洞:
               1,客户端修改单价,总价,数量。小于0,大整数溢出等?
               2,时间竞争问题,多线程发包。
会话认证漏洞:
       挖掘经验:关注点:程序登录功能代码,控制session值和直接绕过密码验证的漏洞。验证cookie的代码,如何判断这个值,来验证是否登录。cookie不超过4096字节。
 

代码审计的一些小技巧
        1,不受保护的$_SERVER变量(user_agent,referer,client-ip/x-forward-for)和$_FILES
        2,php自带的编码函数问题,iconv,mb_conver_encoding。编码注入,utf-8转gbk问题,chr(128)到chr(255)之间都可以截断字符。(php5以上已被修复)
        3,利用字符处理函数报错信息获取绝对路径。如trim接受一个数组,程序就会报错。类似的函数有很多。
        4,不严谨的正则表达式。1,没有使用^和$限定匹配开始位置;2,特殊字符未转义。
        5,Windows FindFirstFile利用,使用'<'和'>'代表任意字符,如果文件名过长,则需要更多的<字符。如123456.txt为'1<<.txt'
        6,可变变量${@phpinfo()},${ phpinfo()},${/**/phpinfo()},第一个字符可替换为tab字符,回车换行符,加号,减号,感叹号!
 
 

1,安全是一个整体,应该通读全文,掌握整体。而不是一上来就找危险函数,回溯关键词。"一切输入都是有害的" 应该说"一切进入函数的变量都是有害的。"
2,安全应该要注重特殊环境,如php的版本,系统环境(win/linux),web服务器(iis/apache)等。
3,扩展我们的字典。
     3.1 变量本身的key 很多时候我们往往会忽略掉key
     3.2 变量覆盖(1,循环$$覆盖,parse_str,mb_parse_str,import_request_variables,Globals)
     3.3 没有魔术引号关注的地方(1,$_SERVER变量;2,getenv();3,HTTP_RAW_POST_DATA和php://input;4,数据库操作 in()/order by/limit/group by)
     3.4 变量的编码和解码(关注编码解码函数:urldecode,base64_decode,rawurldecode等)
     3.5 魔术引号在php版本为4和php<5.2.1的时候,不处理数组第一维变量的key。
     3.6 rand和mt_rand的区别,mt_srand种子可以被破解问题(php 4.2.0已被修复)
     3.7 数据库存储长度截断问题
     3.8 文件操作里的特殊字符
 
4,如何进一步寻找新的字典
     4.1 分析和学习别人的漏洞和Exp,总结出漏洞类型与及字典。
     4.2 学习php手册和官方文档,挖掘出新的有危害的函数。
     4.3 fuzz php的函数,找到新的有问题的函数。
     4.4 分析php源代码

php代码审计一些笔记的更多相关文章

  1. php代码审计基础笔记

    出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 --------------------------- ...

  2. ASP代码审计学习笔记 -5.文件下载漏洞

    文件下载漏洞 漏洞代码: <% function download(f,n) on error resume next Set S=CreateObject("Adodb.Stream ...

  3. ASP代码审计学习笔记 -4.命令执行漏洞

    命令执行漏洞: 保存为cmd.asp,提交链接: http://localhost/cmd.asp?ip=127.0.0.1 即可执行命令 <%ip=request("ip" ...

  4. ASP代码审计学习笔记 -3.上传漏洞

    1.ASP上传过程抓包分析: POST /4.asp HTTP/1.1 Host: 192.168.1.102 User-Agent: Mozilla/5.0 (Windows NT 10.0; WO ...

  5. ASP代码审计学习笔记 -2.XSS跨站脚本

    XSS漏洞: 漏洞代码: <% xss=request("xss") response.write(xss) %> 漏洞利用: 漏洞修复: Server.HTMLEnc ...

  6. ASP代码审计学习笔记-1.SQL注入

    ASP注入漏洞 一.SQL注入的原因 按照参数形式:数字型/字符型/搜索型 1.数字型sql查询 sql注入原因: ID=49 这类注入的参数是数字型,SQL语句原貌大致如下: id=request. ...

  7. XCTF两个PHP代码审计的笔记

    题目源码如下,考点是输入的$id和$row['id']的区别 关键在于红框内,可以知道题目的payload是要让$row['id']存在,查询的到数据,并且要让POST的id不能与adog相同.那显而 ...

  8. SeacmsV10.7版代码审计笔记

    data: 2020.11.9 10:00AM description: seacms代码审计笔记 0X01前言 seacms(海洋cms)在10.1版本后台存在多处漏洞,事实上当前最新版V10.7这 ...

  9. PHP代码审计笔记--弱类型存在的安全问题

    0x01 前言 PHP 是一门弱类型语言,不必向 PHP 声明该变量的数据类型,PHP 会根据变量的值,自动把变量转换为正确的数据类型. 弱类型比较,是一个比较蛋疼的问题,如左侧为字符串,右侧为一个整 ...

随机推荐

  1. js图片懒加载(滚动加载)是否生效

    一.什么是懒加载? 对未出现在视野范围内的图片先不进行加载,等到出现在视野范围才去加载. 二.为什么使用懒加载? 懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数. 理论性知识大家都有自 ...

  2. 百度编辑器的内容改变事件监听bug

    先贴上我的初始化代码,可能是用法问题冤枉了百度编辑器,如果是我的用法有问题欢迎大侠们指正 <!DOCTYPE type> <html> <head> <met ...

  3. Java爬虫——模拟登录知乎

    登录界面,首先随意输入一个账号,登录查看发送表单的请求 可以发现请求是Post : https://www.zhihu.com/login/phone_num 发送的表单是 _xsrf: passwo ...

  4. hdu 5305 friends

    每一次比赛的时候脑子都卡顿, 这次更离谱,我居然二进制枚举边,这么大的复杂度.而且剪不了枝 后来学长说着是道爆搜.搜每一条边.恍然大悟. 仅仅须要剪掉点的度数是奇数的时候,或者他的线上朋友或线下朋友大 ...

  5. leetcode:程序猿面试技巧

    起因 写在开头,脑袋铁定秀逗了,历时20多天,刷完了leetcode上面151道题目(当然非常多是google的),感觉自己对算法和数据结构算是入门了,但仍然还有非常多不清楚的地方,于是有了对于每道题 ...

  6. iOS 6.0中UIViewController被弃用的一些方法

    郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 概念:de ...

  7. Linux基础:文件查找find

    写在前面 在linux的日常管理中,find的使用频率很高,熟练掌握对提高工作效率很有帮助. find的语法比较简单,常用参数的就那么几个,比如-name.-type.-ctime等.初学的同学直接看 ...

  8. redis的hash类型

    1.简单描述 hash是一个string类型的field和value的映射表.添加和删除操作都是O(1)(平均)的复杂度.hash类型特别适合用于存储对象.在field的数量在限制的范围内以及valu ...

  9. Android项目实战(三十五):多渠道打包

    多渠道打包: 可以理解为:同时发布多个渠道的apk.分别上架不同的应用商店.这些apk带有各自渠道的标签,用于统计分析各个商店的下载次数等数据. 实现步骤 一.添加友盟渠道标签 添加位置:app目录下 ...

  10. ligerUI---下拉框(Combobox)

    写在前面: 突然发现,从刚开始对ligerUI的抵触,觉得都没有接触过,也不会,到现在,感觉ligerUI的一些组件还是挺好用的,大概日久生情吧.嘻嘻~~~,下拉框是常用的一个组件,在之前的博客中也写 ...