TypechoJoeTheme

剑心哥哥Blogs

统计

jianxin

世上无难事只怕有心人
网站页面

代码审计实战-代码层理解漏洞

2021-06-18
/
0 评论
/
24 阅读
/
正在检测是否收录...
06/18

不会编程的攻防都是瞎扯淡,从代码层认识漏洞产生的原理可以更理解漏洞的本质。

环境:windows+phpstudy+dvwa

首先安装好dvwa如图:

安装好会自动进入首页。

将从不同安全等级进行代码分析。

按照顺序第一个是命令注入,low级别看代码:


$_request超全局变量用来接收前端输入的post ip字段,

if(stristr(php_uname('s'),'Windows NT') )语句用来判断操作系统类别
完整代码:
if(stristr(php_uname('s'),'Windows NT') ) {// Windowsecho$target;$cmd=shell_exec('ping  '.$target);}else{// *nix$cmd=shell_exec('ping  -c 4 '.$target);}// Feedback for the end user$html.="<pre>{$cmd}</pre>";

如果是xx系统则直接执行
$cmd =shell_exec('ping '.$target);,shell_exec接收传过来的数据并加ping命令,未做任何过滤所以执行如下exp:

& 之后的命令无论如何都会被执行。 && 之后的命令只有在前&&之前的命令执行成功才会被执行。所以输入&或&&都可以命令执行,原因未做任何过滤。
medium级别:
$substitutions数组变量来接收到输入的exp然后将exp中的&&和;替换为空字符串
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );//str_replace函数将exp中的&&和;替换为空字符串重新构造然后继续执行shell_exec // Determine OS and execute the ping command. if( stristr( php_uname( 's' ), 'Windows NT' ) ) { // Windows $cmd = shell_exec( 'ping  ' . $target ); }
由于只把&&和;过滤了所以还可以用&或&;&来绕过:还可以用|或||以及|;|原理一样
原理:cmd中&后边无论前边成不成功后边都会执行(编程中的或),&;&因为程序把&&和;替换为空字符所以&;&被替换成=&&从而绕过。
high级别代码:
和medium级别语法一样只是增加了几个过滤,过滤如下:
'&'  => '', ';'  => '', '| ' => '', '-'  => '', '$'  => '', '('  => '', ')'  => '', '`'  => '', '||' => '',
把这些字符全部替换成空字符串然后继续执行shell_exec函数,仔细看|后边有个空格所以是把| 替换为空字符
绕过方式:ip| |,原理代码中把| 过滤成空字符所以| |过滤后=|从而命令执行。
csrf:
low和medium没有token直接构造html改密码,high级别验证了token可以利用xss获得token然后利用medium方法继续攻击,没有实战性所以直接看最高级别代码:
前端:
后端php代码中增加了当前密码的判断,也就是你要改密码的话需要输入被攻击者的当前密码+token才能改,由于无法获取当前密码所以绕不过。
文件包含:
 
我的phpini中 allow_url_include 未启用所以无法进行远程包含,只本地包含。原理一样远程包含是包含远程服务器的php文件,一般用来远程服务器放个shell然后被攻击机包含远程服务器shell从而实现getshell。
代码:
 
判断前端url是否设置了文件名,如果设置就直接包含文件(include包含含义是包含并运行指定文件),可能我这个版本dvwa和phpini没有开启远程包含函数没有_GET函数所以只能分析代码。
 
包含本地文件并执行,实战利用方式:远程服务器上传一个shell然后包含远程服务器你上传的shell文件实现getshell。
这个版本漏洞原因:没做任何过滤直接判断文件然后执行include函数造成文件包含。
现在的php版本默认没开启allow_url_include函数所以实战中远程包含的可能性不大。一般利用方式配合上传漏洞。
文件上传:
 
代码:
 
 
未作任何过滤直接上传任意文件。
medium级别:
 
对文件类型,文件大小做了判断,但没有对文件名进行处理,抓包修改绕过:
 
high级别:
 
对文件名,文件大小,文件后缀进行了判断尝试00截断,本地环境php5.3.6截断失败。
进行思路:上传图片马(图片马内容写<?fputs(fopen("xx.php","w"),'<?php eval($_POST[123]);?>')?>)然后利用文件包含执行执行实现getshell。
SQL注入:
low级别:
 

$id=$_REQUEST['id'];,接收输入的id并赋值给$id,
$query="SELECT first_name, last_name FROM users WHERE user_id = '$id';";直接把$id带入查询未做任何过滤造成sql注入。

medium级别:

使用mysqli_real_escape_string函数转义特殊字符(这个函数影响到的字符有
  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

前端代码:

for循环选择<select>标签然后传入后端,循环选择内容为数字所以造成数字型注入,使用函数转义特殊字符不全面,直接抓包扔进sqlmap加level等级即可绕过。

high级别:

对照前端代码

if($vulnerabilityFile=='high.php') {$page['body'] .="点击<a href=\"#\"onclick=\"javascript:popUp('session-input.php');return false;\">改变你的ID</a>.";}
一样的操作传到后端,代码:


if(isset($_SESSION['id'] ) ) {// Get input$id=$_SESSION['id'];// Check database$query="SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";$result=mysqli_query($GLOBALS["___mysqli_ston"],$query)or die('<pre>Something went wrong.</pre>');// Get resultswhile($row=mysqli_fetch_assoc($result) ) {// Get values$first=$row["first_name"];$last=$row["last_name"];// Feedback for end user$html.="<pre>ID:{$id}<br />名字:{$first}<br />姓氏:{$last}</pre>";}
sql语句:
$query="SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
执行完SELECT first_name, last_name FROM users WHERE user_id = '$id语句后后边有个limit函数来障碍注入分页直接用#注释绕过。


medium代码是:

"SELECT first_name, last_name FROM users WHERE user_id =$id;";     数值型注入
high代码:

"SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";      经测试为字符型注入,原因:单引号
反射xss:
low级别:
 
直接接收传过来的name并且打印到页面,因为web页面会自动解析html/css/js所以输入恶意js语句形成xss。
常见利用:弹窗且没过率特殊标签的话发给用户获取cookies或利用js做网页跳转实现引流。
medium级别:
 
用了str_replace函数把script标签替换为空字符,前端标签有很多种所以此过滤基本没用,且只针对小写进行了替换所以可以用大小写替换绕过,且函数只运行一次所以可以用双重标签绕过例:<sc<script>ript>alert(123456)</script>替换后为<script>alert(123456)</script>形成xss。
high级别:
 
是的很厉害利用正则过滤掉了script,但是网页标签有很多种所以此过滤基本没用。
存储xss:
low级别:
 
name未作处理直接插入数据库形成存储性xss。message用stripslashes做了一些过滤。
medium级别:
 
name标签用str_replace函数做了替换(<script>替换为空字符)其余没做变化,前边已经说过大小写即可绕过。
high级别:
 
利用正则表达式过滤了script标签,xss标签有很多种所以此过滤用处不大。
剩下的一些功能:暴力破解,弱口令,sql盲注没搞因为此套源码有问题这些功能失效,dvwa中没看到代码执行只有命令执行,代码执行(执行相对应编程语言函数功能)命令执行(执行操作系统命令)。
如有错误请指正。



赞 · 0
版权属于:

剑心哥哥Blogs

本文链接:

http://usg0v.com/index.php/archives/20/(转载时请注明本文出处及文章链接)

评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

知乎全站排行榜

  • 获取失败!

最新回复

暂无回复

标签云